;+ ;PROCEDURE: ; share_colors ;PURPOSE: ; Procedure that allows multiple IDL sessions to share the same color table. ; The procedure should be called in each session before any ; windows are created. ;USAGE: ; Typically this procedure will be put in a startup routine. such as: ; share_colors,first=f ; if f then loadct,39 ; ;KEYWORDS: ; FIRST Named variable that will be set to 1 if this is the ; first session, and set to 0 otherwise. ;SIDE EFFECTS: ; Creates a temporary file with the name 'idl_cmap:NAME' on the users home ; directory where NAME is the name of the display machine. ; This file is deleted upon exiting IDL. ; The procedure is only useful on UNIX for users with a common home directory. ;- pro share_colors,filename=fname,lun=lun,first=first,colors=colors if !d.name ne 'X' then begin dprint,'Device not "X"!' first=1 return endif path = getenv('HOME') disp = getenv('DISPLAY') machine = str_sep(disp,':') machine = machine(0) if not keyword_set(machine) then machine = getenv('HOST') fname = path+'/idl_cmap:'+machine on_ioerror,create openr,lun,fname,/get_lun dprint,'Using translation table defined in file: '+fname id=0l n=0l readu,lun,id,n t = bytarr(n) readu,lun,t close,lun device,set_trans = t window,colors=n ;Note file is NOT closed. It will be closed on exit first = 0 return create: on_ioerror,null openw,lun,fname,/get_lun,/delete dprint,'First Session; created translation table file: '+fname if keyword_set(colors) then window,get_x_id=id,colors=colors $ else window,get_x_id=id device,trans = t n = !d.n_colors writeu,lun,id,n,t(0:n-1) flush,lun ; Note file is NOT closed. It will be closed on exit first=1 return end