Friday, July 22, 2011

Add a menu item to emacs

I convinced my girlfriend to start using emacs for her HTML/CSS/PHP needs a while ago. I thought it would be a nice learning experience both on how someone who doesn't particularly like to get to know the programs she works with and on how to change it to suit her needs.
Even though she's not using it as much as I'd like yet, she has been using it and things have come up.

For starters, she didn't like the default keybindings,
C-x C-f to save
C-w to cut, M-w to copy and C-y to paste
So the first thing I looked up was enabling cua-mode. This already helped her a lot.

Now, she likes to be able to view both her HTML and CSS file at the same time, so very easy, C-x 3 to split the windows side-by-side. As before, though, she doesn't like the key binding. So I looked into how menu items are added in emacs and here is an example of how it's done:
(define-key-after
  global-map
  [menu-bar file splith]
  '("Split Window Horizontally" . split-window-horizontally)
  'split-window)
I was able to write this, thanks to the help of this page. I've come across Xah Lee's website before and it has always been of great help as it has been this time.

This particular piece of code tells emacs to add a Split Window Horizontally menu item, which should execute the function split-window-horizontally, to the File menu, right after the split-window menu item.
I found out the names of these items by using C-h k and then selecting File->Split Window, which shows to which keys this item is bound, and in this case that was <menu-bar> <file> <split-window>, which was all I needed to figure it out.

Since I have (menu-bar-mode -1) in my .emacs, I'd never have tried this if it wasn't for my girlfriend needing it, so it is a great learning exprience.