Emacs: Wie füge ich im Schemamodus 'λ' anstelle von 'Lambda' ein?


10

Vor langer Zeit stieß ich auf eine Texteditorfunktion, die das Wort 'Lambda' durch das Zeichen 'λ' ersetzte. Ich würde das gerne in Emacs machen. Meine Vorlieben:

  • Ich möchte diese Funktion nur in bestimmten Modi aktivieren (aktivieren Sie sie für den Schema-Modus, aber deaktivieren Sie sie beispielsweise für den C-Modus).

  • Bei der Arbeit verwende ich immer noch eine ältere Version von Emacs, daher sollte die Lösung für Emacs22 und Emacs23 funktionieren.

Wie soll ich vorgehen?

Antworten:


8

Sie erstellen einen Modus-Hook, der lambdadurch das griechische Zeichen ersetzt wird.

   (defun sm-greek-lambda ()
       (font-lock-add-keywords nil `(("\\<lambda\\>"
           (0 (progn (compose-region (match-beginning 0) (match-end 0)
           ,(make-char 'greek-iso8859-7 107))
           nil))))))

Dann fügen Sie diesen Haken Ihrem Modus hinzu:

   (add-hook 'emacs-lisp-mode-hook 'sm-greek-lambda)

2
Es wäre besser, sm-lambda-mode-hookdurch sm-replace-lambdaoder umzubenennen sm-greek-lambda. XXX-mode-hookwird normalerweise verwendet, um Hooks zu identifizieren, die von run-hookdem angegebenen Modus ausgeführt werden und für die Sie sie verwenden können add-hook.
Daimrod

Gibt es make-charnur 22 zu unterstützen?
Jon Purdy

@Daimrod: Kannst du bitte den Unterschied zwischen a XXX-mode-hookund diesem in der Antwort definierten benutzerdefinierten erklären ? Oder verweisen Sie mich zumindest auf eine nützliche Dokumentation?
Rahmu

@rahmu: xxx-mode-hookist normalerweise der Name des Hooks, der run-hooksvom Modus ausgeführt wird xxx. dh emacs-lisp-mode-hookwird ausgeführt, wenn die Funktion emacs-modeaufgerufen wird. In diesem Fall wird kein Hook ausgeführt, aber einem Hook wird eine Funktion hinzugefügt. Weitere Informationen finden Sie im Elisp-Handbuch (Hooks) .
Daimrod

@rahmu: Nur um ein kleines Beispiel hinzuzufügen, Sie können es tun, (add-hook 'emacs-lisp-mode-hook 'some-function)aber es (add-hook 'sm-lambda-mode-hook 'some-function)wird nie funktionieren, es sei denn, Sie haben einen Code, der dies tut (run-hooks 'sm-lambda-mode-hook).
Daimrod
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.