Hanya aktifkan mode spasi putih di buffer tertentu

8

Saya ingin agar mode spasi diaktifkan untuk semua buffer kecuali untuk mode-org. Sangat mudah untuk melakukan ini ketika emacs dimulai, tetapi karena saya menggunakan salinan emacs yang persisten dengan mode daemon emacs, saya tidak bisa begitu saja melakukannya.

Saya mencoba:

(require 'whitespace)
(setq whitespace-line-column 80)
(setq whitespace-style '(face lines-tail))
(global-whitespace-mode t)
(add-hook 'org-mode-hook
      (lambda ()
          (visual-line-mode 1)
          (auto-fill-mode -1)
          (setq whitespace-style nil)))

tetapi begitu saya mengunjungi buffer mode-org semua buffer masa depan saya tidak memiliki mode spasi putih lagi.

Saya berpikir untuk menambahkan pengait untuk mengaktifkan mode spasi putih untuk mode-mode besar lainnya, tapi itu sepertinya cara yang buruk karena saya tidak ingin menyebutkan semua mode lain yang mungkin.

Saya tahu bahwa ada mode spasi putih bersama dengan mode spasi global, tapi saya tidak yakin bagaimana saya bisa menggunakannya untuk membantu di sini juga.

Apakah ada cara lain untuk mencapai hal ini yang tidak saya pikirkan?

jcv
sumber
3
Anda dapat mengubah global-whitespace-modedefinisi dengan menambahkan (unless (eq major-mode 'org-mode) . . .). Atau, Anda dapat mengaktifkannya pada per mode-utama alih-alih secara global - yaitu, untuk setiap mode-besar, gunakan kail dan (whitespace-mode 1). Ide Anda juga dapat berfungsi jika Anda menggunakan (setq-local whitespace-style nil), tetapi secara teknis mode ini masih aktif hanya dengan nyali / umph yang dikeluarkan.
hukum
1
Tidak terkait: Anda tidak boleh mengutip lambdas
Malabarba
Poin bagus tentang lambda yang dikutip. Tidak yakin bagaimana atau mengapa saya berakhir dengan cara itu tetapi saya menghapusnya dari .emacs saya. Terima kasih.
jcv

Jawaban:

17
(setq whitespace-global-modes '(not org-mode))

Lihat C-hv whitespace-global-modes RET

phils
sumber
Itu bekerja dengan sempurna. Terima kasih. Saya tahu harus ada sesuatu yang sederhana yang saya lewatkan.
jcv
4

Mungkin lebih mudah untuk mematikan mode spasi langsung, menggunakan

 (whitespace-mode -1)

Juga, whitespace-stylebukan variabel penyangga-lokal, sehingga dimodifikasi untuk semua penyangga lainnya juga. Coba saja

(set (make-local-variable 'whitespace-style) nil)
Kirill
sumber
Saya sebenarnya awalnya mematikan mode spasi langsung dari pada repot-repot dengan var gaya putih. Itu hanya iterasi saat ini dari upaya saya. Saya akan mencoba apa yang disarankan orang dan kemudian memperbarui ini dengan apa yang berhasil untuk saya.
jcv
Ini sebenarnya bekerja juga, tetapi ketika Anda berkomentar sendiri, langsung mematikan mode spasi daripada berurusan dengan gaya adalah solusi yang lebih baik (yang jawabannya di atas tidak).
jcv