Emacs: Şema modunda 'lambda' yerine 'λ' nasıl eklenir?


10

Uzun zaman önce, 'lambda' kelimesini 'λ' karakteri ile değiştiren bir metin editörü işleviyle karşılaştım. Bunu emac'larda yapmak istiyorum. Benim tercihlerim:

  • Bu işlevi yalnızca belirli modlarda etkinleştirmek istiyorum (Şema modu için etkinleştirin, ancak örneğin C modu için kapatın).

  • İş yerinde hala emac'ların eski bir sürümünü kullanıyorum, bu nedenle çözüm emacs22 ve emacs23 için çalışmalıdır.

Nasıl ilerlemeliyim?

Yanıtlar:


8

lambdaYunan karakteri ile değiştirilen bir mod kancası oluşturursunuz .

   (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))))))

Sonra bu kancayı modunuza ekleyin:

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

2
Adlandırmak daha doğru olacaktır sm-lambda-mode-hooktarafından sm-replace-lambdaveya sm-greek-lambda. XXX-mode-hookgenellikle run-hookbelirtilen mod tarafından çalıştırılan ve böylece kullanabileceğiniz kancaları tanımlamak için kullanılır add-hook.
Daimrod

Mi make-charsadece orada 22 desteklemek için?
Jon Purdy

@Daimrod: Lütfen XXX-mode-hookcevapta tanımlanan a ve bu özel olan arasındaki farkı açıklayabilir misiniz ? Ya da en azından beni faydalı bir belgeye yönlendiriyor musun?
rahmu

@rahmu: xxx-mode-hookGenellikle kanca ile run-hooksmod tarafından çalıştırılan kanca adıdır xxx. yani emacs-lisp-mode-hookişlev emacs-modeçağrıldığında çalıştırılır. Bu durumda, kanca çalıştırılmaz, ancak kancaya bir işlev eklenir. Bak elisp Kılavuzuna (Kancalar) Daha fazla bilgi için.
Daimrod

@rahmu: Sadece küçük bir örnek eklemek için bunu yapabilirsiniz, (add-hook 'emacs-lisp-mode-hook 'some-function)ancak (add-hook 'sm-lambda-mode-hook 'some-function)bunu yapan bir kod parçası olmadıkça asla çalışmayacaktır (run-hooks 'sm-lambda-mode-hook).
Daimrod
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.