Globalne pomniejsze tryby stworzone z define-globalized-minor-mode
makro są nieco skomplikowane. Powodem, dla którego twój kod nie wydaje się nic robić, jest to, że tryby globalizacji wykorzystują after-change-major-mode-hook
, aby aktywować buforowy tryb lokalny podrzędny, który kontrolują; i ten hak uruchamia się natychmiast po po głównych hakach trybu głównego, .
Poszczególne tryby mogą zaimplementować niestandardowe sposoby określania jakiejś czarnej listy lub inną metodę zapobiegania włączaniu trybu w pewnych okolicznościach, więc ogólnie warto byłoby spojrzeć na odpowiednie opcje M-x customize-group
pakietu, aby sprawdzić, czy takie urządzenia istnieją. Jednak miła, czysta, ogólna droga do osiągnięcia tego w KAŻDYM zglobalizowanym, drugorzędnym trybie, mi się wymyka.
To wielka szkoda, że funkcja MODE-enable-in-buffers
zdefiniowana przez to makro nie wykonuje tego samego testu, który jest wykonywany przez funkcję trybu globalnego. Jeśli tak, to możesz może po prostu użyć slime-repl-mode-hook, aby bufor zmienny trybu globalnego-lokalny i zerowy.
Szybkie Hack jest sprawdzenie co turn-on
argument jest dla zglobalizowanym moll definicji trybu (w tym przypadku jest to centered-cursor-mode
sama) i napisać jakiś wokół radę powstrzymać że od ocenianego dla trybów w pytaniu.
(defadvice centered-cursor-mode (around my-centered-cursor-mode-turn-on-maybe)
(unless (memq major-mode
(list 'slime-repl-mode 'shell-mode))
ad-do-it))
(ad-activate 'centered-cursor-mode)
Coś my może do (z łatwym wielokrotnego użytku wzór) jest natychmiast ponownie wyłączyć tryb buforowy-local-moll po jego włączeniu. after-change-major-mode-hook
funkcja dodana z APPEND
argument add-hook
będzie niezawodnie uruchamiany po zglobalizowanym trybie moll działał, a więc możemy robić takie rzeczy jak:
(add-hook 'term-mode-hook 'my-inhibit-global-linum-mode)
(defun my-inhibit-global-linum-mode()
"Counter-act `global-linum-mode'."
(add-hook 'after-change-major-mode-hook
(lambda() (linum-mode 0))
:append :local))
lub jego alias define-global-minor-mode
które czuję, że powinienem należy unikać, ze względu na możliwość pomylenia z "globalnymi" trybami podrzędnymi utworzonymi z define-minor-mode
. "Zglobalizowane" drugorzędne tryby, choć nadal działają w trybie globalnym drugorzędnym, w praktyce działają bardzo różnie, więc lepiej jest je nazywać "globalizacją" niż "globalną".
CHFdefine-globalized-minor-mode
RET pokazuje, że turn-on
jest trzeciego argumentu, i sprawdzenia, czy w definicji trybu z m-xfind-function
RETglobal-centered-cursor-mode
RET.
z tym podejściem, fakt ten ma uniemożliwić kiedykolwiek włączenie tej niewielki tryb za pomocą śluz-repl-mode lub powłoki trybu buforów, natomiast zglobalizowanym trybie moll z oddzielną funkcją turn-on mógł nadal być powołany w jego nie-globalnej formie, jeśli tego pragniesz.
https://stackoverflow.com/a/19295380/324105
Nie wydaje się działać po przełączeniu z jednego trybu głównego na inny – xuhdev