Są pewne rzeczy, takie jak wyświetlanie końcowych białych znaków, wyświetlanie granic buforów, tęczowe separatory i wiele innych, które chciałbym włączyć w większości trybów, a raczej wszystkie związane z programowaniem i tekstem (ponieważ wyświetlanie końcowych spacji w, powiedzmy ediff-mode
, koliduje z trybem głównym) zamiast używać zglobalizowanego trybu podrzędnego z regułami wyjątków. Ponieważ większość trybów pochodzi z jednego z prog-mode
lub text-mode
, dodanie omawianej funkcji do obu prog-mode-hook
i text-mode-hook
działa, jednak jest wystarczająca liczba trybów niezgodnych z tą specyfikacją, takich jak css-mode
lub LaTeX-mode
.
Chciałbym zdefiniować hak, który na razie obejmuje wszystkie te tryby, aby dodać funkcje tylko do jednego haka. Nazwijmy to non-special-mode-hook
(aby odróżnić special-mode-hook
). Jak mogę stworzyć taki hak, który będzie uruchamiany dla wszystkich głównych trybów, dla których został stworzony?
Odpowiedzi:
Po prostu zgrupuj te ustawienia razem w funkcję i dodaj tę funkcję do wszystkich odpowiednich funkcji przechwytujących:
Żaden inny sposób na zrobienie tego nie byłby bardziej zwięzły: cokolwiek się stanie, gdzieś będziesz mieć białą listę lub czarną listę trybów. W praktyce znajdziesz tylko kilka trybów, które wymagają dodania do listy, więc sugeruję po prostu uproszczenie.
W mojej własnej konfiguracji używam właśnie tej sztuczki, aby ujednolicić konfigurację kilku trybów zorientowanych na seplenienie.
źródło
derived-mode-hook-name
.(dolist ...)
kontra(add-hook ...)
<powtórzenie>. Będę trzymać tylko z kopalni przy zachowaniu Tryb określonych zmian oddzielny (plik-per-trybieuse-package
,el-get
). Oba są rozwiązaniami typu „wszystko w jednym”, ale z różnych punktów widzenia.APPEND
argumentu innego niż zeroadd-hook
, wówczas hooki zostaną wywołane w odwrotnej kolejności od podanej przez ciebie kolejności list. Nic w tym złego; bądź tego świadomy, na wypadek, gdyby kolejność miała znaczenie.Możesz dodać funkcję
after-change-major-mode-hook
, która sprawdza, czy nowy tryb jest interesujący (być może poprzez(not (derived-mode-p 'special-mode))
), a jeśli tak, to czy działanon-special-mode-hook
.źródło
fundamental-mode
, ale robią więcej niż tylko wyświetlanie tekstu), ale trochę zbyt magicznie jak na mój gust. Stąd głosowanie.Często zdarzało mi się, że @ sanityinc owija moje ustawienia i drobne aktywacje trybu w defun i zapętla się przez haki, aby to nazwać, ale chciałem czystszego podejścia, więc napisałem to makro:
Uwaga: jestem
dash.el
za czystością, ale można ją łatwo dostosować do użycia(dolist)
.Następnie możesz zdefiniować zgrupowane tryby jako zmienne listy i używać ich w następujący sposób:
źródło
derived-mode-hook-name
aby uzyskać nazwę zmiennej przechwytującej trybu, unikając w ten sposóbintern
sztuczki.derived-mode-hook-name
. fajna wskazówka!Zamiast definiować nowy haczyk, który działa dla wszystkich trybów niepochodzących , możesz wykonać następujące czynności.
Nadal będziesz musiał dodać go do wszystkich trybów, ale definiując swoją funkcję tak, aby obejmowała wszystkie tryby, będziesz musiał zmienić tylko jedną definicję podczas dodawania / usuwania dodatkowych funkcji.
źródło
Może możesz spróbować:
źródło