Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 77d0373627
Fetching contributors…

Cannot retrieve contributors at this time

102 lines (84 sloc) 4.115 kb
;; Sample file for the new session/process stuff
;; Based on my own configuration. Well, it IS my configuration.
;; NOTE: If you don't have cabal-dev, or you don't want to use it, you
;; should change haskell-process-type (see below) to 'ghci.
;; To merely TRY this mode (and for debugging), do the below:
;; cd into haskell-mode's directory, and run
;; $ emacs --load examples/init.el
;; To get started, open a .hs file in one of your projects, and hit…
;; 1. F5 to load the current file (and start a repl session), or
;; 2. C-` to just start a REPL associated with this project, or
;; 3. C-c C-c to build the cabal project (and start a repl session).
;; Add the current dir for loading haskell-site-file.
(add-to-list 'load-path ".")
;; Always load via this. If you contribute you should run `make all`
;; to regenerate this.
(load "haskell-site-file")
;; Customization
;; Use cabal-dev for the GHCi session. Ensures our dependencies are in scope.
'(haskell-process-type 'cabal-dev)
;; Use notify.el (if you have it installed) at the end of running
;; Cabal commands or generally things worth notifying.
'(haskell-notify-p t)
;; To enable tags generation on save.
'(haskell-tags-on-save t)
;; To enable stylish on save.
'(haskell-stylish-on-save t))
(add-hook 'haskell-mode-hook 'haskell-hook)
(add-hook 'haskell-cabal-mode-hook 'haskell-cabal-hook)
;; Haskell main editing mode key bindings.
(defun haskell-hook ()
;; Use simple indentation.
(define-key haskell-mode-map (kbd "<return>") 'haskell-simple-indent-newline-same-col)
(define-key haskell-mode-map (kbd "C-<return>") 'haskell-simple-indent-newline-indent)
;; Load the current file (and make a session if not already made).
(define-key haskell-mode-map [?\C-c ?\C-l] 'haskell-process-load-file)
(define-key haskell-mode-map [f5] 'haskell-process-load-file)
;; Switch to the REPL.
(define-key haskell-mode-map [?\C-c ?\C-z] 'haskell-interactive-switch)
;; “Bring” the REPL, hiding all other windows apart from the source
;; and the REPL.
(define-key haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
;; Build the Cabal project.
(define-key haskell-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
;; Interactively choose the Cabal command to run.
(define-key haskell-mode-map (kbd "C-c c") 'haskell-process-cabal)
;; Get the type and info of the symbol at point, print it in the
;; message buffer.
(define-key haskell-mode-map (kbd "C-c C-t") 'haskell-process-do-type)
(define-key haskell-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
;; Contextually do clever things on the space key, in particular:
;; 1. Complete imports, letting you choose the module name.
;; 2. Show the type of the symbol after the space.
(define-key haskell-mode-map (kbd "SPC") 'haskell-mode-contextual-space)
;; Jump to the imports. Keep tapping to jump between import
;; groups. C-u f8 to jump back again.
(define-key haskell-mode-map [f8] 'haskell-navigate-imports)
;; Jump to the definition of the current symbol.
(define-key haskell-mode-map (kbd "M-.") 'haskell-mode-tag-find)
;; Save the current buffer and generate etags (a TAGS file) for the
;; whole project.
(define-key haskell-mode-map (kbd "C-x C-s") 'haskell-mode-save-buffer)
;; Indent the below lines on columns after the current column.
(define-key haskell-mode-map (kbd "C-<right>")
(lambda ()
(haskell-move-nested 1)))
;; Same as above but backwards.
(define-key haskell-mode-map (kbd "C-<left>")
(lambda ()
(haskell-move-nested -1))))
;; Useful to have these keybindings for .cabal files, too.
(defun haskell-cabal-hook ()
(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
(define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)
(define-key haskell-cabal-mode-map (kbd "C-`") 'haskell-interactive-bring)
(define-key haskell-cabal-mode-map [?\C-c ?\C-z] 'haskell-interactive-switch))
Jump to Line
Something went wrong with that request. Please try again.