From 99ab4e65781e3ac1ec45b385ca58e23b413e798a Mon Sep 17 00:00:00 2001 From: Nathaniel Tagg Date: Sat, 11 Aug 2012 11:16:29 -0600 Subject: [PATCH] =?UTF-8?q?Implement=20=E2=8C=83Y=20for=20yanking=20last?= =?UTF-8?q?=20deletion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Frameworks/editor/src/editor.cc | 19 +++++++++++++++++-- Frameworks/editor/src/editor.h | 16 ++++++++++------ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/Frameworks/editor/src/editor.cc b/Frameworks/editor/src/editor.cc index 18fe9d79..e8e8df34 100644 --- a/Frameworks/editor/src/editor.cc +++ b/Frameworks/editor/src/editor.cc @@ -231,6 +231,7 @@ namespace ng set_clipboard(create_simple_clipboard()); set_find_clipboard(create_simple_clipboard()); set_replace_clipboard(create_simple_clipboard()); + set_yank_line_clipboard(create_simple_clipboard()); } editor_t::editor_t () : _buffer(dummy) @@ -736,9 +737,12 @@ namespace ng case kShiftRight: _selections = ng::extend(_buffer, _selections, kSelectionExtendToLineExclLF, layout); break; } - static action_t const deleteActions[] = { kDeleteBackward, kDeleteForward, kDeleteSubWordLeft, kDeleteSubWordRight, kDeleteWordBackward, kDeleteWordForward, kDeleteToBeginningOfLine, kDeleteToEndOfLine, kDeleteToBeginningOfParagraph, kDeleteToEndOfParagraph }; + static action_t const deleteActions[] = { kDeleteBackward, kDeleteForward }; + static action_t const yankActions[] = { kDeleteSubWordLeft, kDeleteSubWordRight, kDeleteWordBackward, kDeleteWordForward, kDeleteToBeginningOfLine, kDeleteToEndOfLine, kDeleteToBeginningOfParagraph, kDeleteToEndOfParagraph }; if(oak::contains(beginof(deleteActions), endof(deleteActions), action)) action = kDeleteSelection; + else if(oak::contains(beginof(yankActions), endof(yankActions), action)) + action = kCopySelectionToYankPboard; switch(action) { @@ -837,6 +841,12 @@ namespace ng } break; + case kCopySelectionToYankPboard: + { + yank_line_clipboard()->push_back(copy(_buffer, _selections)); + } + // continue + case kDeleteSelection: { indent_helper_t indent_helper(*this, _buffer); @@ -894,7 +904,12 @@ namespace ng case kPasteNext: _selections = paste(_buffer, _selections, _snippets, clipboard()->next()); break; case kPasteWithoutReindent: insert(clipboard()->current()->content()); break; - case kYank: insert("TODO"); break; + case kYank: + { + if(clipboard_t::entry_ptr findEntry = yank_line_clipboard()->current()) + insert(findEntry->content()); + } + break; case kInsertTab: { diff --git a/Frameworks/editor/src/editor.h b/Frameworks/editor/src/editor.h index e6b4ba5e..c4b64dbf 100644 --- a/Frameworks/editor/src/editor.h +++ b/Frameworks/editor/src/editor.h @@ -95,6 +95,7 @@ namespace ng kCopy, kCopySelectionToFindPboard, kCopySelectionToReplacePboard, + kCopySelectionToYankPboard, kPaste, kPastePrevious, kPasteNext, @@ -179,13 +180,15 @@ namespace ng // = Clipboards = // ============== - clipboard_ptr clipboard () const { ASSERT(_clipboard); return _clipboard; } - clipboard_ptr find_clipboard () const { ASSERT(_find_clipboard); return _find_clipboard; } - clipboard_ptr replace_clipboard () const { ASSERT(_replace_clipboard); return _replace_clipboard; } + clipboard_ptr clipboard () const { ASSERT(_clipboard); return _clipboard; } + clipboard_ptr find_clipboard () const { ASSERT(_find_clipboard); return _find_clipboard; } + clipboard_ptr replace_clipboard () const { ASSERT(_replace_clipboard); return _replace_clipboard; } + clipboard_ptr yank_line_clipboard () const { ASSERT(_yank_line_clipboard); return _yank_line_clipboard; } - void set_clipboard (clipboard_ptr cb) { _clipboard = cb; } - void set_find_clipboard (clipboard_ptr cb) { _find_clipboard = cb; } - void set_replace_clipboard (clipboard_ptr cb) { _replace_clipboard = cb; } + void set_clipboard (clipboard_ptr cb) { _clipboard = cb; } + void set_find_clipboard (clipboard_ptr cb) { _find_clipboard = cb; } + void set_replace_clipboard (clipboard_ptr cb) { _replace_clipboard = cb; } + void set_yank_line_clipboard (clipboard_ptr cb) { _yank_line_clipboard = cb; } private: void setup (); @@ -262,6 +265,7 @@ namespace ng clipboard_ptr _clipboard; clipboard_ptr _find_clipboard; clipboard_ptr _replace_clipboard; + clipboard_ptr _yank_line_clipboard; document::document_ptr _document; };