5 from IdleConf
import idleconf
7 #$ event <<open-window-from-file>>
9 #$ unix <Control-x><Control-f>
11 #$ event <<save-window>>
13 #$ unix <Control-x><Control-s>
15 #$ event <<save-window-as-file>>
17 #$ unix <Control-x><Control-w>
19 #$ event <<save-copy-of-window-as-file>>
21 #$ unix <Control-x><w>
23 #$ event <<print-window>>
25 #$ unix <Control-x><Control-p>
30 def __init__(self
, editwin
):
31 self
.editwin
= editwin
32 self
.text
= editwin
.text
33 self
.__id
_open
= self
.text
.bind("<<open-window-from-file>>", self
.open)
34 self
.__id
_save
= self
.text
.bind("<<save-window>>", self
.save
)
35 self
.__id
_saveas
= self
.text
.bind("<<save-window-as-file>>",
37 self
.__id
_savecopy
= self
.text
.bind("<<save-copy-of-window-as-file>>",
39 self
.__id
_print
= self
.text
.bind("<<print-window>>", self
.print_window
)
42 # Undo command bindings
43 self
.text
.unbind("<<open-window-from-file>>", self
.__id
_open
)
44 self
.text
.unbind("<<save-window>>", self
.__id
_save
)
45 self
.text
.unbind("<<save-window-as-file>>",self
.__id
_saveas
)
46 self
.text
.unbind("<<save-copy-of-window-as-file>>", self
.__id
_savecopy
)
47 self
.text
.unbind("<<print-window>>", self
.__id
_print
)
51 self
.filename_change_hook
= None
54 return self
.editwin
.get_saved()
56 def set_saved(self
, flag
):
57 self
.editwin
.set_saved(flag
)
60 self
.editwin
.reset_undo()
62 filename_change_hook
= None
64 def set_filename_change_hook(self
, hook
):
65 self
.filename_change_hook
= hook
69 def set_filename(self
, filename
):
70 self
.filename
= filename
72 if self
.filename_change_hook
:
73 self
.filename_change_hook()
75 def open(self
, event
):
76 if self
.editwin
.flist
:
77 filename
= self
.askopenfile()
79 self
.editwin
.flist
.open(filename
)
83 # Code for use outside IDLE:
85 reply
= self
.maybesave()
89 filename
= self
.askopenfile()
91 self
.loadfile(filename
)
96 def loadfile(self
, filename
):
102 tkMessageBox
.showerror("I/O Error", str(msg
), master
=self
.text
)
104 self
.text
.delete("1.0", "end")
105 self
.set_filename(None)
106 self
.text
.insert("1.0", chars
)
108 self
.set_filename(filename
)
109 self
.text
.mark_set("insert", "1.0")
110 self
.text
.see("insert")
116 message
= "Do you want to save %s before closing?" % (
117 self
.filename
or "this untitled document")
118 m
= tkMessageBox
.Message(
119 title
="Save On Close",
121 icon
=tkMessageBox
.QUESTION
,
122 type=tkMessageBox
.YESNOCANCEL
,
127 if not self
.get_saved():
129 self
.text
.focus_set()
132 def save(self
, event
):
133 if not self
.filename
:
136 if self
.writefile(self
.filename
):
138 self
.text
.focus_set()
141 def save_as(self
, event
):
142 filename
= self
.asksavefile()
144 if self
.writefile(filename
):
145 self
.set_filename(filename
)
147 self
.text
.focus_set()
150 def save_a_copy(self
, event
):
151 filename
= self
.asksavefile()
153 self
.writefile(filename
)
154 self
.text
.focus_set()
157 def print_window(self
, event
):
160 filename
= self
.filename
162 filename
= tempfilename
= tempfile
.mktemp()
163 if not self
.writefile(filename
):
164 os
.unlink(tempfilename
)
166 edconf
= idleconf
.getsection('EditorWindow')
167 command
= edconf
.get('print-command')
168 command
= command
% filename
169 if os
.name
== 'posix':
170 command
= command
+ " 2>&1"
171 pipe
= os
.popen(command
, "r")
172 output
= pipe
.read().strip()
173 status
= pipe
.close()
175 output
= "Printing failed (exit status 0x%x)\n" % status
+ output
177 output
= "Printing command: %s\n" % repr(command
) + output
178 tkMessageBox
.showerror("Print status", output
, master
=self
.text
)
181 def writefile(self
, filename
):
183 chars
= str(self
.text
.get("1.0", "end-1c"))
185 f
= open(filename
, "w")
188 ## print "saved to", `filename`
191 tkMessageBox
.showerror("I/O Error", str(msg
),
195 def fixlastline(self
):
196 c
= self
.text
.get("end-2c")
198 self
.text
.insert("end-1c", "\n")
204 ("Python and text files", "*.py *.pyw *.txt", "TEXT"),
205 ("All text files", "*", "TEXT"),
209 def askopenfile(self
):
210 dir, base
= self
.defaultfilename("open")
211 if not self
.opendialog
:
212 self
.opendialog
= tkFileDialog
.Open(master
=self
.text
,
213 filetypes
=self
.filetypes
)
214 return self
.opendialog
.show(initialdir
=dir, initialfile
=base
)
216 def defaultfilename(self
, mode
="open"):
218 return os
.path
.split(self
.filename
)
226 def asksavefile(self
):
227 dir, base
= self
.defaultfilename("save")
228 if not self
.savedialog
:
229 self
.savedialog
= tkFileDialog
.SaveAs(master
=self
.text
,
230 filetypes
=self
.filetypes
)
231 return self
.savedialog
.show(initialdir
=dir, initialfile
=base
)
237 def __init__(self
, text
):
240 self
.text
.bind("<Control-o>", self
.open)
241 self
.text
.bind("<Control-s>", self
.save
)
242 self
.text
.bind("<Alt-s>", self
.save_as
)
243 self
.text
.bind("<Alt-z>", self
.save_a_copy
)
244 def get_saved(self
): return 0
245 def set_saved(self
, flag
): pass
246 def reset_undo(self
): pass
247 def open(self
, event
):
248 self
.text
.event_generate("<<open-window-from-file>>")
249 def save(self
, event
):
250 self
.text
.event_generate("<<save-window>>")
251 def save_as(self
, event
):
252 self
.text
.event_generate("<<save-window-as-file>>")
253 def save_a_copy(self
, event
):
254 self
.text
.event_generate("<<save-copy-of-window-as-file>>")
258 editwin
= MyEditWin(text
)
259 io
= IOBinding(editwin
)
262 if __name__
== "__main__":
263 from Tkinter
import *