2012-05-05 15 views
7

¿Alguien sabe cómo puedo imprimir λ en lugar de \ usando haskell en emacs? Sé que se pueden usar los símbolos haskell-font-lock-symbols, pero el resto son difíciles de leer, ¡las flechas son DEMASIADO pequeñas!símbolo lambda predeterminado en el modo haskell de emacs?

¿Hay una forma simple de anular el resto de las teclas?

Respuesta

2

Usted puede hacer esto:

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

Esto agrega el lambda como palabra clave, lo que significa que no aparecerá en las secuencias de escape en cadenas por ejemplo (TODO: este no es el caso después de cambiar una cosa) El ,(make-char 'greek-iso8859-7 107) es, por supuesto, equivalente a , pero debe asegurarse de que el archivo de inicio de Emacs esté codificado como unicode en ese caso.

También puede habilitar el bloqueo completo de fuentes de símbolos y utilizar una fuente mejor (leer: con flechas más anchas), como Pragmata Pro, Inconsolata o Ubuntu Monospace. Yo uso el siguiente código para seleccionar una buena fuente:

(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

Creo que leí este ejemplo de wiki una vez ... lo probé, pero sin suerte. Espero estar perdiendo un truco aquí. P.S Yo uso menlo – beoliver

+0

Bueno, ¿cuál fue el problema cuando lo intentaste? – dflemstr

+0

no pasó nada ... – beoliver

2

También puede resolver el problema con algo como

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

que debe mantener todas las asignaciones a excepción de la que cambia "->" en "→" y "< -" en "←".

+0

gracias, voy a probar esto. – beoliver