diff --git a/cmd/micro/actions.go b/cmd/micro/actions.go index 009f4bd8..c26b8496 100644 --- a/cmd/micro/actions.go +++ b/cmd/micro/actions.go @@ -852,7 +852,7 @@ func (v *View) Copy(usePlugin bool) bool { } if v.Cursor.HasSelection() { - clipboard.WriteAll(v.Cursor.GetSelection(), "clipboard") + v.Cursor.CopySelection("clipboard") v.freshClip = true messenger.Message("Copied selection") } @@ -903,7 +903,7 @@ func (v *View) Cut(usePlugin bool) bool { } if v.Cursor.HasSelection() { - clipboard.WriteAll(v.Cursor.GetSelection(), "clipboard") + v.Cursor.CopySelection("clipboard") v.Cursor.DeleteSelection() v.Cursor.ResetSelection() v.freshClip = true diff --git a/cmd/micro/cursor.go b/cmd/micro/cursor.go index a40aa9cf..8dc6bc5f 100644 --- a/cmd/micro/cursor.go +++ b/cmd/micro/cursor.go @@ -29,6 +29,13 @@ func (c *Cursor) Goto(b Cursor) { c.OrigSelection, c.CurSelection = b.OrigSelection, b.CurSelection } +// CopySelection copies the user's selection to either "primary" or "clipboard" +func (c *Cursor) CopySelection(target string) { + if c.HasSelection() { + clipboard.WriteAll(c.GetSelection(), target) + } +} + // ResetSelection resets the user's selection func (c *Cursor) ResetSelection() { c.CurSelection[0] = c.buf.Start() @@ -38,19 +45,11 @@ func (c *Cursor) ResetSelection() { // SetSelectionStart sets the start of the selection func (c *Cursor) SetSelectionStart(pos Loc) { c.CurSelection[0] = pos - // Copy to primary clipboard for linux - if c.HasSelection() { - clipboard.WriteAll(c.GetSelection(), "primary") - } } // SetSelectionEnd sets the end of the selection func (c *Cursor) SetSelectionEnd(pos Loc) { c.CurSelection[1] = pos - // Copy to primary clipboard for linux - if c.HasSelection() { - clipboard.WriteAll(c.GetSelection(), "primary") - } } // HasSelection returns whether or not the user has selected anything diff --git a/cmd/micro/view.go b/cmd/micro/view.go index 34e29939..1f13acc7 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -532,6 +532,7 @@ func (v *View) HandleEvent(event tcell.Event) { v.doubleClick = false v.Cursor.SelectLine() + v.Cursor.CopySelection("primary") } else { // Double click v.lastClickTime = time.Now() @@ -540,6 +541,7 @@ func (v *View) HandleEvent(event tcell.Event) { v.tripleClick = false v.Cursor.SelectWord() + v.Cursor.CopySelection("primary") } } else { v.doubleClick = false @@ -559,6 +561,7 @@ func (v *View) HandleEvent(event tcell.Event) { v.Cursor.AddWordToSelection() } else { v.Cursor.SetSelectionEnd(v.Cursor.Loc) + v.Cursor.CopySelection("primary") } } case tcell.Button2: @@ -579,6 +582,7 @@ func (v *View) HandleEvent(event tcell.Event) { if !v.doubleClick && !v.tripleClick { v.MoveToMouseClick(x, y) v.Cursor.SetSelectionEnd(v.Cursor.Loc) + v.Cursor.CopySelection("primary") } v.mouseReleased = true }