summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/idlelib/Bindings.py2
-rw-r--r--Lib/idlelib/IOBinding.py45
-rw-r--r--Lib/idlelib/config-keys.def4
-rw-r--r--Lib/idlelib/config-main.def2
-rw-r--r--Lib/idlelib/configHandler.py1
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>'],