Difference between revisions of "Emacs/Keybindings and simple usage"

From HaskellWiki
Jump to navigation Jump to search
m (Added infobox.)
(Added note about rebinding C-x C-s.)
(One intermediate revision by the same user not shown)
Line 45: Line 45:
   
 
You can also use haskell-mode to load Emacs buffers with Haskell code in either Hugs or GHC. To load something in Hugs or ghci, type <code>C-c C-l</code> to load the file. Then, you can go on to type <code>C-c C-r</code> (or simply <code>C-c C-l</code> again) to reload the current module when you have made a change.
 
You can also use haskell-mode to load Emacs buffers with Haskell code in either Hugs or GHC. To load something in Hugs or ghci, type <code>C-c C-l</code> to load the file. Then, you can go on to type <code>C-c C-r</code> (or simply <code>C-c C-l</code> again) to reload the current module when you have made a change.
  +
  +
== Rebind C-x C-s ==
  +
  +
To do specific actions on save, you need <code>haskell-mode-save-buffer</code>. It is recommended to rebind <code>C-x C-s</code> in haskell-mode to this. Add the following in your <code>haskell-mode-hook</code>.
  +
  +
(define-key haskell-mode-map (kbd "C-x C-s") 'haskell-mode-save-buffer)
  +
  +
Then you're good to go. This will behave the same as normal <code>save-buffer</code>, but with extra goodies if enabled.
  +
  +
----
  +
  +
'''Next:''' [[Emacs/Indentation|Indentation]]

Revision as of 18:37, 28 May 2012

Emacs for Haskell

Inferior Haskell processes
Automatic unit testing
Automatic building
API searching
Project navigation
Snippets
Literate programming

Key bindings and usage

Key bindings in haskell-mode (with haskell-indent and inf-haskell.el).

Code editing keys:

  • C-c C-= inserts an = sign and lines up type signatures and other pattern matches nicely.
  • C-c C-| inserts a guard
  • C-c C-o inserts a guard | otherwise = and lines up existing guards
  • C-c C-w inserts a where keyword
  • C-c C-. aligns code over a region in a "sensible" fashion.

Haskell interpreter keys:

  • C-c C-l load current buffers file into Haskell interpreter
  • C-c C-r reload current Haskell interpreter session
  • C-c C-t gets :type for symbol at point, and remembers it
  • C-u C-c C-t inserts a type annotation, for symbol at point, on the line above
  • C-c C-i gets :info for symbol at point
  • C-c M-. find definition of (interpreted) symbol at point
  • C-c C-b or C-c C-z switch to Haskell interpreter (starts one if needed)
  • C-c C-d find haddock documentation about symbol
  • C-c TAB query the haskell interpreter for the info of the given expression
  • C-c C-v check current buffers file with hlint

(See C-h m for more information).

Example

Here's an example for C-c C-=. Put your cursor after myInt and hit C-c C-=

blah :: Int -> Int
blah myInt

note how the function signature is reindented to match the column of the = sign.

blah       :: Int -> Int
blah myInt =

You could also achieve the same effect by selecting the region and typing C-c C-.

You can also use haskell-mode to load Emacs buffers with Haskell code in either Hugs or GHC. To load something in Hugs or ghci, type C-c C-l to load the file. Then, you can go on to type C-c C-r (or simply C-c C-l again) to reload the current module when you have made a change.

Rebind C-x C-s

To do specific actions on save, you need haskell-mode-save-buffer. It is recommended to rebind C-x C-s in haskell-mode to this. Add the following in your haskell-mode-hook.

(define-key haskell-mode-map (kbd "C-x C-s") 'haskell-mode-save-buffer)

Then you're good to go. This will behave the same as normal save-buffer, but with extra goodies if enabled.


Next: Indentation