diff -r 63efacd80f8e Lib/idlelib/Bindings.py --- a/Lib/idlelib/Bindings.py Mon Feb 03 13:58:31 2014 -0800 +++ b/Lib/idlelib/Bindings.py Sun Feb 09 08:07:39 2014 +0530 @@ -44,6 +44,7 @@ ('Find _Selection', '<>'), ('Find in Files...', '<>'), ('R_eplace...', '<>'), + ('Clipboard History', '<>'), ('Go to _Line', '<>'), ]), ('format', [ diff -r 63efacd80f8e Lib/idlelib/ClipboardHistory.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/idlelib/ClipboardHistory.py Sun Feb 09 08:07:39 2014 +0530 @@ -0,0 +1,59 @@ +"""Clipboard history for IDLE + +""" + +from tkinter import * +import os + +from idlelib import textView +from idlelib import idlever + + +class ClipboardHistory(Toplevel): + + def __init__(self, parent, title, clipboard_history): + + Toplevel.__init__(self, parent) + self.parent = parent + + self.configure(borderwidth=5) + self.geometry("160x200+%d+%d" % (parent.winfo_rootx() + 30, + parent.winfo_rooty() + 30)) + + self.transient(parent) + self.protocol("WM_DELETE_WINDOW", self.Ok) + self.clipboard_history = clipboard_history + self.title(title) + self.grab_set() + self.CreateWidgets() + self.bind('', self.Ok) # dismiss dialog + self.bind('', self.Ok) # dismiss dialog + self.wait_window() + + def CreateWidgets(self): + self.clipboard_history_listbox = Listbox(self, selectmode=EXTENDED) + for msg in self.clipboard_history: + self.clipboard_history_listbox.insert(END, msg) + self.clipboard_history_listbox.pack() + paste_button = Button(self, text="Paste Selected", command=self.paste) + paste_button.pack() + + def Ok(self, event=None): + self.destroy() + + def paste(self, event=None): + curselected = self.clipboard_history_listbox.curselection() + for index in curselected: + self.parent.insert( + "insert", self.clipboard_history_listbox.get(index)) + + +if __name__ == '__main__': + + root = Tk() + + def run(): + from idlelib import ClipboardHistory + ClipboardHistory.ClipboardHistory(root, 'Clipboard History') + Button(root, text='Dialog', command=run).pack() + root.mainloop() diff -r 63efacd80f8e Lib/idlelib/EditorWindow.py --- a/Lib/idlelib/EditorWindow.py Mon Feb 03 13:58:31 2014 -0800 +++ b/Lib/idlelib/EditorWindow.py Sun Feb 09 08:07:39 2014 +0530 @@ -17,6 +17,7 @@ from idlelib import SearchDialog from idlelib import GrepDialog from idlelib import ReplaceDialog +from idlelib import ClipboardHistory from idlelib import PyParse from idlelib.configHandler import idleConf from idlelib import aboutDialog, textView, configDialog @@ -158,8 +159,9 @@ # older tk versions. text_options['tabstyle'] = 'wordprocessor' self.text = text = MultiCallCreator(Text)(text_frame, **text_options) + self._clipboard_history=[] self.top.focused_widget = self.text - + self.createmenubar() self.apply_bindings() @@ -194,6 +196,7 @@ text.bind("<>", self.find_selection_event) text.bind("<>", self.replace_event) text.bind("<>", self.goto_line_event) + text.bind("<>",self.clipboard_history) text.bind("<>",self.smart_backspace_event) text.bind("<>",self.newline_and_indent_event) text.bind("<>",self.smart_indent_event) @@ -558,6 +561,7 @@ def cut(self,event): self.text.event_generate("<>") + self._clipboard_history.insert(0,self.text.selection_get()) return "break" def copy(self,event): @@ -565,6 +569,7 @@ # There is no selection, so do nothing and maybe interrupt. return self.text.event_generate("<>") + self._clipboard_history.insert(0,self.text.selection_get()) return "break" def paste(self,event): @@ -641,7 +646,12 @@ return "break" text.mark_set("insert", "%d.0" % lineno) text.see("insert") - + + def clipboard_history(self,event): + ClipboardHistory.ClipboardHistory(self.text, + "Clipboard History", + self._clipboard_history) + def open_module(self, event=None): # XXX Shouldn't this be in IOBinding? try: