Add primitive printing support for Unix and Windows.

This commit is contained in:
Guido van Rossum 2002-06-10 18:52:02 +00:00
parent eb914881af
commit 2ca7862e97
5 changed files with 38 additions and 0 deletions

View File

@ -23,6 +23,8 @@ menudefs = [
('Save _As...', '<<save-window-as-file>>'), ('Save _As...', '<<save-window-as-file>>'),
('Save Co_py As...', '<<save-copy-of-window-as-file>>'), ('Save Co_py As...', '<<save-copy-of-window-as-file>>'),
None, None,
('_Print window', '<<print-window>>'),
None,
('_Close', '<<close-window>>'), ('_Close', '<<close-window>>'),
('E_xit', '<<close-all-windows>>'), ('E_xit', '<<close-all-windows>>'),
]), ]),

View File

@ -1,6 +1,8 @@
import os import os
import tempfile
import tkFileDialog import tkFileDialog
import tkMessageBox import tkMessageBox
from IdleConf import idleconf
#$ event <<open-window-from-file>> #$ event <<open-window-from-file>>
#$ win <Control-o> #$ win <Control-o>
@ -18,6 +20,10 @@ import tkMessageBox
#$ win <Alt-Shift-s> #$ win <Alt-Shift-s>
#$ unix <Control-x><w> #$ unix <Control-x><w>
#$ event <<print-window>>
#$ win <Control-p>
#$ unix <Control-x><Control-p>
class IOBinding: class IOBinding:
@ -30,6 +36,7 @@ class IOBinding:
self.save_as) self.save_as)
self.__id_savecopy = self.text.bind("<<save-copy-of-window-as-file>>", self.__id_savecopy = self.text.bind("<<save-copy-of-window-as-file>>",
self.save_a_copy) self.save_a_copy)
self.__id_print = self.text.bind("<<print-window>>", self.print_window)
def close(self): def close(self):
# Undo command bindings # Undo command bindings
@ -37,6 +44,7 @@ class IOBinding:
self.text.unbind("<<save-window>>", self.__id_save) self.text.unbind("<<save-window>>", self.__id_save)
self.text.unbind("<<save-window-as-file>>",self.__id_saveas) 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("<<save-copy-of-window-as-file>>", self.__id_savecopy)
self.text.unbind("<<print-window>>", self.__id_print)
# Break cycles # Break cycles
self.editwin = None self.editwin = None
self.text = None self.text = None
@ -146,6 +154,30 @@ class IOBinding:
self.text.focus_set() self.text.focus_set()
return "break" return "break"
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"
edconf = idleconf.getsection('EditorWindow')
command = edconf.get('print-command')
command = command % filename
if os.name == 'posix':
command = command + " 2>&1"
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)
return "break"
def writefile(self, filename): def writefile(self, filename):
self.fixlastline() self.fixlastline()
chars = str(self.text.get("1.0", "end-1c")) chars = str(self.text.get("1.0", "end-1c"))

View File

@ -1,3 +1,4 @@
[EditorWindow] [EditorWindow]
font-name= courier font-name= courier
font-size= 10 font-size= 10
print-command=lpr %s

View File

@ -1,3 +1,4 @@
[EditorWindow] [EditorWindow]
font-name: courier new font-name: courier new
font-size: 10 font-size: 10
print-command=start /min notepad /p %s

View File

@ -17,6 +17,7 @@ windows_keydefs = \
'<<open-new-window>>': ['<Control-n>'], '<<open-new-window>>': ['<Control-n>'],
'<<open-window-from-file>>': ['<Control-o>'], '<<open-window-from-file>>': ['<Control-o>'],
'<<plain-newline-and-indent>>': ['<Control-j>'], '<<plain-newline-and-indent>>': ['<Control-j>'],
'<<print-window>>': ['<Control-p>'],
'<<redo>>': ['<Control-y>'], '<<redo>>': ['<Control-y>'],
'<<remove-selection>>': ['<Escape>'], '<<remove-selection>>': ['<Escape>'],
'<<save-copy-of-window-as-file>>': ['<Alt-Shift-s>'], '<<save-copy-of-window-as-file>>': ['<Alt-Shift-s>'],
@ -46,6 +47,7 @@ unix_keydefs = \
'<<open-new-window>>': ['<Control-x><Control-n>'], '<<open-new-window>>': ['<Control-x><Control-n>'],
'<<open-window-from-file>>': ['<Control-x><Control-f>'], '<<open-window-from-file>>': ['<Control-x><Control-f>'],
'<<plain-newline-and-indent>>': ['<Control-j>'], '<<plain-newline-and-indent>>': ['<Control-j>'],
'<<print-window>>': ['<Control-x><Control-p>'],
'<<redo>>': ['<Alt-z>', '<Meta-z>'], '<<redo>>': ['<Alt-z>', '<Meta-z>'],
'<<save-copy-of-window-as-file>>': ['<Control-x><w>'], '<<save-copy-of-window-as-file>>': ['<Control-x><w>'],
'<<save-window-as-file>>': ['<Control-x><Control-w>'], '<<save-window-as-file>>': ['<Control-x><Control-w>'],