if clip, err := clipboard.Read(clipboard.ClipboardReg); err != nil {
InfoBar.Error(err)
} else {
- clipboard.Write(clip+string(h.Cursor.GetSelection()), clipboard.ClipboardReg)
+ clipboard.WriteMulti(clip+string(h.Cursor.GetSelection()), clipboard.ClipboardReg, h.Cursor.Num)
}
}
} else if time.Since(h.lastCutTime)/time.Second > 10*time.Second || h.freshClip == false {
// Paste whatever is in the system clipboard into the buffer
// Delete and paste if the user has a selection
func (h *BufPane) Paste() bool {
- clip, err := clipboard.Read(clipboard.ClipboardReg)
+ clip, err := clipboard.ReadMulti(clipboard.ClipboardReg, h.Cursor.Num)
if err != nil {
InfoBar.Error(err)
} else {
// PastePrimary pastes from the primary clipboard (only use on linux)
func (h *BufPane) PastePrimary() bool {
- clip, err := clipboard.Read(clipboard.PrimaryReg)
+ clip, err := clipboard.ReadMulti(clipboard.PrimaryReg, h.Cursor.Num)
if err != nil {
InfoBar.Error(err)
} else {
cursors := h.Buf.GetCursors()
success := true
for i, a := range actionfns {
+ innerSuccess := true
for j, c := range cursors {
if c == nil {
continue
h.Buf.SetCurCursor(c.Num)
h.Cursor = c
if i == 0 || (success && types[i-1] == '&') || (!success && types[i-1] == '|') || (types[i-1] == ',') {
- success = h.execAction(a, names[i], j)
+ innerSuccess = innerSuccess && h.execAction(a, names[i], j)
} else {
break
}
}
// if the action changed the current pane, update the reference
h = MainTab().CurPane()
+ success = innerSuccess
}
return true
}
"FindNext": true,
"FindPrevious": true,
"CopyLine": true,
+ "Copy": true,
"Cut": true,
"CutLine": true,
"DuplicateLine": true,
func (c *Cursor) CopySelection(target clipboard.Register) {
if c.HasSelection() {
if target != clipboard.PrimaryReg || c.buf.Settings["useprimary"].(bool) {
- clipboard.Write(string(c.GetSelection()), target)
+ clipboard.WriteMulti(string(c.GetSelection()), target, c.Num)
}
}
}
func (c multiClipboard) writeText(text string, r Register, num int) {
content := c[r]
- if content == nil || num >= cap(content) {
+ if content == nil {
content = make([]string, num+1, num+1)
+ c[r] = content
+ }
+
+ if num >= cap(content) {
+ newctnt := make([]string, num+1, num+1)
+ copy(newctnt, content)
+ content = newctnt
+ c[r] = content
}
content[num] = text