Detailed changes
@@ -19,6 +19,14 @@
revision = "3a7f37c7e22a8fedce430c4d340ad5c1351198f4"
version = "v0.7.1"
+[[projects]]
+ branch = "master"
+ digest = "1:38a84d9b4cf50b3e8eb2b54f218413ac163076e3a7763afe5fa15a4eb15fbda6"
+ name = "github.com/MichaelMure/gocui"
+ packages = ["."]
+ pruneopts = "UT"
+ revision = "d753c235dd8582d55e99bbb7f7fe453fb3fd3a19"
+
[[projects]]
digest = "1:897d91c431ce469d35a5e6030e60e617dccd9a0e95bdffa6a80594f5c5800d29"
name = "github.com/agnivade/levenshtein"
@@ -155,14 +163,6 @@
revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75"
version = "v1.0"
-[[projects]]
- branch = "master"
- digest = "1:114ecad51af93a73ae6781fd0d0bc28e52b433c852b84ab4b4c109c15e6c6b6d"
- name = "github.com/jroimartin/gocui"
- packages = ["."]
- pruneopts = "UT"
- revision = "c055c87ae801372cd74a0839b972db4f7697ae5f"
-
[[projects]]
digest = "1:c658e84ad3916da105a761660dcaeb01e63416c8ec7bc62256a9b411a05fcd67"
name = "github.com/mattn/go-colorable"
@@ -462,13 +462,13 @@
"github.com/99designs/gqlgen/graphql",
"github.com/99designs/gqlgen/graphql/introspection",
"github.com/99designs/gqlgen/handler",
+ "github.com/MichaelMure/gocui",
"github.com/cheekybits/genny/generic",
"github.com/dustin/go-humanize",
"github.com/fatih/color",
"github.com/go-test/deep",
"github.com/gorilla/mux",
"github.com/icrowley/fake",
- "github.com/jroimartin/gocui",
"github.com/phayes/freeport",
"github.com/pkg/errors",
"github.com/shurcooL/githubv4",
@@ -61,5 +61,5 @@
version = "0.7.1"
[[constraint]]
- name = "github.com/jroimartin/gocui"
+ name = "github.com/MichaelMure/gocui"
branch = "master"
@@ -8,8 +8,8 @@ import (
"github.com/MichaelMure/git-bug/cache"
"github.com/MichaelMure/git-bug/util/colors"
"github.com/MichaelMure/git-bug/util/text"
+ "github.com/MichaelMure/gocui"
"github.com/dustin/go-humanize"
- "github.com/jroimartin/gocui"
)
const bugTableView = "bugTableView"
@@ -3,7 +3,7 @@ package termui
import (
"io/ioutil"
- "github.com/jroimartin/gocui"
+ "github.com/MichaelMure/gocui"
)
const inputPopupView = "inputPopupView"
@@ -6,7 +6,7 @@ import (
"github.com/MichaelMure/git-bug/bug"
"github.com/MichaelMure/git-bug/cache"
- "github.com/jroimartin/gocui"
+ "github.com/MichaelMure/gocui"
)
const labelSelectView = "labelSelectView"
@@ -4,7 +4,7 @@ import (
"fmt"
"github.com/MichaelMure/git-bug/util/text"
- "github.com/jroimartin/gocui"
+ "github.com/MichaelMure/gocui"
)
const msgPopupView = "msgPopupView"
@@ -10,7 +10,7 @@ import (
"github.com/MichaelMure/git-bug/util/colors"
"github.com/MichaelMure/git-bug/util/git"
"github.com/MichaelMure/git-bug/util/text"
- "github.com/jroimartin/gocui"
+ "github.com/MichaelMure/gocui"
)
const showBugView = "showBugView"
@@ -5,7 +5,7 @@ import (
"github.com/MichaelMure/git-bug/cache"
"github.com/MichaelMure/git-bug/input"
"github.com/MichaelMure/git-bug/util/git"
- "github.com/jroimartin/gocui"
+ "github.com/MichaelMure/gocui"
"github.com/pkg/errors"
)
@@ -4,7 +4,11 @@
package gocui
-import "errors"
+import (
+ "errors"
+
+ "github.com/mattn/go-runewidth"
+)
const maxInt = int(^uint(0) >> 1)
@@ -55,7 +59,7 @@ func simpleEditor(v *View, key Key, ch rune, mod Modifier) {
// EditWrite writes a rune at the cursor position.
func (v *View) EditWrite(ch rune) {
v.writeRune(v.cx, v.cy, ch)
- v.MoveCursor(1, 0, true)
+ v.MoveCursor(runewidth.RuneWidth(ch), 0, true)
}
// EditDelete deletes a rune at the cursor position. back determines the
@@ -89,12 +93,12 @@ func (v *View) EditDelete(back bool) {
v.MoveCursor(-1, 0, true)
}
} else { // wrapped line
- v.deleteRune(len(v.viewLines[y-1].line)-1, v.cy-1)
- v.MoveCursor(-1, 0, true)
+ ch, _ := v.deleteRune(len(v.viewLines[y-1].line)-1, v.cy-1)
+ v.MoveCursor(0-runewidth.RuneWidth(ch), 0, true)
}
} else { // middle/end of the line
- v.deleteRune(v.cx-1, v.cy)
- v.MoveCursor(-1, 0, true)
+ ch, _ := v.deleteRune(v.cx-1, v.cy)
+ v.MoveCursor(0-runewidth.RuneWidth(ch), 0, true)
}
} else {
if x == len(v.viewLines[y].line) { // end of the line
@@ -275,19 +279,20 @@ func (v *View) writeRune(x, y int, ch rune) error {
// deleteRune removes a rune from the view's internal buffer, at the
// position corresponding to the point (x, y).
-func (v *View) deleteRune(x, y int) error {
+func (v *View) deleteRune(x, y int) (ch rune, err error) {
v.tainted = true
- x, y, err := v.realPosition(x, y)
+ x, y, err = v.realPosition(x, y)
if err != nil {
- return err
+ return 0, err
}
if x < 0 || y < 0 || y >= len(v.lines) || x >= len(v.lines[y]) {
- return errors.New("invalid point")
+ return 0, errors.New("invalid point")
}
+ chx := v.lines[y][x]
v.lines[y] = append(v.lines[y][:x], v.lines[y][x+1:]...)
- return nil
+ return chx.chr, nil
}
// mergeLines merges the lines "y" and "y+1" if possible.
@@ -10,6 +10,7 @@ import (
"io"
"strings"
+ "github.com/mattn/go-runewidth"
"github.com/nsf/termbox-go"
)
@@ -353,7 +354,7 @@ func (v *View) draw() error {
if err := v.setRune(x, y, c.chr, fgColor, bgColor); err != nil {
return err
}
- x++
+ x += runewidth.RuneWidth(c.chr)
}
y++
}