Bagaimana Anda mendaftar mode minor aktif di emacs?
emacs
minor-mode
Hanya baca
sumber
sumber
boundp
alih-alihsymbolp
Anda dapat menyingkirkancondition-case
.describe-mode
entah bagaimana dapat menampilkan daftar mode minor yang diaktifkan, mengapa saya tidak bisa? Jadi setelah membaca kode sumbernya, saya menyadari bahwa ia mendapat daftar mode minor aktif dari keduanyaminor-mode-list
danminor-mode-alist
. Menggunakandash.el
pustaka manipulasi daftar pihak ketiga, saya datang dengan kode ini:Jadi, misalnya, untuk menonaktifkan semua mode minor, gunakan
-each
:Jangan lupa untuk menyimpan daftar mode minor dalam variabel, jika tidak, Anda harus memulai ulang Emacs atau mengaktifkannya dengan memori.
sumber
Jika Anda ingin melakukan sesuatu secara terprogram dengan semua buffer yang memiliki mode tertentu aktif, maka solusi bawaan terbaik, paling minimalis, terbersih, adalah sebagai berikut:
Itu melakukan hal berikut:
buffer-list
, dengan buffer yang saat ini aktif di bagian atas daftar (jadi ini diperlakukan terlebih dahulu, biasanya sesuai keinginan Anda, tetapi biarkancurrent-buffer
parameter jika Anda tidak peduli).$buf
.with-current-buffer $buf
untuk memberi tahu Emacs bahwa semua kode di dalam body harus berjalan seperti jika dijalankan di dalam buffer$buf
bukan buffer apa pun yang sebenarnya Anda tampilkan di layar.when <some mode variable>
adalah cara yang benar untuk memeriksa apakah suatu mode diaktifkan; Anda juga dapat menggunakanif
dan metode serupa lainnya. Apa pun itu, tujuannya adalah untuk memeriksa apakah variabel mode utama minor atau mode utama disetel dalam buffer. Hampir semua mode mendefinisikan variabel melalui "mendefinisikan" mode, yang secara otomatis menyebabkan mereka membuat variabel buffer-lokal dinamai mode, yang merupakan cara kerjanya. Dan jika mereka tidak memiliki variabel standar, lihat kode sumber mereka sendiri untuk melihat bagaimana kode "toggle" mereka menentukan cara mengaktifkan dan menonaktifkannya. 99% dari mereka menggunakan keberadaan variabel modename mereka (dan jika tidak, saya sarankan untuk melaporkannya sebagai bug ke pembuat mode). Misalnya, untuk memeriksa apakah buffer memiliki whitespace-mode aktif, Anda akan berkatawhen whitespace-mode
.Nikmati! Maju ke kode cadel yang lebih besar dan lebih bersih!
sumber
Berikut ini cuplikan alternatif sederhana yang mirip dengan beberapa metode yang telah dibahas di jawaban lain:
sumber