Just as many of you, I always missed the goto-line command in Emacs having no key assigned by default despite its usefulness, and one day (when I moved from XEmacs) I bound it to M-g. However, starting with Emacs 22, they decided to have it bound to M-g M-g, along with previous-error which was bound to M-g M-p and next-error to M-g M-n. The last part looked nice especially when I wasn’t happy with C-x ` at all, but it was just far from acceptable to me that I had to type M-g twice for jumping to a specific line number, so I insisted on my binding of M-g.
Time has passed, and now I have a bit of skills in elisp, and here it goes:
|
1 2 3 4 5 6 7 8 9 |
(defun goto-line-number () (interactive) (goto-line (string-to-number (read-from-minibuffer "Goto line: " (char-to-string last-command-event))))) (loop for n from 1 to 9 do (global-set-key (format "\M-g%d" n) 'goto-line-number)) (global-set-key "\M-g?" 'describe-prefix-bindings) |
This snippet makes it as if M-g were a key for goto-line by tweaking the key bindings of M-g 1..9. For example, typing M-g 2 lets you enter the minibuffer with the first figure (2) input, and you are ready to type the rest of the figures of a line number, just as below:
|
1 |
<span style="background-color: #727498;">-UUU:@----F13 init.el Top (1,0) [1] (Emacs-Lisp FlyC:1/5 hs AC yas)</span><br /><span style="color: #4acacc;">Goto line:</span> 2<span style="border-left: 1px solid #66ff66;"> </span> |
This means you can just say M-g 2 0 0 RET to get to the line 200 while you can say M-g M-n to jump to the next error line. Cool.
For those who may wonder, the last line of the snippet helps you remember other key combinations of the M-g family by typing ? after M-g. Happy hacking!