Page 1 of 1
ArchiveAllTabs
Posted: Tue Jun 23, 2009 5:11 pm
by mgag
Obsolete - see version 1.3 below.
Here is a script to save all open tabs into a single zip file. Several items are configurable in the script to suit your tastes.
Thanks Jussi for the help.
Posted: Wed Jun 24, 2009 12:03 am
by jussij
The script uses the
zip and
rm commands which don't exist on standard Windows

.
I can guess what the do but I where did you get them
Are these part of a
cygwin or
python install
Cheers Jussi
Posted: Wed Jun 24, 2009 1:44 pm
by mgag
rm: It seems its a tool added by the programming environment that I am in. "rm" can be replaced by dos command "erase".
zip: yes, its a required tool and I try to make a reference to that. Does Windows come with a standard archiving tool? There is "compact" but it doesn't seem to be what I want.
Posted: Wed Jun 24, 2009 2:08 pm
by jussij
I just found this
zip utility that should work:
http://gnuwin32.sourceforge.net/packages/zip.htm
ZIP
Posted: Wed Jun 24, 2009 8:30 pm
by mgag
Yes, that is the one, I put a reference to it in the comments in the script - I will add the web page.
Version 1.1
Posted: Fri Jun 26, 2009 3:00 pm
by mgag
Obosolete : see version 1.3 below.
ArchiveAllTabs Update
Posted: Wed Jul 08, 2009 7:14 pm
by mgag
# Version 1.2 - with Zeus 3.97, had to modify this line
# for the "erase" command,
# zeus.system(cmd, output_dir, 16 + 32 + 64)
# added "16", else cSpawn returns error code 2
Posted: Mon Sep 21, 2009 7:35 pm
by mgag
Version 1.3: Can optionally use timestamped sub-directories to store archives of the open tabs in the editor. To enable sub-directorys (instead of Zip.exe), set ARCHIVE_USE_ZIP to "False".
Code: Select all
import zeus
import datetime
# makes a zip file of all the open tabs. useful if you want to take
# a snapshot of the workspace very quickly. Since it grabs all open tabs
# it makes an "atomic" backup (files are in "build" sync).
#
# Version 1.3 - Optionally use timestamped directories to store files
# rather than using ZIP.
# Version 1.2 - with Zeus 3.97, had to modify the "erase" command
# zeus.system(cmd, output_dir, 16 + 32 + 64)
# to add "16", else cSpawn returns error code 2
# Version 1.1 - changed "rm" to "erase" to remove old files
# - "rm" is not standard windows
# - added website for Zip.exe
# Version 1.0 - Initial release
#
# TODO List:
# 1. remove old archives after some time limit
# 2. add instruction on how to make this macro hook into File:Save
#
# For ZIP archives:
# =================
# See http://gnuwin32.sourceforge.net/packages/zip.htm
# The saved file is of the format: [prefix]YYYYMMDD_HH_MM_SS.zip
# where: [prefix] = optional user input prefix, see zipFilePrefix
# : YYYYMMDD_HH_MM_SS = Year, Month, Day, Hour, Minute, Second
#
# This script requires the zip.exe from Info-ZIP to be in the DOS search path.
# It should be easy enough to modify to use other command line archiving programs.
# To use ZIP archives, set ARCHIVE_USE_ZIP to "True"
ARCHIVE_USE_ZIP = True # true requires zip.exe from Info-ZIP
DEBUG = False # change to enable/disable debugging, Use Macros-Macro/Debug Output to view
def debug( str = ""):
if DEBUG:
zeus.debug_output( str )
def exec_command( cmd, directory, mode = 16 + 32 + 64):
debug(cmd+"\n")
zeus.system(cmd, directory, mode )
def key_macro():
ADDNOTE = True # dialog box to ask user to add a Note to archive
ADDZIPFILENAMEPREFIX = False # dialog box to ask user to add a prefix to zip file
noteFile = "note.txt" # optional notes file name
noteTextDefault = "" # default for user input note text
zipFilePrefixDefault = "" # default for user input zipfilename or directory name
zipFilePrefix = "" # optional prefix for the zip file or directory name
if DEBUG:
zeus.debug_enable()
zeus.screen_update_disable()
# select backup loacation, one of the following,
output_dir = zeus.macro_tag("$BD") # use Zeus backup directory
#output_dir = "e:\\archive\\" # path to archive directory here
debug("Using output_dir: %s\n" % output_dir)
file_list = []
# for each open tab, copy to the output_dir
origTabWindowID = zeus.get_window_id()
if origTabWindowID == -1:
# there are no open windows
return
while True: # python version of a do while loop
tabFileName = zeus.get_file_name().split("\\")[-1]
# duplicate filenames will get a unique prefix
if tabFileName in file_list:
file_list.append( "%d_%s" % (len(file_list),tabFileName) )
else:
file_list.append( tabFileName )
#create temporary copy of the tab file
myFile = open( str(output_dir+file_list[-1]), 'w')
count = zeus.get_line_count()
debug( "%d file:%s lineCount = %d \n" % (len(file_list),file_list[-1], count) )
zeus.debug_disable() # turn off debugging to mute the many get_line_text() calls
for line in range(count):
mystr = zeus.get_line_text(line+1) # 1-indexed
myFile.write( mystr+"\n" )
if DEBUG:
zeus.debug_enable()
myFile.close()
zeus.WindowNext()
if origTabWindowID == zeus.get_window_id():
# we have looped around all the tabs - time to quit
break
# get user note to add to archive
# TODO: when Zeus supports it, put ADDNOTE & ADDZIPFILENAMEPREFIX
# in the same dialog box.
if ADDNOTE:
note = zeus.user_input("Note:", noteTextDefault)
noteFile = output_dir+noteFile
if note or noteTextDefault:
myFile = open( noteFile, 'w')
file_list.append(noteFile.split("\\")[-1])
myFile.write( note+"\n" )
# could add a datetime stamp here, but already part of filename
myFile.close()
if ADDZIPFILENAMEPREFIX:
zipFilePrefix = zeus.user_input("zipFileNamePrefix", zipFilePrefixDefault)
if zipFilePrefix:
zipFilePrefix += "_"
if ARCHIVE_USE_ZIP:
# build the ZIP command to archive the files
zipFileName = zipFilePrefix + datetime.datetime.now().strftime("%Y%m%d_%X.zip ")
zipFileName = zipFileName.replace(":","_") # fix invalid char ":"
cmd = "zip " + zipFileName
for name in file_list:
cmd += name + " "
exec_command( cmd, output_dir )
else:
# copy all the files to the archive directory
# make a sub-directory to store the files
dirName = zipFilePrefix + datetime.datetime.now().strftime("%Y%m%d_%X")
dirName = dirName.replace(":","_") # fix invalid char ":"
cmd = "mkdir " + dirName
exec_command( cmd, output_dir )
debug( "Using output_dir: %s" % output_dir )
for name in file_list:
cmd = "copy " + name + " " + dirName
exec_command( cmd, output_dir )
# now remove all the temp files
cmd = "erase "
for name in file_list:
cmd += name + " "
#exec_command( cmd, output_dir )
if DEBUG:
zeus.debug_disable()
zeus.screen_update_enable()
zeus.screen_update()
key_macro() # run the macro
Posted: Tue Sep 22, 2009 9:53 pm
by mgag
Jussij,
1. The archiveAllTabs.py script calls zeus.screen_update_disable() , however, I still see partial windows being drawn when the script executes. Is that expected?
2. Recall we discussed a problem with passing multiple fields to a dialog box, I believe you traced that to a python issue with zeus.user_input(); is there any progress on fixing that?
Posted: Wed Sep 23, 2009 6:33 am
by jussij
The archiveAllTabs.py script calls zeus.screen_update_disable(), however, I still see partial windows being drawn when the script executes. Is that expected?
The
screen_update_disable function does not try to stop things like Windows painting, but rather it tries to stop redundant actions.
For example, consider the case where you do a simple find and replace. Zeus will first run a find to locate the text, it will then do a replace of the text found and finally it will
scroll the document window to make sure text is correctly displayed on the screen.
In some instance the
'scroll the document window' step can be considered redundant (i.e. when doing a replace all for example) and it is these types of actions that the
screen_update_disable tries to eliminate.
2. Recall we discussed a problem with passing multiple fields to a dialog box, I believe you traced that to a python issue with zeus.user_input(); is there any progress on fixing that?
When I get some time I will take a look into this and see if it can be fixed
Cheers Jussi