A small emacs-lisp package that I wrote (eev.el - URL below) defines some lisp functions that can be used as hyperlinks and some commands to execute blocks of text; for example, in the chunk of text below, # (find-node "(gawk)Top") # (find-node "(gawk)If Statement") # (find-node "(gawk)String Functions" "substr(") cd $ES/ for i in *.e; do echo -n "$i: " awk '{if ($0=="#") {if (n==1) exit; else n+=1} else if (n==1) print substr($0, 3) }' $i done | tee ~/o if you place the cursor at the end of the last "find-node" line and type C-x C-e then Emacs evaluates the Lisp expression (find-node "(gawk)String Functions" "substr(") which corresponds to `find the info page named "String Functions" in the gawk info pages, and place the cursor after the first occurrence of "substr(". There are variations like (find-fline "/usr/include/linux/kd.h" 11) (find-k2file "drivers/char/vt.c" "PIO_FONTX") (find-k2tag "vt_ioctl") which mean, respectively, `open the file /usr/include/linux/kd.h and go to the line 11', `open the file /usr/src/linux-2.0/drivers/char/vt.c and search for "PIO_FONTX"', and `find the tag "vt_ioctl" in the kernel 2.0.37 sources, i.e., using the tags table /usr/src/linux-2.0/TAGS'. As any of these "hyperlinks" can be written preceded by a "#", we become able to, for example, place hyperlinks in our shell scripts... As for executing blocks of text, if you mark a portion of your text, say from `# (find-node "(gawk)Top")' to `done | tee ~/o', and then type M-x eev (the name of this function doesn't make much sense, but I use it so much that I had to choose something short), then you can go to another window or virtual console and run `ee', and the shell will execute the marked block almost as if you were typing it line by line, i.e, displaying each line (including blanks and comments) before executing it, and, if needed, accumulating many lines before running them together, as in the case of the "for" loop. There are some variations on eev that are meant to execute blocks of text using Tcl, Forth, gdb or perl and to run a block through LaTeX, putting some predefined lines before and after it. Well, the moral of all this is that one can keep files of notes with lots of comments and hyperlinks, instead of having to keep hundreds of possibly incomplete scripts, and the "code" in these notes can be executed in little pieces; so we can just store the commands that accomplished something on one day, and as we use them more we can clean our preferred ones and make them more general... it's more organic than having to choose between "turn into a named script and document it", "describe everything in terms of `type this, run that'", and "Oh, I think I will remember it when I need to". I think that people should have better ways to exchange tricks than only by scripts, source, books and verbal descriptions, and this is my contribution to it. This way obviously sprang out from my own needs, my laziness and the necessity to cope with my very weak memory... I've spent four years thinking that everybody was doing like me, until I found -- shocked and horrified -- that it was not the case... Well, too much wistory. Back to the main points: I have about 1M just on notes of this kind, which I call "e-scripts". They're temporarily at angelfire; my page there is http://www.angelfire.com/or2/edrx/ . It is grossly incomplete; the server I used at my university went down some weeks ago (it was a vulnerable RedHat box) and I was trying to use angelfire, but at a.f. some filenames, like .emacs, are not allowed and I can't generate all the stuff from a 300k .tar.gz and a makefile, not to count that all the htmls get banners...