]> git.lizzy.rs Git - micro.git/blobdiff - cmd/micro/view.go
Removed duplicate paste code for OS-level paste
[micro.git] / cmd / micro / view.go
index b91805ee80d24846e587526adc01dc26a3f38773..c05d83344cea8d37dea84fd00ee24731720699c0 100644 (file)
@@ -27,8 +27,7 @@ type View struct {
        Cursor *Cursor
 
        // The topmost line, used for vertical scrolling
-       Topline    int
-       Bottomline int
+       Topline int
        // The leftmost column, used for horizontal scrolling
        leftCol int
 
@@ -292,7 +291,7 @@ func (v *View) GetSoftWrapLocation(vx, vy int) (int, int) {
        }
 
        screenX, screenY := 0, v.Topline
-       for lineN := v.Topline; lineN < v.Bottomline; lineN++ {
+       for lineN := v.Topline; lineN < v.Bottomline(); lineN++ {
                line := v.Buf.Line(lineN)
 
                colN := 0
@@ -323,10 +322,41 @@ func (v *View) GetSoftWrapLocation(vx, vy int) (int, int) {
        return 0, 0
 }
 
+func (v *View) Bottomline() int {
+       screenX, screenY := 0, 0
+       numLines := 0
+       for lineN := v.Topline; lineN < v.Topline+v.height; lineN++ {
+               line := v.Buf.Line(lineN)
+
+               colN := 0
+               for _, ch := range line {
+                       if screenX >= v.width-v.lineNumOffset {
+                               screenX = 0
+                               screenY++
+                       }
+
+                       if ch == '\t' {
+                               screenX += int(v.Buf.Settings["tabsize"].(float64)) - 1
+                       }
+
+                       screenX++
+                       colN++
+               }
+               screenX = 0
+               screenY++
+               numLines++
+
+               if screenY >= v.height {
+                       break
+               }
+       }
+       return numLines + v.Topline
+}
+
 // Relocate moves the view window so that the cursor is in view
 // This is useful if the user has scrolled far away, and then starts typing
 func (v *View) Relocate() bool {
-       height := v.Bottomline - v.Topline
+       height := v.Bottomline() - v.Topline
        ret := false
        cy := v.Cursor.Y
        scrollmargin := int(v.Buf.Settings["scrollmargin"].(float64))
@@ -451,18 +481,7 @@ func (v *View) HandleEvent(event tcell.Event) {
                        break
                }
 
-               leadingWS := GetLeadingWhitespace(v.Buf.Line(v.Cursor.Y))
-
-               if v.Cursor.HasSelection() {
-                       v.Cursor.DeleteSelection()
-                       v.Cursor.ResetSelection()
-               }
-               clip := e.Text()
-               clip = strings.Replace(clip, "\n", "\n"+leadingWS, -1)
-               v.Buf.Insert(v.Cursor.Loc, clip)
-               v.Cursor.Loc = v.Cursor.Loc.Move(Count(clip), v.Buf)
-               v.freshClip = false
-               messenger.Message("Pasted clipboard")
+               v.paste(e.Text())
 
                PostActionCall("Paste", v)
        case *tcell.EventMouse:
@@ -911,10 +930,6 @@ func (v *View) DisplayView() {
                        }
                }
        }
-       v.Bottomline = curLineN
-       if !v.Buf.Settings["softwrap"].(bool) {
-               v.Bottomline++
-       }
 }
 
 // DisplayCursor draws the current buffer's cursor to the screen