Things I Wish I'd Known about IDL -- But Didn't Know to Ask
My IDL programs(Some of) My IDL routines can be found here.
Two critical, must-read web tutorials.These are quick - a five minute read each, at most - but the techniques demonstrated are extremely powerful.
- Array Concatenation Magic (or, what are all those extra 's for?)
- Dimension juggling with reform and rebin
How to Make Colors Work RightI wrote some notes up here on how to get colors working correctly, the modern way on 24 bit displays. Get out of the 8-bit stone age!
Vastly improved Command line debuggingCheck out Craig Markwardt's DXDEBUG package for some command line debugging tools that will revolutionize the way you work. Want to examine or change variables at a different level of the call stack while at a breakpoint or STOP? No problem! Get it here
Using CTAGS with IDLctags is a powerful tool for software development which keeps track of which source file contains the definition for a given function. Many editors, vi and emacs both included, support jumping immediately to a given function using ctags.
By default, ctags doesn't support IDL, but adding this is trivial. Create a files called .ctags in your home directory, containing the following:
--langdef=IDL --langmap=IDL:.pro --regex-IDL=/^pro[ \t]+([a-zA-Z0-9_:]+)/\1/p,procedure/i --regex-IDL=/^function[ \t]+([a-zA-Z0-9_:]+)/\1/f,function/iThen you can run ctags -R on the top of your IDL directory and create a ctags file containing the information about every file in your entire tree. For vim, you will want to add something like set tags=./tags,tags,../tags,~mperrin/idl/tags to your .vimrc, and then you can navigate using tags.
About !p.multi and displaying plots.How can I get !p.multi to work right when displaying images such as with tv?
this archived discussion.
The short version is, only the
plot command moves !p.multi forward, and ONLY
called without the /noerase keyword.
So how to display an image with TV or the like and have it work with !p.multi? The trick is to call plot, get the position vector, and then use that for displaying everything else.
Saving the Command History
How often have you typed some long series of commands in to the
IDL prompt interactively, decided you liked something, and then wanted
to save all those commands into a pro file? Turns out this is fairly
easy to do.
displays your command buffer. (You did set !edit_input = 512 in your .idlstartup, right?) Copy and paste the commands you want from this list into a text file, called, say, "tmp". You'll note the order of the commands is reversed from what you want - most recent at the top, and that there are line numbers prepended. But this is no problem! Just do
tac tmp | cut -c 9- > somefile.pro
which will strip the line numbers and fix the command order. Then you can edit somefile.pro to your heart's content.
NEW! I've just found out an even better way. The IDL intrinsic command "journal" will save a copy of your command history to a .pro file. It's so simple:
IDL> journal, 'my_commands.pro' ; start journalling IDL> (user enters commands) IDL> journal ; stop journalling
My thanks to Liam Gumley for pointing this out on comp.lang.idl-pvwave.
How does IDL decide how many colors it has?Colors under IDL can be very frustrating, particularly on all these old Suns with 8-bit graphics cards. See David Fanning's discussion of this here
If you want to ensure the use of a private 8-bit color table rather
than just using 8 or 10 colors from the shared color table, stick the
following in your .idlstartup:
; force the use of a private 256 color map by opening and closing ; a window, basically hidden offscreen. window,0,colors=256,ypos=-2000,xpos=3000 & wdelete, 0