Jak wypisujesz aktywne tryby pomocnicze w emacsie?
emacs
minor-mode
Tylko czytać
źródło
źródło
boundp
zamiastsymbolp
ciebie, możesz pozbyć sięcondition-case
.describe-mode
mogę jakoś wymyślić listę włączonych trybów pomocniczych, dlaczego nie mogłem? Więc po przeczytaniu jego kodu źródłowego zdałem sobie sprawę, że pobiera listę aktywnych trybów pomocniczych z obuminor-mode-list
iminor-mode-alist
. Korzystając zdash.el
biblioteki do manipulacji listami innej firmy, otrzymałem ten kod:Na przykład, aby wyłączyć wszystkie tryby podrzędne, użyj
-each
:Nie zapomnij zapisać listy pobocznych trybów w zmiennej, w przeciwnym razie będziesz musiał ponownie uruchomić Emacsa lub włączyć je z pamięci.
źródło
Jeśli chcesz programowo zrobić coś ze wszystkimi buforami, które mają aktywny określony tryb, to najlepsze, najbardziej minimalistyczne, najczystsze wbudowane rozwiązanie jest następujące:
Wykonuje następujące czynności:
buffer-list
, z aktualnie aktywnym buforem na początku listy (więc jest traktowany jako pierwszy, zwykle to, co chcesz, ale pomińcurrent-buffer
parametr, jeśli nie obchodzi Cię to).$buf
.with-current-buffer $buf
do informowania Emacsa, że cały kod w treści powinien działać tak, jakby był w buforze$buf
zamiast w jakimkolwiek buforze, który naprawdę wyświetlasz na ekranie.when <some mode variable>
to właściwy sposób sprawdzenia, czy tryb jest włączony; możesz również użyćif
i innych takich metod. Tak czy inaczej, celem jest sprawdzenie, czy zmienna trybu głównego trybu pomocniczego lub głównego jest ustawiona w buforze. Prawie wszystkie tryby definiują zmienną poprzez „definiowanie” trybu, co automatycznie powoduje utworzenie zmiennej lokalnej bufora o nazwie odpowiadającej trybowi, i tak to działa. A jeśli nie mają standardowej zmiennej, spójrz na ich własny kod źródłowy, aby zobaczyć, jak ich kod „przełączający” określa, jak je włączać i wyłączać. 99% z nich korzysta z istnienia zmiennej ich nazwy modemu (a jeśli nie, sugeruję zgłosić to jako błąd autorowi trybu). Na przykład, aby sprawdzić, czy bufor ma aktywny tryb białych znaków, powiedziałbyśwhen whitespace-mode
.Cieszyć się! Dalej do większego i czystszego kodu lisp!
źródło
Oto prosty alternatywny fragment kodu podobny do niektórych metod, które zostały już omówione w innych odpowiedziach:
źródło