Wyłączanie trybu wcięcia elektrycznego tylko dla jednego trybu (tryb lateksowy)

11

Nie podoba mi się sposób, w jaki tryb wcięcia elektrycznego działa w trybie lateksowym. Wszędzie (przynajmniej wszędzie, z którego korzystam) jest świetnie.

Jak mogę trwale wyłączyć tryb wcięcia elektrycznego tylko w trybie lateksowym, ale zachować go wszędzie indziej?

Domyślam się, że jest to hackowanie liniowe w jednym wierszu w moim pliku konfiguracyjnym lub coś w tym rodzaju, ale jestem okropny w seplenieniu, więc nie mogę tego rozgryźć.

Toby Muhlhofer
źródło

Odpowiedzi:

8

Polecenie, którego potrzebujesz to electric-indent-local-mode. Można to wykorzystać, aby wyłączyć-indent trybie elektrycznym w każdym buforze nazywając go ręcznie: M-x electric-indent-local-mode. Jest to przełącznik, więc wywołanie go ponownie w tym samym buforze powoduje jego ponowne włączenie.

Aby to zrobić automatycznie z pliku init, musisz ustawić hak. Najpierw zdefiniuj zaczep:

(defun remove-electric-indent-mode ()
  (electric-indent-local-mode -1))

Następnie dodaj go do odpowiednich haków trybu. Aby wyłączyć tryb wcięcia elektrycznego dla trybu LaTeX dostarczanego przez AUCTex, użyj tego:

(add-hook 'LaTeX-mode-hook 'remove-electric-indent-mode)

Dla domyślnego trybu tekstowego użyj:

(add-hook 'tex-mode-hook 'remove-electric-indent-mode)

Ten sam wzór obowiązuje dla każdego innego trybu, w którym chcesz wyłączyć elektryczne wcięcie.

Aby uzyskać więcej informacji na temat trybów przechwytywania, zobacz wbudowany węzeł ręczny Emacsa [(emacs) Hooks][1]. Możesz się tam dostać z Emacsa za pośrednictwem C-h i r m Hooks <enter>: C-hpomocy, iinformacji, rprzeczytania instrukcji, mpozycji menu i Hookswyboru pozycji menu. (lub możesz kliknąć powyższy link, aby zobaczyć wersję HTML).

Tyler
źródło
Nie musisz definiować dodatkowej funkcji: (add-hook 'LaTeX-mode-hook (lambda () (electric-indent-local-mode -1)))wystarczy.
Emil Jeřábek
To prawda, ale jeśli zdefiniujesz funkcję, możesz jej ponownie użyć w wielu różnych zaczepach bez powielania kodu. Łatwiej jest również usunąć zdefiniowaną funkcję niż anonimową. Może to być przydatne podczas debugowania
Tyler