Dengan desain, fundamental-mode
tulang telanjang seperti mode utama lainnya seharusnya berasal dari ini.
Dari halaman info (elisp) Major Modes
, kami memiliki:
Ini adalah perintah mode utama untuk mode Fundamental. Tidak seperti perintah mode lainnya, ini tidak menjalankan mode kait apa pun (* perhatikan Konvensi Mode Utama: :), karena Anda tidak seharusnya menyesuaikan mode ini.
Untuk alasan itu,
- Kami tidak punya
fundamental-mode-hook
. - Juga
my-minor-mode
tidak bisa diaktifkan HANYA dalam mode buffer utama ini meskipun ada(global-my-minor-mode 1)
di konfigurasi saya.
Di bawah ini akan berfungsi tetapi hanya jika saya mengetik secara manual M-x fundamental-mode
:
(add-hook 'after-change-major-mode-hook #'my-minor-mode)
Ini tidak membantu dalam kasus di bawah ini di mana fundamental-mode
buffer (* abcd *) dibuat secara default:
(with-current-buffer (get-buffer-create "*abcd*")
(insert "Hello world"))
Mengapa saya ingin mengaktifkan mode minor fundamental-mode
?
Saya suka menyimpan binding kunci kustom saya di peta mode minor saya. Saya memiliki mode minor ini diaktifkan secara global (tetapi itu tidak bisa diaktifkan hanya dalam fundamental-mode
buffer).
Berikut ini adalah kasus penggunaan yang membuat ini mengajukan pertanyaan ini di sini. Saat melakukan M-x esup
( esup
paket), ia menciptakan *esup-log*
buffer dengan fundamental-mode
sebagai mode utamanya. Tetapi setiap kali saya perlu mengaktifkan mode minor saya secara manual di dalamnya untuk menggunakan binding nyaman saya.
Saya ingin mengaktifkan my-minor-mode
secara global, fundamental-mode
atau tidak.
Pembaruan 1:
Berikut adalah definisi modus kecil saya: modi-mode
.
Pembaruan 2:
Berdasarkan komentar @npostavs , saya meninjau apa yang berbeda antara mode minor saya modi-mode
dan override-global-mode
in use-package/bind-key.el
. Dan ternyata bahwa nilai init dari modus saya adalah nil
dan bahwa override-global-mode
adalah t
.
Jika saya mengubah nilai init dari mode saya ke t
, itu juga akan diaktifkan di buffer mode dasar! Tetapi tindakan (global-modi-mode 1)
tidak berakhir dengan hasil yang sama. Apakah itu aneh? Mungkin bug?
sumber
fundamental-mode
buffer untuk saya, jadi mungkin masalahnya ada pada definisi mode Anda.override-global-mode
use-package
mengimplementasikannya.nil
; tapi saya mengaktifkannya secara global.buffer.c
, sepertinyaget-buffer-create
menjalankan bagianbuffer-list-update-hook
paling akhir dari fungsinya, mungkin Anda bisa melampirkan fungsi Anda sendiri dengan kondisi ke kait itu?Jawaban:
Satu-satunya cara saya bisa mengaktifkan mode minor secara default di
fundamental-mode
buffer adalah dengan menetapkan nilai init dari mode minor ket
.Perhatikan bahwa hanya mengaktifkan ON mode minor global (lihat
C-h i g (elisp) Defining Minor Modes
) dengan nilai initnil
tidak melakukan hal yang sama. Dalam hal ini,fundamental-mode
buffer akan dibuat dengan mode minor ini dinonaktifkan.Hal di atas, tentu saja, hanya akan berfungsi jika Anda mengontrol sumber mode minor. Untuk semua mode minor lainnya yang datang dengan paket yang berbeda, jika Anda ingin mengaktifkan mode minor secara default di
fundamental-mode
buffer, Anda perlu melakukansumber
(setq-default 'the-minor-mode t)
untuk mendapatkan efek yang sama.(setq-default modi-mode 1)
fungsiturn-on-modi-mode
dan(setq-default modi-mode nil) to the function
mematikan modi-mode`, maka Anda akan selangkah lebih dekat untuk benar - benar mengaktifkan dan menonaktifkan mode secara global.Jangan gunakan
fundamental-mode
- setidaknya tidak secara interaktif. Anda jarang ingin berada difundamental-mode
. Hampir selalu ada sesuatu yang lebih baik.Intinya
fundamental-mode
adalah tidak memiliki penanganan mode-mayor biasa (kait, dll.). Anda dapat menganggapfundamental-mode
sebagai semacam kelas abstrak.Jika beberapa paket menempatkan Anda di buffer yang ada di
fundamental-mode
kemudian lakukan apa yang perlu Anda lakukan untuk mencegah ini - gunakan beberapa mode lain untuk itu.Pertimbangkan mengkustomisasi
major-mode
sehingga default untuk sesuatu selainfundamental-mode
. (Saya menggunakanindented-text-mode
.)Sebelumnya ada
default-major-mode
untuk ini, yang saya pikir sedikit lebih jelas, tetapi mereka memutuskan untuk mencela itu (masih berfungsi, tentu saja).sumber
fundamental-mode
. Inti masalahnya adalah bahwa ketika setiap paket menggunakanget-buffer-create
untuk menghasilkan buffer sementara, buffer itu dibuat denganfundamental-mode
mode utama. Dalam buffer itu, mode minor saya tidak akan diaktifkan secara default (karena nilai init-nya adalah nihil; walaupun saya mengaktifkannya secara global).esup
,keyfreq
get-buffer-create
tidak melakukan apa pun untuk menetapkan mode utama (atau mode minor apa pun). Haruskah (untuk paket yang dimaksud)? Jika perlu, pertimbangkan untuk menghubungi pengelola paket. Jika tidak, pertimbangkan untuk mengaktifkan sendiri mode utama atau minor pilihan Anda. TKI, jika ini tentang apa yang Anda inginkan, dan bukan apa yang harus diatur oleh paket secara umum, maka terserah Anda untuk mengaturnya seperti yang Anda inginkan.Fungsi
get-buffer-create
ini didefinisikan dalambuffer.c
, dan pada akhir fungsi itu ia memanggilbuffer-list-update-hook
. Pengait seperti itu dapat digunakan untuk menjalankan fungsi kustom, tetapi kondisi tertentu mungkin perlu ditambahkan untuk mencegah fungsi kustom tersebut menembaki momen yang tidak menguntungkan setiap kali kait itu dipanggil oleh fungsi lain.sumber