2011-02-03 21 views
11

Soy un usuario de Emacs sin habilidades en lo que respecta a la configuración del editor. Después de actualizar desde haskell-mode 2.4 a 2.7, me he dado cuenta de dos cambios:forzando haskell-indent-mode sobre haskell-indentation-mode en haskell-mode 2.7?

  • sangrado es diferente de alguna manera, de una manera no me gusta bastante. No puedo decir qué es.
  • Lo que es más importante: si tengo cua-mode habilitado y resalto un bloque de texto, retroceder/borrar hace no borrar todo el bloque, solo el caracter anterior/siguiente de mi marcador.

Veo que haskell-mode 2.7 usa el modo menor haskell-indentation-mode por defecto, mientras que el comportamiento de 2.4 se ha conservado en forma de haskell-indent-mode. Si primero apago el primero, y luego el último, el comportamiento que deseo se restablece (es decir, la sangría se siente como antes, y el retroceso/eliminación elimina los bloques resaltados).

No puedo, sin embargo, hacer que esto ocurra automáticamente cada vez que abro un archivo con un sufijo .hs. He intentado varias cosas que se asemejan

(remove-hook 'haskell-mode-hook 'turn-on-haskell-indentation-mode) 
(add-hook 'haskell-mode-hook 'turn-on-haskell-indent-mode) 

y los gustos de ella, pero cualquiera de los extremos con el modo estándar o con Haskell en modo simple, sin guión y doc.

¿Alguna idea?

Solución (gracias a nominolo):

(remove-hook 'haskell-mode-hook 'turn-on-haskell-indent) 
(remove-hook 'haskell-mode-hook 'turn-on-haskell-indentation) 
(add-hook 'haskell-mode-hook 'my-haskell-mode-hook) 
(defun my-haskell-mode-hook() 
    (haskell-indentation-mode -1) ;; turn off, just to be sure 
    (haskell-indent-mode 1)  ;; turn on indent-mode 
    ) 

Respuesta

14

La mejor manera de configurar este tipo de cosas es escribiendo un gancho de encargo:

(add-hook 'haskell-mode-hook 'my-haskell-mode-hook) 

(defun my-haskell-mode-hook() 
    (haskell-indentation-mode -1) ;; turn off, just to be sure 
    (haskell-indent-mode 1)  ;; turn on indent-mode 

    ;; further customisations go here. For example: 
    (setq locale-coding-system 'utf-8) 
    (flyspell-prog-mode) ;; spell-checking in comments and strings 
    ;; etc.  

    ) 

También podría pegarse una función anónima allí , pero tener una función nombrada es más fácil si quieres experimentar con algunas configuraciones. Simplemente redefinir la función (y volver a abrir un archivo Haskell) le dará el nuevo comportamiento.

+0

Gran respuesta; esto es mucho mejor que el patrón de 'hook-hook' aleatorio que tuve antes. ¡Gracias! – acfoltzer

+0

Lamentablemente, esto no ayuda para mí. Agregué el código que le diste a mis .emacs, pero cuando abro un .hs haskell-indentation-mode todavía está activado. Al ejecutar 'M-x haskell-indentation-mode', se desactiva como se esperaba. – gspr

+0

@gspr: Es posible que tengas otro gancho corriendo después. Use 'C-h v haskell-mode-hook' para ver los ganchos activos. Alternativamente, parece que en realidad hay tres modos de sangría, ¿entonces quizás necesites apagar otro modo? – nominolo