Uzyskaj listę aktywnych mniejszych trybów w buforze


14

Jak uzyskać listę aktywnych mniejszych trybów w bieżącym buforze?

Dokumenty (info "(elisp)Minor Mode Conventions")mówią:

 Define a variable whose name ends in ‘-mode’.  We call this the
 "mode variable".  The minor mode command should set this variable.
 The value will be ‘nil’ if the mode is disabled, and non-‘nil’ if
 the mode is enabled.  The variable should be buffer-local if the
 minor mode is buffer-local.

Zatrzymuję się na:

(dolist (m minor-mode-list)
  (when (symbol-value m)
    (push m modes)))

describe-mode źródła mają notatki, że:

;; Older packages do not register in minor-mode-list but only in
;; minor-mode-alist.

Nie wiem czy ten ważny punkt ...


2
Czy nie describe-modema odpowiedniej listy aktywnych mniejszych trybów w bieżącym buforze?
Drew,

1
@Drew Wygląda na to, że może chce tego programowo?
niania

1
@nanny: Tak, zgadłem. W takich przypadkach jednym z punktów, które należy zacząć, jest sprawdzenie kodu describe-mode- o ile nie jest to wystarczające.
Drew,

Odpowiedzi:


7

Spróbuj tego:

(mapcar #'car minor-mode-alist)

W rzeczywistości przekonasz się, że ta wartość często się różni minor-mode-list.


13

Jeśli chcesz zobaczyć, jakie drobne tryby są używane w buforze, ale nie musisz używać listy, użyj programowo:

M-x describe-mode

To polecenie otworzy nowy bufor, który zaczyna się od pełnej listy twoich mniejszych trybów, a także daje krótki opis głównych trybów i wszelkich trybów nadrzędnych, które mogły być uruchomione.


1
Chociaż może to nie do końca odpowiedzieć na pytanie PO, był to pierwszy wynik, jaki znalazłem, szukając tego pytania. Ponieważ komentarz Drew rozwiązał mój przypadek użycia, pomyślałem, że zasługuje na pełną odpowiedź dla przyszłych poszukiwaczy.
Wilduck

+1 za wykazanie bardziej ogólnego rozwiązania problemu. describe-modejest szczególnie przydatny!
efsmith
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.