Module: Amun::Behaviours::Erasing
- Included in:
- Emacs
- Defined in:
- lib/amun/behaviours/erasing.rb
Overview
erasing, killing and deleting text from buffer and Emacs keymap for it
Instance Method Summary collapse
- #backward_delete_char ⇒ Object
-
#backward_kill_word ⇒ Object
This should be bound to M-BACKSPACE or M-DEL but I think the terminal doesn’t send it So the implementation will remain there until we find a way to catch this key.
- #delete_char ⇒ Object
- #erasing_keymap_initialize ⇒ Object
- #forward_delete_char ⇒ Object
-
#kill_line ⇒ Object
TODO: should move text to kill ring.
-
#kill_word ⇒ Object
TODO: should move text to kill ring.
Instance Method Details
#backward_delete_char ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/amun/behaviours/erasing.rb', line 23 def backward_delete_char(*) return true if buffer.point.zero? buffer.point -= 1 buffer.slice!(buffer.point) true end |
#backward_kill_word ⇒ Object
This should be bound to M-BACKSPACE or M-DEL but I think the terminal doesn’t send it So the implementation will remain there until we find a way to catch this key
TODO: should move text to kill ring
59 60 61 62 63 64 |
# File 'lib/amun/behaviours/erasing.rb', line 59 def backward_kill_word(*) first_letter_backward = buffer.rindex(/\p{L}/, buffer.point) || 0 first_non_letter_before_word = buffer.rindex(/\P{L}/, first_letter_backward) || -1 buffer.slice!(first_non_letter_before_word + 1..buffer.point) true end |
#delete_char ⇒ Object
18 19 20 21 |
# File 'lib/amun/behaviours/erasing.rb', line 18 def delete_char(*) buffer.slice!(buffer.point) true end |
#erasing_keymap_initialize ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/amun/behaviours/erasing.rb', line 5 def erasing_keymap_initialize bind "\C-d", self, :delete_char # this doesn't work, check linux bind Curses::Key::BACKSPACE, self, :backward_delete_char # C-? is backspace on mac terminal for some reason bind "\C-?", self, :backward_delete_char bind Curses::Key::DC, self, :forward_delete_char bind "\C-k", self, :kill_line bind "\M-d", self, :kill_word end |
#forward_delete_char ⇒ Object
31 32 33 |
# File 'lib/amun/behaviours/erasing.rb', line 31 def forward_delete_char(*) delete_char end |
#kill_line ⇒ Object
TODO: should move text to kill ring
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/amun/behaviours/erasing.rb', line 36 def kill_line(*) if buffer[buffer.point] == "\n" buffer.slice!(buffer.point) return true end line_end = buffer.index(/$/, buffer.point) buffer.slice!(buffer.point, line_end - buffer.point) true end |
#kill_word ⇒ Object
TODO: should move text to kill ring
48 49 50 51 52 53 |
# File 'lib/amun/behaviours/erasing.rb', line 48 def kill_word(*) first_non_letter = buffer.index(/\P{L}/, buffer.point) || buffer.length word_beginning = buffer.index(/\p{L}/, first_non_letter) || buffer.length buffer.slice!(buffer.point, word_beginning - buffer.point) true end |