lib/rbcurse/vieditable.rb in rbcurse-1.1.3 vs lib/rbcurse/vieditable.rb in rbcurse-1.1.4
- old
+ new
@@ -10,17 +10,18 @@
#def previous_row num=(($multiplier.nil? or $multiplier == 0) ? 1 : $multiplier)
require 'rbcurse/listeditable'
module ViEditable
include ListEditable
- #def ViEditable.vieditable_init
def vieditable_init
$log.debug " inside vieditable_init "
@editable = true
bind_key( ?C, :edit_line)
- bind_key( ?o, :insert_line)
- bind_key( ?O) { insert_line(@current_index-1) }
+ #bind_key( ?o, :insert_line)
+ #bind_key( ?O) { insert_line(@current_index-1) }
+ bind_key( ?o) { insert_line(@current_index+1) }
+ bind_key( ?O) { insert_line(@current_index) }
bind_key( ?D, :delete_eol)
bind_key( [?d, ?$], :delete_eol)
bind_key( [?d, ?d] , :delete_line )
bind_key( [?d, ?w], :delete_word )
bind_key( [?d, ?t], :delete_till )
@@ -33,29 +34,68 @@
bind_key( [?y, ?y] , :kill_ring_save )
bind_key( ?p, :yank ) # paste after this line
bind_key( ?P ) { yank(@current_index - 1) } # should be before this line
bind_key(?\w, :forward_word)
bind_key(?f, :forward_char)
+ bind_key(?\M-y, :yank_pop)
+ bind_key(?\M-w, :kill_ring_save)
end
+ ##
+ # Separate mappings for listboxes.
+ # Some methods don;'t make sense for listboxes and are crashing
+ # since not present for them. f was being overwritten, too.
+ # Sorry for duplication, need to clean this somehow.
+ def vieditable_init_listbox
+ $log.debug " inside vieditable_init_listbox "
+ @editable = true
+ bind_key( ?C, :edit_line)
+ bind_key( ?o) { insert_line(@current_index+1) }
+ bind_key( ?O) { insert_line(@current_index) }
+ #bind_key( ?D, :delete_eol)
+ #bind_key( [?d, ?$], :delete_eol)
+ bind_key( [?d, ?d] , :delete_line )
+ #bind_key( [?d, ?w], :delete_word )
+ #bind_key( [?d, ?t], :delete_till )
+ #bind_key( [?d, ?f], :delete_forward )
+ bind_key( ?\C-_ ) { @undo_handler.undo if @undo_handler }
+ bind_key( ?u ) { @undo_handler.undo if @undo_handler }
+ bind_key( ?\C-r ) { @undo_handler.redo if @undo_handler }
+ #bind_key( ?x, :delete_curr_char )
+ #bind_key( ?X, :delete_prev_char )
+ bind_key( [?y, ?y] , :kill_ring_save )
+ bind_key( ?p, :yank ) # paste after this line
+ bind_key( ?P ) { yank(@current_index - 1) } # should be before this line
+ bind_key(?\w, :forward_word)
+ #bind_key(?f, :forward_char)
+ bind_key(?\M-y, :yank_pop)
+ bind_key(?\C-y, :yank)
+ bind_key(?\M-w, :kill_ring_save)
+ end
+
##
# edit current or given line
+ # FIXME needs to fire handler 2010-05-23 11:40
def edit_line lineno=@current_index
line = @list[lineno]
prompt = "Edit: "
maxlen = 80
config={};
+ oldline = line.dup
config[:default] = line
ret, str = rbgetstr(@form.window, $error_message_row, $error_message_col, prompt, maxlen, config)
$log.debug " rbgetstr returned #{ret} , #{str} "
return if ret != 0
@list[lineno].replace(str)
+ fire_handler :CHANGE, InputDataEvent.new(0,oldline.length, self, :DELETE_LINE, lineno, oldline) # 2008-12-24 18:34
+ fire_handler :CHANGE, InputDataEvent.new(0,str.length, self, :INSERT_LINE, lineno, str)
@repaint_required = true
end
##
# insert a line
+ # FIXME needs to fire handler 2010-05-23 11:40
def insert_line lineno=@current_index
prompt = "Insert: "
maxlen = 80
#config={};
#config[:default] = line
@@ -63,9 +103,11 @@
ret, str = input_string prompt
#ret, str = rbgetstr(@form.window, @row+@height-1, @col+1, prompt, maxlen, config)
$log.debug " rbgetstr returned #{ret} , #{str} "
return if ret != 0
@list.insert lineno, str
+ ## added handler on 2010-05-23 11:46 - undo works - tested in testlistbox.rb
+ fire_handler :CHANGE, InputDataEvent.new(0,str.length, self, :INSERT_LINE, lineno, str)
@repaint_required = true
end
##
# common method to edit given string
# @param [String] string to edit/modify