Skip to content

Commit

Permalink
Fix kill ring appending (#11)
Browse files Browse the repository at this point in the history
  • Loading branch information
hrjakobsen authored Apr 13, 2023
1 parent 3468fbb commit 3db7d50
Showing 1 changed file with 50 additions and 39 deletions.
89 changes: 50 additions & 39 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -288,8 +288,9 @@ class EmacsHandler {
if (!command) return undefined;
}

if (!command.readOnly && !command.isYank)
if (!command.readOnly && !command.keepLastCommand) {
data.lastCommand = null;
}

var count = data.count || 1
if (data.count) data.count = 0;
Expand Down Expand Up @@ -717,49 +718,59 @@ EmacsHandler.addCommands({
view.dispatch(view.state.replaceSelection(""))
},
},
killLine: function (handler: EmacsHandler) {
handler.pushEmacsMark(null);
// don't delete the selection if it's before the cursor
handler.clearSelection();
commands.selectLineEnd(handler.view);
killLine: {
exec: function (handler: EmacsHandler) {
handler.pushEmacsMark(null);
// don't delete the selection if it's before the cursor
handler.clearSelection();
commands.selectLineEnd(handler.view);

var view = handler.view;
var state = view.state

var view = handler.view;
var state = view.state

var text: string[] = [];
var changes = handler.view.state.selection.ranges.map(function(range) {
var from = range.from;
var to = range.to;
var line = state.sliceDoc(from, to)
text.push(line)

// remove EOL if only whitespace remains after the cursor
if (/^\s*$/.test(line)) {
to += 1;
text.push("\n")
}
return {from, to, insert: ""}
})

if (handler.$data.lastCommand == "killLine")
killRing.append(text.join("\n"));
else
killRing.add(text.join("\n"));

view.dispatch({changes});
var text: string[] = [];
var changes = handler.view.state.selection.ranges.map(function(range) {
var from = range.from;
var to = range.to;
var line = state.sliceDoc(from, to)

// remove EOL if only whitespace remains after the cursor
if (/^\s*$/.test(line)) {
to += 1;
text.push("\n")
} else {
text.push(line)
}
return {from, to, insert: ""}
})
if (handler.$data.lastCommand == "killLine") {
killRing.append(text.join("\n"));
} else {
killRing.add(text.join("\n"));
}
handler.$data.lastCommand = "killLine";
view.dispatch({changes});
},
keepLastCommand: true
},
yank: function (handler: EmacsHandler) {
handler.onPaste(killRing.get());
handler.$data.lastCommand = "yank";
yank: {
exec: function (handler: EmacsHandler) {
handler.onPaste(killRing.get());
handler.$data.lastCommand = "yank";
},
keepLastCommand: true
},
yankRotate: function (handler: EmacsHandler) {
if (handler.$data.lastCommand != "yank")
return;
commands.undo(handler.view);
handler.$emacsMarkRing.pop(); // also undo recording mark
handler.onPaste(killRing.rotate());
handler.$data.lastCommand = "yank";
yankRotate: {
exec: function (handler: EmacsHandler) {
if (handler.$data.lastCommand != "yank")
return;
commands.undo(handler.view);
handler.$emacsMarkRing.pop(); // also undo recording mark
handler.onPaste(killRing.rotate());
handler.$data.lastCommand = "yank";
},
keepLastCommand: true
},
killRegion: {
exec: function (handler: EmacsHandler) {
Expand Down

0 comments on commit 3db7d50

Please sign in to comment.