elisp/haskell-init.el
changeset 80 e848f1863d6b
parent 78 7d7662fcc8d1
child 81 4da7819d1a1c
equal deleted inserted replaced
79:f3334abf4322 80:e848f1863d6b
     3 
     3 
     4 ;; Require packages
     4 ;; Require packages
     5 (require 'package-require)
     5 (require 'package-require)
     6 (package-require '(haskell-mode yasnippet haskell-snippets flycheck flycheck-haskell shm))
     6 (package-require '(haskell-mode yasnippet haskell-snippets flycheck flycheck-haskell shm))
     7 
     7 
       
     8 (add-to-list 'load-path "~/.emacs.d/elisp/stack-mode")
       
     9 
     8 ;; Load haskell-mode from source
    10 ;; Load haskell-mode from source
     9 ;; (add-to-list 'load-path "~/Code/elisp/haskell-mode/")
    11 ;; (add-to-list 'load-path "~/Code/elisp/haskell-mode/")
    10 ;; (require 'haskell-mode-autoloads)
    12 ;; (require 'haskell-mode-autoloads)
    11 
    13 
    12 (require 'haskell)
    14 (require 'haskell)
    13 (require 'haskell-mode)
    15 (require 'haskell-mode)
    14 (require 'haskell-process)
    16 (require 'stack-mode)
    15 (require 'haskell-interactive-mode)
    17 (require 'haskell-interactive-mode)
    16 (require 'haskell-snippets)
    18 (require 'haskell-snippets)
    17 (require 'shm)
    19 (require 'shm)
    18 
    20 
    19 (defun haskell-who-calls (&optional prompt)
    21 (defun haskell-who-calls (&optional prompt)
    31                               sym))))
    33                               sym))))
    32       (with-current-buffer buffer
    34       (with-current-buffer buffer
    33         (rename-buffer "*who-calls*")
    35         (rename-buffer "*who-calls*")
    34         (switch-to-buffer-other-window buffer)))))
    36         (switch-to-buffer-other-window buffer)))))
    35 
    37 
    36 (defun haskell-process-all-types ()
       
    37   "List all types in a grep-mode buffer."
       
    38   (interactive)
       
    39   (let ((session (haskell-session)))
       
    40     (switch-to-buffer (get-buffer-create (format "*%s:all-types*"
       
    41                                                  (haskell-session-name (haskell-session)))))
       
    42     (setq haskell-session session)
       
    43     (cd (haskell-session-current-dir session))
       
    44     (let ((inhibit-read-only t))
       
    45       (erase-buffer)
       
    46       (let ((haskell-process-log nil))
       
    47         (insert (haskell-process-queue-sync-request (haskell-process) ":all-types")))
       
    48       (unless (eq major-mode  'compilation-mode)
       
    49         (compilation-mode)
       
    50         (setq compilation-error-regexp-alist
       
    51               haskell-compilation-error-regexp-alist)))))
       
    52 
       
    53 ;;; haskell-mode
    38 ;;; haskell-mode
    54 (add-hook
    39 (add-hook
    55  'haskell-mode-hook
    40  'haskell-mode-hook
    56  (lambda ()
    41  (lambda ()
    57    ;; (imenu-add-menubar-index)
    42    ;; (imenu-add-menubar-index)
    58    (flycheck-mode)
    43    (flycheck-mode)
    59    (flycheck-haskell-setup)
    44    (flycheck-haskell-setup)
       
    45    (flycheck-disable-checker 'haskell-ghc)
    60    ;; (haskell-indentation-mode t)
    46    ;; (haskell-indentation-mode t)
       
    47    (stack-mode)
    61    (subword-mode)
    48    (subword-mode)
    62    (electric-indent-mode 0)
    49    (electric-indent-mode 0)
    63    (structured-haskell-mode t)
    50    (structured-haskell-mode t)
    64    (set-face-background 'shm-quarantine-face "lemonchiffon")
    51    (set-face-background 'shm-quarantine-face "lemonchiffon")
    65    (interactive-haskell-mode t)))
    52    (interactive-haskell-mode t)))
    69  '(haskell-stylish-on-save t)
    56  '(haskell-stylish-on-save t)
    70 
    57 
    71  '(haskell-indentation-layout-offset 4)
    58  '(haskell-indentation-layout-offset 4)
    72  '(haskell-indentation-left-offset 4)
    59  '(haskell-indentation-left-offset 4)
    73 
    60 
    74  '(shm-use-presentation-mode t)
    61  '(haskell-interactive-mode-eval-pretty t)
    75  '(shm-auto-insert-skeletons t)
    62  '(haskell-interactive-mode-scroll-to-bottom t)
    76  '(shm-auto-insert-bangs t)
    63  '(haskell-interactive-mode-eval-mode 'haskell-mode)
    77 
       
    78  '(haskell-process-type 'cabal-repl)
       
    79  ;; '(haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans" "--with-ghc=ghci-ng")) ;; ghci-ng
       
    80  ;; '(haskell-process-path-ghci "ghci-ng") ;; ghci-ng
       
    81  '(haskell-process-args-ghci "-ferror-spans")
       
    82  '(haskell-process-suggest-remove-import-lines t)
       
    83  '(haskell-process-auto-import-loaded-modules t)
       
    84  '(haskell-process-log t)
       
    85  '(haskell-process-reload-with-fbytecode nil)
       
    86  '(haskell-process-use-presentation-mode t)
       
    87  '(haskell-process-suggest-haskell-docs-imports t)
       
    88  '(haskell-process-suggest-hoogle-imports t)
       
    89  '(haskell-process-generate-tags nil)
       
    90  '(haskell-process-show-debug-tips nil)
       
    91 
    64 
    92  '(haskell-notify-p t)
    65  '(haskell-notify-p t)
    93  '(haskell-align-imports-pad-after-name t)
    66  '(haskell-align-imports-pad-after-name t)
    94  '(haskell-ask-also-kill-buffers nil)
    67  '(haskell-ask-also-kill-buffers nil)
    95  '(haskell-import-mapping t)
    68  '(haskell-import-mapping t)
    96 
    69 
    97  '(haskell-interactive-mode-eval-pretty t)
    70  '(shm-use-presentation-mode t)
    98  '(haskell-interactive-mode-scroll-to-bottom t)
    71  '(shm-auto-insert-skeletons t)
    99  '(haskell-interactive-mode-eval-mode 'haskell-mode))
    72  '(shm-auto-insert-bangs t))
   100 
    73 
   101 ;; haskell-interactive-mode keybindings
       
   102 (define-key interactive-haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-or-reload)
       
   103 (define-key interactive-haskell-mode-map (kbd "M-,") 'haskell-who-calls)
       
   104 (define-key interactive-haskell-mode-map (kbd "M-.") 'haskell-mode-goto-loc)
       
   105 (define-key interactive-haskell-mode-map (kbd "C-?") 'haskell-mode-find-uses)
       
   106 (define-key interactive-haskell-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
       
   107 (define-key interactive-haskell-mode-map (kbd "C-c C-t") 'haskell-mode-show-type-at)
       
   108 (define-key interactive-haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
       
   109 (define-key interactive-haskell-mode-map (kbd "C-c C-k") 'haskell-process-clear)
       
   110 (define-key interactive-haskell-mode-map (kbd "C-c c") 'haskell-process-cabal)
       
   111 
    74 
   112 (define-key haskell-interactive-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
    75 ;;  ;; '(haskell-process-type 'cabal-repl)
   113 (define-key haskell-interactive-mode-map (kbd "C-<left>") 'haskell-interactive-mode-error-backward)
    76 ;;  ;; ;; '(haskell-process-args-cabal-repl '("--ghc-option=-ferror-spans" "--with-ghc=ghci-ng")) ;; ghci-ng
   114 (define-key haskell-interactive-mode-map (kbd "C-<right>") 'haskell-interactive-mode-error-forward)
    77 ;;  ;; ;; '(haskell-process-path-ghci "ghci-ng") ;; ghci-ng
   115 (define-key haskell-interactive-mode-map (kbd "C-c c") 'haskell-process-cabal)
    78 ;;  ;; '(haskell-process-args-ghci "-ferror-spans")
       
    79 ;;  ;; '(haskell-process-suggest-remove-import-lines t)
       
    80 ;;  ;; '(haskell-process-auto-import-loaded-modules t)
       
    81 ;;  ;; '(haskell-process-log t)
       
    82 ;;  ;; '(haskell-process-reload-with-fbytecode nil)
       
    83 ;;  ;; '(haskell-process-use-presentation-mode t)
       
    84 ;;  ;; '(haskell-process-suggest-haskell-docs-imports t)
       
    85 ;;  ;; '(haskell-process-suggest-hoogle-imports t)
       
    86 ;;  ;; '(haskell-process-generate-tags nil)
       
    87 ;;  ;; '(haskell-process-show-debug-tips nil)
   116 
    88 
   117 ;; haskell-mode
       
   118 (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-or-reload)
       
   119 (define-key haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
       
   120 (define-key haskell-mode-map (kbd "C-c C-t") 'haskell-process-do-type)
       
   121 (define-key haskell-mode-map (kbd "C-c i") 'haskell-navigate-imports)
       
   122 (define-key haskell-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
       
   123 (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
       
   124 (define-key haskell-mode-map (kbd "C-c C-d") 'haskell-describe)
       
   125 (define-key haskell-mode-map (kbd "C-c C-k") 'haskell-process-clear)
       
   126 (define-key haskell-mode-map (kbd "C-c c") 'haskell-process-cabal)
       
   127 (define-key haskell-mode-map (kbd "SPC") 'haskell-mode-contextual-space)
       
   128 
    89 
   129 ;; cabal
    90 
   130 (define-key haskell-cabal-mode-map (kbd "C-`") 'haskell-interactive-bring)
    91 ;; ;; haskell-interactive-mode keybindings
   131 (define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-process-clear)
    92 ;; (define-key interactive-haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-or-reload)
   132 (define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
    93 ;; (define-key interactive-haskell-mode-map (kbd "M-,") 'haskell-who-calls)
   133 (define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)
    94 ;; (define-key interactive-haskell-mode-map (kbd "M-.") 'haskell-mode-goto-loc)
       
    95 ;; (define-key interactive-haskell-mode-map (kbd "C-?") 'haskell-mode-find-uses)
       
    96 ;; (define-key interactive-haskell-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
       
    97 ;; (define-key interactive-haskell-mode-map (kbd "C-c C-t") 'haskell-mode-show-type-at)
       
    98 ;; (define-key interactive-haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
       
    99 ;; (define-key interactive-haskell-mode-map (kbd "C-c C-k") 'haskell-process-clear)
       
   100 ;; (define-key interactive-haskell-mode-map (kbd "C-c c") 'haskell-process-cabal)
       
   101 
       
   102 ;; (define-key haskell-interactive-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
       
   103 ;; (define-key haskell-interactive-mode-map (kbd "C-<left>") 'haskell-interactive-mode-error-backward)
       
   104 ;; (define-key haskell-interactive-mode-map (kbd "C-<right>") 'haskell-interactive-mode-error-forward)
       
   105 ;; (define-key haskell-interactive-mode-map (kbd "C-c c") 'haskell-process-cabal)
       
   106 
       
   107 ;; ;; haskell-mode
       
   108 ;; (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-or-reload)
       
   109 ;; (define-key haskell-mode-map (kbd "C-`") 'haskell-interactive-bring)
       
   110 ;; (define-key haskell-mode-map (kbd "C-c C-t") 'haskell-process-do-type)
       
   111 ;; (define-key haskell-mode-map (kbd "C-c i") 'haskell-navigate-imports)
       
   112 ;; (define-key haskell-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
       
   113 ;; (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
       
   114 ;; (define-key haskell-mode-map (kbd "C-c C-d") 'haskell-describe)
       
   115 ;; (define-key haskell-mode-map (kbd "C-c C-k") 'haskell-process-clear)
       
   116 ;; (define-key haskell-mode-map (kbd "C-c c") 'haskell-process-cabal)
       
   117 ;; (define-key haskell-mode-map (kbd "SPC") 'haskell-mode-contextual-space)
       
   118 
       
   119 ;; ;; cabal
       
   120 ;; (define-key haskell-cabal-mode-map (kbd "C-`") 'haskell-interactive-bring)
       
   121 ;; (define-key haskell-cabal-mode-map (kbd "C-c C-k") 'haskell-process-clear)
       
   122 ;; (define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-process-cabal-build)
       
   123 ;; (define-key haskell-cabal-mode-map (kbd "C-c c") 'haskell-process-cabal)
   134 
   124 
   135 ;; shm
   125 ;; shm
   136 (define-key shm-map (kbd "C-c C-p") 'shm/expand-pattern)
   126 (define-key shm-map (kbd "C-c C-p") 'shm/expand-pattern)
   137 (define-key shm-map (kbd "C-c C-s") 'shm/case-split)
   127 (define-key shm-map (kbd "C-c C-s") 'shm/case-split)
   138 (define-key shm-map (kbd "C-\\") 'shm/goto-last-point)
   128 (define-key shm-map (kbd "C-\\") 'shm/goto-last-point)