Skip to content

Commit fe84f78

Browse files
committed
Have a save to file option in gtk
1 parent 9aff5bc commit fe84f78

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

bpython/gtk_.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,32 @@ def confirm(self, q):
274274
dialog.destroy()
275275
return response
276276

277+
def file_prompt(self, s):
278+
chooser = gtk.FileChooserDialog(action=gtk.FILE_CHOOSER_ACTION_SAVE,
279+
buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK))
280+
chooser.set_default_response(gtk.RESPONSE_OK)
281+
chooser.set_current_name('test.py')
282+
283+
pyfilter = gtk.FileFilter()
284+
pyfilter.set_name("Python files")
285+
pyfilter.add_pattern("*.py")
286+
chooser.add_filter(pyfilter)
287+
288+
allfilter = gtk.FileFilter()
289+
allfilter.set_name("All files")
290+
allfilter.add_pattern("*")
291+
chooser.add_filter(allfilter)
292+
293+
response = chooser.run()
294+
if response == gtk.RESPONSE_OK:
295+
fn = chooser.get_filename()
296+
else:
297+
fn = False
298+
299+
chooser.destroy()
300+
301+
return fn
302+
277303
def notify(self, s, n=10):
278304
self.statusbar.message(s)
279305

@@ -588,6 +614,9 @@ def on_suggestion_selection_changed(self, selection, word):
588614
def do_paste(self, widget):
589615
self.pastebin()
590616

617+
def do_write2file(self, widget):
618+
self.write2file()
619+
591620
def do_partial_paste(self, widget):
592621
bounds = self.text_buffer.get_selection_bounds()
593622
if bounds == ():
@@ -751,7 +780,12 @@ def main(args=None):
751780

752781
filem = gtk.MenuItem("File")
753782
filem.set_submenu(filemenu)
754-
783+
784+
save = gtk.MenuItem("Save to file")
785+
save.connect("activate", repl_widget.do_write2file)
786+
filemenu.append(save)
787+
788+
755789
pastebin = gtk.MenuItem("Pastebin")
756790
pastebin.connect("activate", repl_widget.do_paste)
757791
filemenu.append(pastebin)

bpython/repl.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,9 @@ def write2file(self):
634634

635635
try:
636636
fn = self.interact.file_prompt('Save to file (Esc to cancel): ')
637+
if not fn:
638+
self.interact.notify("Save cancelled.")
639+
return
637640
except ValueError:
638641
self.interact.notify("Save cancelled.")
639642
return

0 commit comments

Comments
 (0)