From bbcd33d9fda0ebd720082ed25d3383916aaad41c Mon Sep 17 00:00:00 2001 From: Camille Scholtz Date: Fri, 20 May 2016 17:34:20 +0200 Subject: [PATCH 1/5] Add a bit of "padding" to relocate --- cmd/micro/view.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/micro/view.go b/cmd/micro/view.go index 078177b3..6b33f6d2 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -206,11 +206,11 @@ func (v *View) Relocate() bool { ret := false cy := v.Cursor.y if cy < v.Topline { - v.Topline = cy + v.Topline = cy - 4 ret = true } if cy > v.Topline+v.height-1 { - v.Topline = cy - v.height + 1 + v.Topline = cy - v.height + 5 ret = true } From 096221fd0ebb6d4b640a957581104d8466bdec3d Mon Sep 17 00:00:00 2001 From: Camille Scholtz Date: Fri, 20 May 2016 17:43:26 +0200 Subject: [PATCH 2/5] Add padding to relocate func (fixes weird scrolling behavior) --- cmd/micro/command.go | 2 +- cmd/micro/search.go | 2 +- cmd/micro/view.go | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cmd/micro/command.go b/cmd/micro/command.go index 1e41a7b2..f38edf38 100644 --- a/cmd/micro/command.go +++ b/cmd/micro/command.go @@ -149,7 +149,7 @@ func HandleCommand(input string, view *View) { if strings.Contains(flags, "c") { // The 'check' flag was used Search(search, view, true) - view.Relocate() + view.Relocate(0) Redraw(view) choice, canceled := messenger.YesNoPrompt("Perform replacement? (y,n)") if canceled { diff --git a/cmd/micro/search.go b/cmd/micro/search.go index 227e3af9..edabfbf9 100644 --- a/cmd/micro/search.go +++ b/cmd/micro/search.go @@ -121,7 +121,7 @@ func Search(searchStr string, v *View, down bool) { v.Cursor.curSelection[0] = charPos + match[0] v.Cursor.curSelection[1] = charPos + match[1] v.Cursor.x, v.Cursor.y = FromCharPos(charPos+match[1]-1, v.Buf) - if v.Relocate() { + if v.Relocate(4) { v.matches = Match(v) } lastSearch = searchStr diff --git a/cmd/micro/view.go b/cmd/micro/view.go index 6b33f6d2..bb3d05c7 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -196,21 +196,21 @@ func (v *View) ReOpen() { v.Buf = buf v.matches = Match(v) v.Cursor.Relocate() - v.Relocate() + v.Relocate(0) } } // 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 { +func (v *View) Relocate(x int) bool { ret := false cy := v.Cursor.y if cy < v.Topline { - v.Topline = cy - 4 + v.Topline = cy - x ret = true } if cy > v.Topline+v.height-1 { - v.Topline = cy - v.height + 5 + v.Topline = cy - v.height + 1 + x ret = true } @@ -378,7 +378,7 @@ func (v *View) HandleEvent(event tcell.Event) { } if relocate { - v.Relocate() + v.Relocate(0) } if settings["syntax"].(bool) { v.matches = Match(v) From 116b247439cbda6f1f1ceeb9707ee6a6af720368 Mon Sep 17 00:00:00 2001 From: Camille Scholtz Date: Fri, 20 May 2016 19:44:16 +0200 Subject: [PATCH 3/5] Add scrollmargin option, rename scrollSpeed to scrollspeed for consistency, make help.md more consistent (replaced some spaces with tabs) --- cmd/micro/command.go | 3 +- cmd/micro/search.go | 3 +- cmd/micro/settings.go | 3 +- cmd/micro/view.go | 18 +++--- runtime/help/help.md | 134 ++++++++++++++++++++++-------------------- 5 files changed, 86 insertions(+), 75 deletions(-) diff --git a/cmd/micro/command.go b/cmd/micro/command.go index f38edf38..00badd61 100644 --- a/cmd/micro/command.go +++ b/cmd/micro/command.go @@ -149,7 +149,8 @@ func HandleCommand(input string, view *View) { if strings.Contains(flags, "c") { // The 'check' flag was used Search(search, view, true) - view.Relocate(0) + scrollmargin := int(settings["scrollmargin"].(float64)) + view.Relocate(scrollmargin) Redraw(view) choice, canceled := messenger.YesNoPrompt("Perform replacement? (y,n)") if canceled { diff --git a/cmd/micro/search.go b/cmd/micro/search.go index edabfbf9..af5ceefd 100644 --- a/cmd/micro/search.go +++ b/cmd/micro/search.go @@ -121,7 +121,8 @@ func Search(searchStr string, v *View, down bool) { v.Cursor.curSelection[0] = charPos + match[0] v.Cursor.curSelection[1] = charPos + match[1] v.Cursor.x, v.Cursor.y = FromCharPos(charPos+match[1]-1, v.Buf) - if v.Relocate(4) { + scrollmargin := int(settings["scrollmargin"].(float64)) + if v.Relocate(scrollmargin) { v.matches = Match(v) } lastSearch = searchStr diff --git a/cmd/micro/settings.go b/cmd/micro/settings.go index bc0d4d17..8827db25 100644 --- a/cmd/micro/settings.go +++ b/cmd/micro/settings.go @@ -81,7 +81,8 @@ func DefaultSettings() map[string]interface{} { "tabsToSpaces": false, "ruler": true, "statusline": true, - "scrollSpeed": float64(2), + "scrollmargin": float64(3), + "scrollspeed": float64(2), } } diff --git a/cmd/micro/view.go b/cmd/micro/view.go index bb3d05c7..22a304c3 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -205,11 +205,14 @@ func (v *View) ReOpen() { func (v *View) Relocate(x int) bool { ret := false cy := v.Cursor.y - if cy < v.Topline { + if cy < v.Topline+x && cy > x-1 { v.Topline = cy - x ret = true + } else if cy < v.Topline { + v.Topline = cy + ret = true } - if cy > v.Topline+v.height-1 { + if cy > v.Topline+v.height-1-x { v.Topline = cy - v.height + 1 + x ret = true } @@ -257,6 +260,7 @@ func (v *View) HandleEvent(event tcell.Event) { // This bool determines whether the view is relocated at the end of the function // By default it's true because most events should cause a relocate relocate := true + scrollmargin := int(settings["scrollmargin"].(float64)) switch e := event.(type) { case *tcell.EventResize: @@ -368,17 +372,17 @@ func (v *View) HandleEvent(event tcell.Event) { } case tcell.WheelUp: // Scroll up - scrollSpeed := int(settings["scrollSpeed"].(float64)) - v.ScrollUp(scrollSpeed) + scrollspeed := int(settings["scrollspeed"].(float64)) + v.ScrollUp(scrollspeed) case tcell.WheelDown: // Scroll down - scrollSpeed := int(settings["scrollSpeed"].(float64)) - v.ScrollDown(scrollSpeed) + scrollspeed := int(settings["scrollspeed"].(float64)) + v.ScrollDown(scrollspeed) } } if relocate { - v.Relocate(0) + v.Relocate(scrollmargin) } if settings["syntax"].(bool) { v.matches = Match(v) diff --git a/runtime/help/help.md b/runtime/help/help.md index cf99b24d..bd074738 100644 --- a/runtime/help/help.md +++ b/runtime/help/help.md @@ -63,8 +63,8 @@ following in the `bindings.json` file. ```json { - "CtrlY": "Undo", - "CtrlZ": "Redo" + "CtrlY": "Undo", + "CtrlZ": "Redo" } ``` @@ -72,52 +72,52 @@ Here are the defaults: ```json { - "Up": "CursorUp", - "Down": "CursorDown", - "Right": "CursorRight", - "Left": "CursorLeft", - "ShiftUp": "SelectUp", - "ShiftDown": "SelectDown", - "ShiftLeft": "SelectLeft", - "ShiftRight": "SelectRight", - "AltLeft": "WordLeft", - "AltRight": "WordRight", - "AltShiftRight": "SelectWordRight", - "AltShiftLeft": "SelectWordLeft", - "CtrlLeft": "StartOfLine", - "CtrlRight": "EndOfLine", - "CtrlShiftLeft": "SelectToStartOfLine", - "CtrlShiftRight": "SelectToEndOfLine", - "CtrlUp": "CursorStart", - "CtrlDown": "CursorEnd", - "CtrlShiftUp": "SelectToStart", - "CtrlShiftDown": "SelectToEnd", - "Enter": "InsertEnter", - "Space": "InsertSpace", - "Backspace": "Backspace", - "Backspace2": "Backspace", - "Tab": "InsertTab", - "CtrlO": "OpenFile", - "CtrlS": "Save", - "CtrlF": "Find", - "CtrlN": "FindNext", - "CtrlP": "FindPrevious", - "CtrlZ": "Undo", - "CtrlY": "Redo", - "CtrlC": "Copy", - "CtrlX": "Cut", - "CtrlK": "CutLine", - "CtrlD": "DuplicateLine", - "CtrlV": "Paste", - "CtrlA": "SelectAll", - "Home": "Start", - "End": "End", - "PgUp": "PageUp", - "PgDn": "PageDown", - "CtrlU": "HalfPageUp", - "CtrlD": "HalfPageDown", - "CtrlR": "ToggleRuler", - "Delete": "Delete" + "Up": "CursorUp", + "Down": "CursorDown", + "Right": "CursorRight", + "Left": "CursorLeft", + "ShiftUp": "SelectUp", + "ShiftDown": "SelectDown", + "ShiftLeft": "SelectLeft", + "ShiftRight": "SelectRight", + "AltLeft": "WordLeft", + "AltRight": "WordRight", + "AltShiftRight": "SelectWordRight", + "AltShiftLeft": "SelectWordLeft", + "CtrlLeft": "StartOfLine", + "CtrlRight": "EndOfLine", + "CtrlShiftLeft": "SelectToStartOfLine", + "CtrlShiftRight": "SelectToEndOfLine", + "CtrlUp": "CursorStart", + "CtrlDown": "CursorEnd", + "CtrlShiftUp": "SelectToStart", + "CtrlShiftDown": "SelectToEnd", + "Enter": "InsertEnter", + "Space": "InsertSpace", + "Backspace": "Backspace", + "Backspace2": "Backspace", + "Tab": "InsertTab", + "CtrlO": "OpenFile", + "CtrlS": "Save", + "CtrlF": "Find", + "CtrlN": "FindNext", + "CtrlP": "FindPrevious", + "CtrlZ": "Undo", + "CtrlY": "Redo", + "CtrlC": "Copy", + "CtrlX": "Cut", + "CtrlK": "CutLine", + "CtrlD": "DuplicateLine", + "CtrlV": "Paste", + "CtrlA": "SelectAll", + "Home": "Start", + "End": "End", + "PgUp": "PageUp", + "PgDn": "PageDown", + "CtrlU": "HalfPageUp", + "CtrlD": "HalfPageDown", + "CtrlR": "ToggleRuler", + "Delete": "Delete" } ``` @@ -160,18 +160,18 @@ Here are the options that you can set: default value: `default` Note that the default colorschemes (default, solarized, and solarized-tc) - are not located in configDir, because they are embedded in the micro binary + are not located in configDir, because they are embedded in the micro binary - The colorscheme can be selected from all the files in the - ~/.config/micro/colorschemes/ directory. Micro comes by default with three - colorschemes: + The colorscheme can be selected from all the files in the + ~/.config/micro/colorschemes/ directory. Micro comes by default with three + colorschemes: - * default: this is the default colorscheme. - * solarized: this is the solarized colorscheme (used in the screenshot). - You should have the solarized color palette in your terminal to use it. - * solarized-tc: this is the solarized colorscheme for true color, just - make sure your terminal supports true color before using it and that the - MICRO_TRUECOLOR environment variable is set to 1 before starting micro. + * default: this is the default colorscheme. + * solarized: this is the solarized colorscheme (used in the screenshot). + You should have the solarized color palette in your terminal to use it. + * solarized-tc: this is the solarized colorscheme for true color, just + make sure your terminal supports true color before using it and that the + MICRO_TRUECOLOR environment variable is set to 1 before starting micro. * `tabsize`: sets the tab size to `option` @@ -197,17 +197,21 @@ Here are the options that you can set: * `autoindent`: when creating a new line use the same indentation as the previous line - default value: `on` + default value: `on` * `ruler`: display line numbers - default value: `on` + default value: `on` * `statusline`: display the status line at the bottom of the screen - default value: `on` + default value: `on` -* `scrollSpeed`: amount of lines to scroll +* `scrollmargin`: amount of lines you would like to see above and below the cursor + + default value: `3` + +* `scrollspeed`: amount of lines to scroll default value: `2` @@ -218,15 +222,15 @@ Default plugin options: * `linter`: lint languages on save (supported languages are C, D, Go, Java, Javascript, Lua). Provided by the `linter` plugin. - default value: `on` + default value: `on` * `goimports`: Run goimports on save. Provided by the `go` plugin. - default value: `off` + default value: `off` * `gofmt`: Run gofmt on save. Provided by the `go` plugin. - default value: `on` + default value: `on` Any option you set in the editor will be saved to the file ~/.config/micro/settings.json so, in effect, your configuration file will be From 9791f192f8bff3a30bad6b4fae531a439d24c6e8 Mon Sep 17 00:00:00 2001 From: Camille Scholtz Date: Fri, 20 May 2016 19:46:18 +0200 Subject: [PATCH 4/5] Move scrollmargin declaration --- cmd/micro/view.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/micro/view.go b/cmd/micro/view.go index 22a304c3..cc39d6d7 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -260,7 +260,6 @@ func (v *View) HandleEvent(event tcell.Event) { // This bool determines whether the view is relocated at the end of the function // By default it's true because most events should cause a relocate relocate := true - scrollmargin := int(settings["scrollmargin"].(float64)) switch e := event.(type) { case *tcell.EventResize: @@ -382,6 +381,7 @@ func (v *View) HandleEvent(event tcell.Event) { } if relocate { + scrollmargin := int(settings["scrollmargin"].(float64)) v.Relocate(scrollmargin) } if settings["syntax"].(bool) { From 52f1be572582c923e9a7ecc7a7d002d894115965 Mon Sep 17 00:00:00 2001 From: Camille Scholtz Date: Fri, 20 May 2016 20:06:01 +0200 Subject: [PATCH 5/5] simplify scrollmargins --- cmd/micro/command.go | 3 +-- cmd/micro/search.go | 3 +-- cmd/micro/view.go | 16 ++++++++-------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/cmd/micro/command.go b/cmd/micro/command.go index 00badd61..1e41a7b2 100644 --- a/cmd/micro/command.go +++ b/cmd/micro/command.go @@ -149,8 +149,7 @@ func HandleCommand(input string, view *View) { if strings.Contains(flags, "c") { // The 'check' flag was used Search(search, view, true) - scrollmargin := int(settings["scrollmargin"].(float64)) - view.Relocate(scrollmargin) + view.Relocate() Redraw(view) choice, canceled := messenger.YesNoPrompt("Perform replacement? (y,n)") if canceled { diff --git a/cmd/micro/search.go b/cmd/micro/search.go index af5ceefd..227e3af9 100644 --- a/cmd/micro/search.go +++ b/cmd/micro/search.go @@ -121,8 +121,7 @@ func Search(searchStr string, v *View, down bool) { v.Cursor.curSelection[0] = charPos + match[0] v.Cursor.curSelection[1] = charPos + match[1] v.Cursor.x, v.Cursor.y = FromCharPos(charPos+match[1]-1, v.Buf) - scrollmargin := int(settings["scrollmargin"].(float64)) - if v.Relocate(scrollmargin) { + if v.Relocate() { v.matches = Match(v) } lastSearch = searchStr diff --git a/cmd/micro/view.go b/cmd/micro/view.go index cc39d6d7..b8aacbb8 100644 --- a/cmd/micro/view.go +++ b/cmd/micro/view.go @@ -196,24 +196,25 @@ func (v *View) ReOpen() { v.Buf = buf v.matches = Match(v) v.Cursor.Relocate() - v.Relocate(0) + v.Relocate() } } // 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(x int) bool { +func (v *View) Relocate() bool { ret := false cy := v.Cursor.y - if cy < v.Topline+x && cy > x-1 { - v.Topline = cy - x + scrollmargin := int(settings["scrollmargin"].(float64)) + if cy < v.Topline+scrollmargin && cy > scrollmargin-1 { + v.Topline = cy - scrollmargin ret = true } else if cy < v.Topline { v.Topline = cy ret = true } - if cy > v.Topline+v.height-1-x { - v.Topline = cy - v.height + 1 + x + if cy > v.Topline+v.height-1-scrollmargin { + v.Topline = cy - v.height + 1 + scrollmargin ret = true } @@ -381,8 +382,7 @@ func (v *View) HandleEvent(event tcell.Event) { } if relocate { - scrollmargin := int(settings["scrollmargin"].(float64)) - v.Relocate(scrollmargin) + v.Relocate() } if settings["syntax"].(bool) { v.matches = Match(v)