(For the uninitiated, wdired is an indispensable emacs mode that lets you rename files in a directory just by editing their filenames in a buffer.)
Joakim Verona wrote a nifty patch against wdired that allows you to rename even to paths in directories that don't exist yet (emacs creates them for you when you finalize the operation). As an example of where this might be useful, suppose you have a directory like this:
/home/phil/tempfiles: total used in directory 60K available 413675080 -rw-r--r-- 1 phil phil 318K 2009-12-31 19:00 20091231.jpg -rw-r--r-- 1 phil phil 320K 2010-01-01 19:00 20100101.jpg -rw-r--r-- 1 phil phil 305K 2010-01-02 19:00 20100102.jpg [...]
Say you change that to the following (for instance, using M-x string-rectangle, among other alternatives):
/home/phil/tempfiles: total used in directory 60K available 413675080 -rw-r--r-- 1 phil phil 318K 2009-12-31 19:00 2009/12/31.jpg -rw-r--r-- 1 phil phil 320K 2010-01-01 19:00 2010/01/01.jpg -rw-r--r-- 1 phil phil 305K 2010-01-02 19:00 2010/01/02.jpg [...]
When you save, your files are now neatly organized in a year/month/day directory structure. This is the closest thing to magic I've done on my computer this month.
I've made some minor updates to Joakim's patch to fix bit-rot and conditionalize this behavior on a variable.
wdired-rename-to-nonexistent-directories.patch (1.6kb)
As an aside, I think learning about wdired turned on a lightbulb in my head that changed my understanding of Emacs. Yes, emacs is a text editor. But its power comes, in part, from the scores of major modes that let you interact with many different kinds of resources (e.g. your filesystem, as with wdired) under the guise of editing text (which you can think of as supplying a common abstraction over all those resources). Once you learn how to use, say, regexp search and replace, you can take advantage of that power when editing text files, but also when renaming/reorganizing files or composing mail or whatnot. Emacs is a text editor, but text doesn't just mean files.
No comments:
Post a Comment