Implement ⌃Y for yanking last deletion

This commit is contained in:
Nathaniel Tagg
2012-08-11 11:16:29 -06:00
committed by Allan Odgaard
parent e495a6e9a3
commit 99ab4e6578
2 changed files with 27 additions and 8 deletions

View File

@@ -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:
{

View File

@@ -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;
};