From 55b251ffee23d7d00c45e081a2481580b7b8f0ee Mon Sep 17 00:00:00 2001 From: Dmytro Maluka Date: Sun, 17 Mar 2024 16:39:47 +0100 Subject: [PATCH] Revert "command: Add capability to use relative numbers in goto (#2985)" This reverts commit ca3a9d0794a26ae18ad4f49399ff02b1e5be674a. --- internal/action/command.go | 47 +++++++++++--------------------------- runtime/help/commands.md | 8 +++---- 2 files changed, 16 insertions(+), 39 deletions(-) diff --git a/internal/action/command.go b/internal/action/command.go index 6448acdc..e241d687 100644 --- a/internal/action/command.go +++ b/internal/action/command.go @@ -707,34 +707,6 @@ func (h *BufPane) QuitCmd(args []string) { h.Quit() } -func convertLine(h *BufPane, line string) (int, error) { - lineNum := 0 - var err error - - // Check for special negative movement beginning from the end of the file - if strings.HasPrefix(line, "~") { - lineNum, err = strconv.Atoi(line[1:]) - if err != nil { - return 0, err - } - lineNum = h.Buf.LinesNum() + 1 - lineNum - } else { - lineNum, err = strconv.Atoi(line) - if err != nil { - return 0, err - } - - // Check for relative numbers - if strings.HasPrefix(line, "-") || strings.HasPrefix(line, "+") { - lineNum = h.Buf.GetActiveCursor().Y + 1 + lineNum - } - } - - lineNum = util.Clamp(lineNum-1, 0, h.Buf.LinesNum()-1) - - return lineNum, err -} - // GotoCmd is a command that will send the cursor to a certain // position in the buffer // For example: `goto line`, or `goto line:col` @@ -742,30 +714,37 @@ func (h *BufPane) GotoCmd(args []string) { if len(args) <= 0 { InfoBar.Error("Not enough arguments") } else { - line, col := 0, 0 - var err error h.RemoveAllMultiCursors() if strings.Contains(args[0], ":") { parts := strings.SplitN(args[0], ":", 2) - line, err = convertLine(h, parts[0]) + line, err := strconv.Atoi(parts[0]) if err != nil { InfoBar.Error(err) return } - col, err = strconv.Atoi(parts[1]) + col, err := strconv.Atoi(parts[1]) if err != nil { InfoBar.Error(err) return } + if line < 0 { + line = h.Buf.LinesNum() + 1 + line + } + line = util.Clamp(line-1, 0, h.Buf.LinesNum()-1) col = util.Clamp(col-1, 0, util.CharacterCount(h.Buf.LineBytes(line))) + h.GotoLoc(buffer.Loc{col, line}) } else { - line, err = convertLine(h, args[0]) + line, err := strconv.Atoi(args[0]) if err != nil { InfoBar.Error(err) return } + if line < 0 { + line = h.Buf.LinesNum() + 1 + line + } + line = util.Clamp(line-1, 0, h.Buf.LinesNum()-1) + h.GotoLoc(buffer.Loc{0, line}) } - h.GotoLoc(buffer.Loc{col, line}) } } diff --git a/runtime/help/commands.md b/runtime/help/commands.md index 3821e1ff..8bc4e8ab 100644 --- a/runtime/help/commands.md +++ b/runtime/help/commands.md @@ -31,11 +31,9 @@ quotes here but these are not necessary when entering the command in micro. * `quit`: quits micro. -* `goto 'line[:col]'`: Jumps to the given line (and optional column) number. - `line` can be prefixed with `+`, `-` or `~`. - +/- will perform relative jumps from the current position of the cursor - (e.g. +5 will jump 5 lines down), while ~ will perform a jump inward - from the end of the file (e.g. ~5 jumps to the 5th-last line in the file). +* `goto 'line'`: jumps to the given line number. A negative number can be + passed to jump inward from the end of the file; for example, -5 jumps + to the 5th-last line in the file. * `replace 'search' 'value' ['flags']`: This will replace `search` with `value`. The `flags` are optional. Possible flags are: