# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: topoltop@gmail.com-20101215165752-8rl2kwcfl7hjvqku # target_branch: bzr+ssh://bazaar.launchpad.net/%2Bbranch\ # /clicompanion/ # testament_sha1: 155c7924c03c65304c4c32475ace22b82f665308 # timestamp: 2010-12-15 19:58:01 +0300 # base_revision_id: duanedesign@gmail.com-20101208143825-\ # zluzpoowvsur4skb # # Begin patch === modified file 'clicompanionlib/controller.py' --- clicompanionlib/controller.py 2010-12-08 14:27:26 +0000 +++ clicompanionlib/controller.py 2010-12-15 16:55:33 +0000 @@ -43,7 +43,7 @@ error.run() sys.exit (1) -from clicompanionlib.utils import get_user_shell +from clicompanionlib.utils import get_user_shell, unquote_list, quote_line import view @@ -148,23 +148,24 @@ if result == gtk.RESPONSE_OK: ## user text assigned to a variable - text1 = entry1.get_text() - text2 = entry2.get_text() - text3 = entry3.get_text() + text1 = quote_line(entry1.get_text()) + text2 = quote_line(entry2.get_text()) + text3 = quote_line(entry3.get_text()) '''open flat file, add the new command, update CMNDS variable ## update commands in liststore (on screen) ''' with open(CHEATSHEET, "a") as cheatfile: if text1 != "": ## write new commands to .clicompanion2 file - cheatfile.write(text1+":"+text2+":"+text3+'\n') + cheatfile.write(text1+"::"+text2+"::"+text3+'\n') cheatfile.close() - l = str(text1+":"+text2+":"+text3) - #ls = l.split(':',2) + l = str(text1+"::"+text2+"::"+text3) + ls = l.split('::',2) + ls = unquote_list(ls) ## update view.CMNDS variable - filteredcommandplus = text1, text2 + filteredcommandplus = ls[0], ls[1] view.CMNDS.append(filteredcommandplus) ## update the command list on screen - liststore.append([text1,text2,text3]) + liststore.append([ls[0],ls[1],ls[2]]) ## The destroy method must be called otherwise the 'Close' button will @@ -233,9 +234,9 @@ if result == gtk.RESPONSE_OK: ## user text assigned to a variable - text1 = entry1.get_text() - text2 = entry2.get_text() - text3 = entry3.get_text() + text1 = quote_line(entry1.get_text()) + text2 = quote_line(entry2.get_text()) + text3 = quote_line(entry3.get_text()) if text1 != "": self.remove_command(widget, liststore) @@ -243,15 +244,17 @@ ## update commands in liststore (on screen) ''' with open(CHEATSHEET, "a") as cheatfile: ## write new commands to .clicompanion2 file - cheatfile.write(text1+":"+text2+":"+text3+'\n') + cheatfile.write(text1+"::"+text2+"::"+text3+'\n') cheatfile.close() - l = str(text1+":"+text2+":"+text3) + l = str(text1+"::"+text2+"::"+text3) + ls = l.split('::',2) + ls = unquote_list(ls) #ls = l.split(':',2) ## update view.CMNDS variable - filteredcommandplus = text1, text2 + filteredcommandplus = ls[0], ls[1] view.CMNDS.append(filteredcommandplus) ## update the command list on screen - liststore.append([text1,text2,text3]) + liststore.append([ls[0],ls[1],ls[2]]) ## The destroy method must be called otherwise the 'Close' button will ## not work. === modified file 'clicompanionlib/utils.py' --- clicompanionlib/utils.py 2010-11-30 16:03:59 +0000 +++ clicompanionlib/utils.py 2010-12-15 16:57:52 +0000 @@ -25,6 +25,7 @@ import getpass import os +import re CHEATSHEET = os.path.expanduser("~/.clicompanion2") #CONFIG_ORIG = "/etc/clicompanion.d/clicompanion2.config" @@ -54,3 +55,34 @@ # Don't forget to strip the newline at the end of the string! return i.split(":")[-1:][0].strip('\n') +def quote_line(line): + return line.replace(':', '\:\\') + +def unquote_list(lst): + nlist = [] + for elm in lst: + nlist.append(elm.replace('\:\\', ':')) + return nlist + +def convert_init_file(): + if not os.path.exists(CHEATSHEET): + return + fin = open(CHEATSHEET, "r") + + need_convert = False + for line in fin: + ms = re.findall(':', line) + if len(ms) < 4: + need_convert = True + break + if not need_convert: + return + + fin = open(CHEATSHEET, "r") + fout = open(CHEATSHEET + ".tmp", "w") + for line in fin: + row = line.split(':', 2) + fout.write(row[0] + '::' + row[1] + '::' + row[2]) + fin.close() + fout.close() + os.rename(CHEATSHEET + ".tmp", CHEATSHEET) === modified file 'clicompanionlib/view.py' --- clicompanionlib/view.py 2010-12-08 14:27:26 +0000 +++ clicompanionlib/view.py 2010-12-15 16:51:23 +0000 @@ -43,7 +43,7 @@ import clicompanionlib.menus_buttons import clicompanionlib.controller -from clicompanionlib.utils import get_user_shell +from clicompanionlib.utils import get_user_shell, unquote_list, convert_init_file import clicompanionlib.tabs @@ -68,10 +68,11 @@ self.setup() ## Then, run me again. self.update(liststore) - + ## add bug data from .clicompanion --> bugdata --> to the liststore for line in bugdata.splitlines(): - l = line.split(':',2) + l = line.split('::',2) + l = unquote_list(l) commandplus = l[0], l[1] CMNDS.append(commandplus) liststore.append([l[0],l[1],l[2]]) @@ -92,6 +93,8 @@ # Oops! Looks like there's no cheatsheet in CHEATSHEET. # Then, create an empty cheatsheet. open(CHEATSHEET, 'w').close() + convert_init_file() + #liststore in a scrolled window in an expander @@ -274,6 +277,5 @@ pass def run(): - main_window = MainWindow() main_window.main() # Begin bundle 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