diff options
-rw-r--r-- | Lib/idlelib/Bindings.py | 2 | ||||
-rw-r--r-- | Lib/idlelib/IOBinding.py | 45 | ||||
-rw-r--r-- | Lib/idlelib/config-keys.def | 4 | ||||
-rw-r--r-- | Lib/idlelib/config-main.def | 2 | ||||
-rw-r--r-- | Lib/idlelib/configHandler.py | 1 |
5 files changed, 51 insertions, 3 deletions
diff --git a/Lib/idlelib/Bindings.py b/Lib/idlelib/Bindings.py index aae6106..06e215e 100644 --- a/Lib/idlelib/Bindings.py +++ b/Lib/idlelib/Bindings.py @@ -30,6 +30,8 @@ menudefs = [ ('Save _As...', '<<save-window-as-file>>'), ('Save Co_py As...', '<<save-copy-of-window-as-file>>'), None, + ('_Print window', '<<print-window>>'), + None, ('_Close', '<<close-window>>'), ('E_xit', '<<close-all-windows>>'), ]), diff --git a/Lib/idlelib/IOBinding.py b/Lib/idlelib/IOBinding.py index 729f29b..eb901dc 100644 --- a/Lib/idlelib/IOBinding.py +++ b/Lib/idlelib/IOBinding.py @@ -6,9 +6,11 @@ # which will only understand the local convention. import os +import tempfile import tkFileDialog import tkMessageBox import re +from configHandler import idleConf #$ event <<open-window-from-file>> #$ win <Control-o> @@ -22,6 +24,10 @@ import re #$ win <Alt-s> #$ unix <Control-x><Control-w> +#$ event <<print-window>> +#$ win <Control-p> +#$ unix <Control-x><Control-p> + #$ event <<save-copy-of-window-as-file>> #$ win <Alt-Shift-s> #$ unix <Control-x><w> @@ -38,13 +44,15 @@ class IOBinding: self.save_as) self.__id_savecopy = self.text.bind("<<save-copy-of-window-as-file>>", self.save_a_copy) - + self.__id_print = self.text.bind("<<print-window>>", self.print_window) + def close(self): # Undo command bindings self.text.unbind("<<open-window-from-file>>", self.__id_open) self.text.unbind("<<save-window>>", self.__id_save) self.text.unbind("<<save-window-as-file>>",self.__id_saveas) self.text.unbind("<<save-copy-of-window-as-file>>", self.__id_savecopy) + self.text.unbind("<<print-window>>", self.__id_print) # Break cycles self.editwin = None self.text = None @@ -187,7 +195,40 @@ class IOBinding: tkMessageBox.showerror("I/O Error", str(msg), master=self.text) return 0 - + + def print_window(self, event): + tempfilename = None + if self.get_saved(): + filename = self.filename + else: + filename = tempfilename = tempfile.mktemp() + if not self.writefile(filename): + os.unlink(tempfilename) + return "break" + platform=os.name + printPlatform=1 + if platform == 'posix': #posix platform + command = idleConf.GetOption('main','General','print-command-posix') + command = command + " 2>&1" + elif platform == 'nt': #win32 platform + command = idleConf.GetOption('main','General','print-command-win') + else: #no printing for this platform + printPlatform=0 + if printPlatform: #we can try to print for this platform + command = command % filename + pipe = os.popen(command, "r") + output = pipe.read().strip() + status = pipe.close() + if status: + output = "Printing failed (exit status 0x%x)\n" % status + output + if output: + output = "Printing command: %s\n" % repr(command) + output + tkMessageBox.showerror("Print status", output, master=self.text) + else: #no printing for this platform + message="Printing is not enabled for this platform: %s" % platform + tkMessageBox.showinfo("Print status", message, master=self.text) + return "break" + def fixlastline(self): c = self.text.get("end-2c") if c != '\n': diff --git a/Lib/idlelib/config-keys.def b/Lib/idlelib/config-keys.def index 8b38827..180d70e 100644 --- a/Lib/idlelib/config-keys.def +++ b/Lib/idlelib/config-keys.def @@ -26,12 +26,13 @@ open-module=<Alt-Key-m> open-new-window=<Control-Key-n> open-window-from-file=<Control-Key-o> plain-newline-and-indent=<Control-Key-j> +print-window=<Control-Key-p> redo=<Control-Shift-Key-z> remove-selection=<Key-Escape> save-copy-of-window-as-file=<Alt-Shift-Key-s> save-window-as-file=<Control-Shift-Key-s> save-window=<Control-Key-s> -select-all=<Alt-Key-a> +select-all=<Control-Key-a> toggle-auto-coloring=<Control-Key-slash> undo=<Control-Key-z> find=<Control-Key-f> @@ -59,6 +60,7 @@ open-module=<Control-Key-x><Control-Key-m> open-new-window=<Control-Key-x><Control-Key-n> open-window-from-file=<Control-Key-x><Control-Key-f> plain-newline-and-indent=<Control-Key-j> +print-window=<Control-x><Control-Key-p> python-docs=<Control-Key-h> python-context-help=<Control-Shift-Key-h> redo=<Alt-Key-z> <Meta-Key-z> diff --git a/Lib/idlelib/config-main.def b/Lib/idlelib/config-main.def index 01f0662..cd52b21 100644 --- a/Lib/idlelib/config-main.def +++ b/Lib/idlelib/config-main.def @@ -28,6 +28,8 @@ [General] editor-on-startup= 1 +print-command-posix=lpr %s +print-command-win=start /min notepad /p %s [EditorWindow] width= 80 diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py index 82bf6d2..1afd19e 100644 --- a/Lib/idlelib/configHandler.py +++ b/Lib/idlelib/configHandler.py @@ -507,6 +507,7 @@ class IdleConf: '<<open-new-window>>': ['<Control-n>'], '<<open-window-from-file>>': ['<Control-o>'], '<<plain-newline-and-indent>>': ['<Control-j>'], + '<<print-window>>': ['<Control-p>'], '<<redo>>': ['<Control-y>'], '<<remove-selection>>': ['<Escape>'], '<<save-copy-of-window-as-file>>': ['<Alt-Shift-s>'], |