Reverting nonsense18 Feb 2015
It happens to me frequently when making a demo, or just experimenting
around that I want to revert the buffer to the last saved
state. Obviously such a command exists in Emacs, and it's
Replace current buffer text with the text of the visited file on disk. This undoes all changes since the file was visited or saved.
But the poor old
revert-buffer isn't bound by default in Emacs. The perfect binding for it is C-x C-r:
(global-set-key (kbd "C-x C-r") (lambda () (interactive) (revert-buffer nil t)))
I believe the lambda is used to get the "no questions asked"
treatment. Anyway, by default Emacs binds C-x C-r to
find-file-read-only, which really is a trash-tier command.
Because C-x C-q is bound to
read-only-mode - a really
good command (made even better with
find-file-read-only is just C-x C-f C-x C-q. And I don't
ever recall needing to use that, since v
dired-view-file) is almost equivalent if not better.
As a bonus, C-x C-r is mnemonic for "revert".
While on the topic, let me mention
auto-revert-mode. I have this in my config:
This way, if any opened and saved file was modified outside of Emacs, it will be updated in a short while. I was able to use this to a great advantage when writing the SVG picture for the Xmodmap post:
- I opened the SVG in the default image mode in one Emacs instance
- and opened the same document in XML mode in another (mode is toggled with C-c C-c)
With that setup, I was able to see the picture update as I was inputting the XML. Here's some Elisp for XML generation, if you're interested
(defun make-row (row-str ix iy fill) (mapconcat (lambda (x) (format "<g><text x=\"%d\" y=\"%d\" style=\"font-size:10px;fill:%s;font-family:Deja Vu Sans Mono\">%s</text></g>" (+ ix (* x 30)) iy fill (let ((y (elt row-str x))) (if (stringp y) y (make-string 1 y))))) (number-sequence 0 (1- (length row-str))) "\n")) (make-row "QWERTYUIOP" 95 140 "#2b2828") ;; =>
The last statement would generate: