2012-05-05 25 views
7

Czy ktoś wie, jak mogę wydrukować λ zamiast \ using haskell w emacs. Wiem, że można używać symboli-blokad-font-fontów, ale uważam, że reszta z nich jest trudna do odczytania - strzałki są zbyt małe!domyślny symbol lambda w trybie haskell emacs?

Czy istnieje prosty sposób przeładowania pozostałych kluczy?

Odpowiedz

2

Można to zrobić:

(defun pretty-lambdas-haskell() 
    (font-lock-add-keywords 
    nil `((,(concat "\\(" (regexp-quote "\\") "\\)") 
      (0 (progn (compose-region (match-beginning 1) (match-end 1) 
            ,(make-char 'greek-iso8859-7 107)) 
        nil)))))) 

(add-hook 'haskell-mode-hook 'pretty-lambdas-haskell) 

Dodaje lambda jako słowo kluczowe, co oznacza, że ​​nie pojawią się sekwencje w ciągach na przykład (TODO: to nie jest przypadek po wymianie rzeczy). Numer ,(make-char 'greek-iso8859-7 107) jest oczywiście równoważny z , ale musisz upewnić się, że plik init Emacsa jest w tym przypadku zakodowany jako kod Unicode.

Można również włączyć blokowanie pełnej czcionki symbolu i użyć lepszej (czytaj: szerszą strzałką) czcionki, takiej jak Pragmata Pro, Inconsolata lub Ubuntu Monospace. Używam następujący kod, aby wybrać dobrą czcionki:

(defun font-existsp (font) 
    "Check to see if the named FONT is available." 
    (if (null (x-list-fonts font)) 
     nil t)) 

(require 'cl) 
(defun font-avail (fonts) 
    "Finds the available fonts." 
    (remove-if-not 'font-existsp fonts)) 

(defvar font-preferences 
     '("PragmataPro" 
     "Inconsolata" 
     "DejaVu Sans Mono" 
     "Bitstream Vera Sans Mono" 
     "Anonymous Pro" 
     "Menlo" 
     "Consolas")) 

(unless (eq window-system nil) 
    (let ((fonts (font-avail font-preferences))) 
    (unless (null fonts) 
     (set-face-attribute 
     'default nil :font 
     (car fonts))))) 
+0

Myślę, że raz przeczytałem ten przykład wiki ... spróbowałem, ale bez powodzenia. Mam nadzieję, że po prostu brakuje mi tutaj jakiejś sztuczki. P.S Używam menlo – beoliver

+0

Cóż, jaki był problem, kiedy próbowałeś? – dflemstr

+0

nic się nie stało ... – beoliver

2

Można też rozwiązać problem z czymś jak

(eval-after-load 'haskell-font-lock 
'(setq haskell-font-lock-symbols-alist 
     (delq nil 
       (mapcar (lambda (rewrite) 
         (if (member (car rewrite) '("->" "<-")) 
          nil rewrite)) 
         haskell-font-lock-symbols-alist)))) 

który powinien zachować wszystkie mapowania z wyjątkiem jednego, który zmienia „->” do "→" i "< -" do "←".

+0

dzięki, spróbuję tego. – beoliver

Powiązane problemy