can't use "S" in normal mode with haskell-mode

Linus Arver linusarver at gmail.com
Wed Mar 20 01:52:04 CET 2013


On Tue, Mar 19, 2013 at 06:32:24PM +0100, Michael Markert wrote:
> On Tue, Mar 19 2013 (18:13), Linus Arver <linusarver at gmail.com> wrote: 
> > So I guess haskell-mode-hook is responsible for this. I've looked at
> > haskell-mode.el and it appears that this function is responsible:
> >
> >     (defun haskell-mode-suggest-indent-choice ()
> >       "Ran when the user tries to indent in the buffer but no indentation mode has been selected.
> >     Brings up the documentation for haskell-mode-hook."
> >       (describe-variable 'haskell-mode-hook))
> 
> Yes, well the easy way is: Configure your haskell mode correctly and
> turn on an indentation mode.

I've tried all of haskell-mode's indentation modes, and I despise them
all. =( I like to use my own, very simple indentation style that's *not*
obsessed with exactly lining up the current line within the context of
whatever is on the previous line. And plus, I like to use tabs, unlike
all other Haskellers out there...

Actually, the *only* reason why I use haskell-mode is for syntax
highlighting support.

> > Maybe evil-change-whole-line for "S" (and also "cc", as this triggers the
> > same behavior) has some indenting code in it, which ends up triggering
> > haskell-mode-suggest-indent-choice?
> 
> Actually not direct, but when it does when entering insert-state, this
> 
>     (add-hook haskell-mode-hook (lambda () (setq evil-auto-indent nil)))
> 
> should work around it.

This works wonderfully! Thank you very much.

For what it's worth, here is my current Haskell-specific code for
dead-simple indentation in my ~/.emacs:

    ; custom indentation function: copy the indentation of the previous line
    ; adopted from http://sequence.complete.org/node/365
    (defun newline-and-indent-relative ()
        (interactive)
        (newline)
        (indent-to-column (save-excursion
            (forward-line -1)
            (back-to-indentation)
            (current-column)))
    )
    ; Haskell {{{
    ; adopted from http://sequence.complete.org/node/365
    (load-library "haskell-site-file")
    (add-to-list 'auto-mode-alist '("\\.hs\\'" . haskell-mode))
    (remove-hook 'haskell-mode-hook 'turn-on-haskell-indent)
    ; 4-space tabs
    (add-hook 'haskell-mode-hook
        (lambda ()
            (turn-on-haskell-doc-mode)
            (setq evil-auto-indent nil)
            (setq tab-width 4)
            (setq indent-tabs-mode t)
        )
    )
    ; make indentation saner when inserting new lines, whether from insert mode or normal mode
    (evil-declare-key 'insert haskell-mode-map (kbd "RET") 'newline-and-indent-relative)
    (evil-declare-key 'normal haskell-mode-map "o"
        (lambda ()
            (interactive)
            (evil-append-line 1)
            (newline-and-indent-relative)
        )
    )
    (evil-declare-key 'normal haskell-mode-map "O"
        (lambda ()
            (interactive)
            (previous-line)
            (evil-append-line 1)
            (newline-and-indent-relative)
        )
    )
    ;}}}

-L



More information about the implementations-list mailing list