Permalink
Browse files

Add experimental new Haskell config

  • Loading branch information...
1 parent 14bda41 commit ae3f1e39ac9f18b8bd1e662ef45779ce81c77e2f @ghoseb committed Jun 10, 2012
Showing with 83 additions and 5 deletions.
  1. +83 −5 packs/programming/config/haskell-conf.el
@@ -2,9 +2,87 @@
(load "haskell-site-file")
-(add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
-(add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
-(add-hook 'haskell-mode-hook 'font-lock-mode)
-(add-hook 'haskell-mode-hook '(lambda () (capitalized-words-mode t)))
+;; (add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode)
+;; (add-hook 'haskell-mode-hook 'turn-on-haskell-indentation)
+;; (add-hook 'haskell-mode-hook 'font-lock-mode)
+;; (add-hook 'haskell-mode-hook '(lambda () (capitalized-words-mode t)))
-(setq haskell-program-name "/usr/local/bin/ghci")
+;; (setq haskell-program-name "/usr/local/bin/ghci")
+
+
+;; Customization
+(custom-set-variables
+ ;; Use cabal-dev for the GHCi session. Ensures our dependencies are in scope.
+ '(haskell-process-type 'ghci)
+
+ ;; To enable tags generation on save.
+ '(haskell-tags-on-save t)
+
+ ;; To enable stylish on save.
+ '(haskell-stylish-on-save t)
+
+ '(haskell-program-name "/usr/local/bin/ghci"))
+
+(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.
+ (turn-on-haskell-simple-indent)
+ (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 ()
+ (interactive)
+ (haskell-move-nested 1)))
+ ;; Same as above but backwards.
+ (define-key haskell-mode-map (kbd "C-<left>")
+ (lambda ()
+ (interactive)
+ (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))

0 comments on commit ae3f1e3

Please sign in to comment.