Skip to content

Commit

Permalink
Merge pull request #70 from aerth/cut-lines2
Browse files Browse the repository at this point in the history
cut lines into clipboard
  • Loading branch information
zyedidia committed Apr 24, 2016
2 parents 31416df + b39d383 commit 43a69be
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
28 changes: 28 additions & 0 deletions cmd/micro/bindings.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"io/ioutil"
"os"
"strings"
"time"

"github.com/gdamore/tcell"
"github.com/mitchellh/go-homedir"
Expand Down Expand Up @@ -35,6 +36,7 @@ func InitBindings() {
"Redo": Redo,
"Copy": Copy,
"Cut": Cut,
"CutLine": CutLine,
"Paste": Paste,
"SelectAll": SelectAll,
"OpenFile": OpenFile,
Expand Down Expand Up @@ -218,6 +220,7 @@ func DefaultBindings() map[string]string {
"CtrlY": "Redo",
"CtrlC": "Copy",
"CtrlX": "Cut",
"CtrlK": "CutLine",
"CtrlV": "Paste",
"CtrlA": "SelectAll",
"Home": "Beginning",
Expand Down Expand Up @@ -435,16 +438,40 @@ func Redo(v *View) bool {
func Copy(v *View) bool {
if v.cursor.HasSelection() {
clipboard.WriteAll(v.cursor.GetSelection())
v.freshClip = true
}
return true
}

// AddCopy appends to the clipboard
func CutLine(v *View) bool {
v.cursor.SelectLine()
if v.freshClip == true {

if v.cursor.HasSelection() {
if clip, err := clipboard.ReadAll(); err != nil {
messenger.Error(err)
} else {
clipboard.WriteAll(clip + v.cursor.GetSelection())
}
}
} else if time.Since(v.lastCutTime)/time.Second > 10*time.Second || v.freshClip == false {
Copy(v)
}
v.freshClip = true
v.lastCutTime = time.Now()
v.cursor.DeleteSelection()
v.cursor.ResetSelection()
return true
}

// Cut the selection to the system clipboard
func Cut(v *View) bool {
if v.cursor.HasSelection() {
clipboard.WriteAll(v.cursor.GetSelection())
v.cursor.DeleteSelection()
v.cursor.ResetSelection()
v.freshClip = true
}
return true
}
Expand All @@ -459,6 +486,7 @@ func Paste(v *View) bool {
clip, _ := clipboard.ReadAll()
v.eh.Insert(v.cursor.Loc(), clip)
v.cursor.SetLoc(v.cursor.Loc() + Count(clip))
v.freshClip = false
return true
}

Expand Down
2 changes: 2 additions & 0 deletions cmd/micro/cursor.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ func (c *Cursor) DeleteSelection() {
if c.curSelection[0] > c.curSelection[1] {
c.v.eh.Remove(c.curSelection[1], c.curSelection[0])
c.SetLoc(c.curSelection[1])
} else if c.GetSelection() == "" {
return
} else {
c.v.eh.Remove(c.curSelection[0], c.curSelection[1])
c.SetLoc(c.curSelection[0])
Expand Down
7 changes: 7 additions & 0 deletions cmd/micro/view.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ type View struct {
// This is useful for detecting double and triple clicks
lastClickTime time.Time

// lastCutTime stores when the last ctrl+k was issued.
// It is used for clearing the clipboard to replace it with fresh cut lines.
lastCutTime time.Time

// freshClip returns true if the clipboard has never been pasted.
freshClip bool

// Was the last mouse event actually a double click?
// Useful for detecting triple clicks -- if a double click is detected
// but the last mouse event was actually a double click, it's a triple click
Expand Down

0 comments on commit 43a69be

Please sign in to comment.