11 January 2001 Magic now with GNU Readline Jeff Solomon This file describes the implementation of the GNU Readline interface in to magic. 1. Introduction GNU Readline helps you type. As you may know from using a modern shell, like bash, tcsh, or zsh, quickly returning to an old command or typing only an abbreviation of the command desired can save a tremendous amount of time. Now magic has those same capabilities with the addition of GNU Readline. 2. Building First, you have to compile the readline interface in. Do this by selecting "yes" when asked from scripts/config program. The magic distribution comes with the source for readline and I'd suggest using it because it will always be a version that works. 3. Usage The short answer is "Press ". In Readline, the TAB key cause completion to occur. First press ":" to get the command prompt, then hit TAB twice. You should see a list of all magic commands. Next, hit the letter "c" and hit TAB again. You should see a list of all the commands that begin with the letter "c". But wait, there's more! This implementation of readline has context sensitive completion. Type ":see " and hit TAB. It gives a list of possible layer names in the current technology. Pretty cool, huh? Next, try ":getcell " and then TAB, it will list all possible cell names. Very neat I think. Here are the possible things that are completed depending on the command and the placement of the cursor in a command: commands command arguments macros interative macros layer names file names/usernames cell names istyle names ostyle names directions (eg. bottom, down, east) When in doubt, just hit TAB! 4. Programming Mostly all the code for the readline interface lives in textio/txInput.c. There is also some in textio/txMain.c, but only in one place of initialization. See these two files and the docs for readline itself for instructions on changing the interface. 5. GNU License vs. Magic License The GNU license under with Readline is released is fairly restrictive. There is some concern that by integrating readline into magic, the magic code itself will be "infected" with the GNU license. My belief (which clearly could be wrong) is that as long as compiling without the code is an option and the code is clearly #ifdef'ed then it should not be a problem because a clear deliniation between magic and readline code has been maintained. Any GNU experts feel free to enlighten the rest of us if we're wrong.