lib/ver/entry.rb in ver-2010.02 vs lib/ver/entry.rb in ver-2010.08

- old
+ new

@@ -11,28 +11,32 @@ class Entry < Tk::Tile::Entry space, word = /[^[:alnum:]]+/, /[[:alnum:]]/ FORWARD_WORD = /#{space}+#{word}|#{word}+#{space}+#{word}/ BACKWARD_WORD = /#{word}+/ + def events + major_mode.event_history + end + + def event + major_mode.event_history.last + end + ## Maintenance def style style = cget(:style) style.flatten.first if style end - def quit(event = nil) - VER.exit + def message(*args) + VER.message(*args) end - def message(string) - self.value = string + def error(*args) + VER.warn(*args) end - def error(string) - self.value = string - end - def insert(*args) super Tk::Event.generate(self, '<<Inserted>>') Tk::Event.generate(self, '<<Modified>>') end @@ -47,134 +51,143 @@ def delete(*args) super Tk::Event.generate(self, '<<Deleted>>') Tk::Event.generate(self, '<<Modified>>') end - alias kill delete # nobody wants to copy that way, right? ;) + def kill(*args) + Clipboard.dwim = get(*args) + delete(*args) + end + def cursor=(pos) selection_clear super Tk::Event.generate(self, '<<Movement>>') end ## Insert - def insert_string(event) + def insert_string(event = self.event) insert(cursor, event.unicode) end # Insert X selection at cursor position - def insert_selection(event) - insert(cursor, Tk::Selection.get) + def insert_selection + insert(cursor, Tk::Selection.get(type: 'UTF8_STRING')) end # Insert a literal tab character at cursor position - def insert_tab(event) + def insert_tab insert(cursor, "\t") end - def transpose_chars(event) + def paste + return unless content = VER::Clipboard.get + insert(cursor, content) + end + + def transpose_chars char = get[cursor] delete(cursor) insert(cursor - 1, char) end ## Delete - def delete_motion(motion) + def deleting(motion) delete(*virtual_movement(motion)) end - def kill_motion(motion) + def killing(motion) kill(*virtual_movement(motion)) end - def kill_prev_char(event) - kill_motion :prev_char + def delete_prev_char + deleting :prev_char end - def kill_next_char(event) - kill_motion :next_char + def delete_next_char + deleting :next_char end - def kill_prev_word(event) - kill_motion :prev_word + def delete_prev_word + deleting :prev_word end - def kill_next_word(event) - kill_motion :next_word + def delete_next_word + deleting :next_word end - def kill_end_of_line(event) - kill_motion :end_of_line + def kill_end_of_line + killing :end_of_line end ## Selection - def sel_prev_char(event) + def sel_prev_char # bind TEntry <Shift-Key-Left> { ttk::entry::Extend %W prevchar } Tk.execute_only('ttk::entry::Extend', self, :prevchar) end - def sel_next_char(event) + def sel_next_char # bind TEntry <Shift-Key-Right> { ttk::entry::Extend %W nextchar } Tk.execute_only('ttk::entry::Extend', self, :nextchar) end - def sel_prev_word(event) + def sel_prev_word # bind TEntry <Shift-Control-Key-Left> { ttk::entry::Extend %W prevword } Tk.excute_only('ttk::entry::Extend', self, :prevword) end - def sel_next_word(event) + def sel_next_word # bind TEntry <Shift-Control-Key-Right> { ttk::entry::Extend %W nextword } Tk.execute_only('ttk::entry::Extend', self, :nextword) end - def sel_start_of_line(event) + def sel_start_of_line # bind TEntry <Shift-Key-Home> { ttk::entry::Extend %W home } Tk.execute_only('ttk::entry::Extend', self, :home) end - def sel_end_of_line(event) + def sel_end_of_line # bind TEntry <Shift-Key-End> { ttk::entry::Extend %W end } Tk.execute_only('ttk::entry::Extend', self, :end) end ## Movement # Move to the start of the current line. - def start_of_line(event) + def start_of_line self.cursor = 0 end # Move to the end of the entry line. - def end_of_line(event) + def end_of_line self.cursor = :end end # Move forward a character. - def next_char(event) + def next_char self.cursor += 1 end # Move back a character. - def prev_char(event) + def prev_char self.cursor -= 1 end # Move forward to the end of the next word. # Words are composed of alphanumeric characters (letters and digits). - def next_word(event) + def next_word return unless md = get.match(FORWARD_WORD, cursor) self.cursor = md.offset(0).last end # Move back to the start of the current or previous word. # Words are composed of alphanumeric characters (letters and digits). - def prev_word(event) + def prev_word line = get.reverse pos = get.size - cursor return unless md = line.match(BACKWARD_WORD, pos) self.cursor = (line.size - md.offset(0).last) @@ -214,24 +227,22 @@ def end_of_history @history_index = 0 self.value = @history[@history_index] end - ## Asking questions - # Accept the line regardless of where the cursor is. # If this line is non-empty, it will be added to the history list. # If the line is a modified history line, the history line is restored to # its original state. - def accept_line(event) + def accept_line line = get Tk::Event.generate(self, '<<AcceptLine>>') delete(0, :end) end - def virtual_movement(name, count = 1) + def virtual_movement(name, *args) pos = cursor - __send__(name, count) + __send__(name, *args) mark = cursor self.cursor = pos return [pos, mark].sort rescue => ex VER.error(ex)