Skip to content

Commit

Permalink
More desired column fixes. Re #8
Browse files Browse the repository at this point in the history
  • Loading branch information
nosami committed May 2, 2017
1 parent 3808b1a commit a8e3d07
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 13 deletions.
2 changes: 1 addition & 1 deletion XSVim.Tests/KeyParsing.fs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ open NUnit.Framework
module ``Key parsing tests`` =
let test keys =
let keys = [for c in keys -> c.ToString()]
let state = { keys=keys; mode=NormalMode; visualStartOffset=0; findCharCommand=None; lastAction=[]; clipboard=""; desiredColumn=0 }
let state = { keys=keys; mode=NormalMode; visualStartOffset=0; findCharCommand=None; lastAction=[]; clipboard=""; desiredColumn=None}
let action, _state = Vim.parseKeys state
let first = action.Head
first.repeat, first.commandType, first.textObject
Expand Down
4 changes: 4 additions & 0 deletions XSVim.Tests/Movement.fs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ module ``Movement tests`` =
let ``Move down to last column``() =
assertText "12345$6\n123\n123456" "j" "123456\n123$\n123456"

[<Test>]
let ``Move across then down``() =
assertText "1$2\n12\n" "lj" "12\n12$\n"

[<Test>]
let ``Move ten right``() =
assertText "a$bcdefghijkl" "10l" "abcdefghijk$l"
2 changes: 1 addition & 1 deletion XSVim.Tests/TestHelpers.fs
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ module TestHelpers =
editor.CaretOffset <- caret-1
//editor.Caret.UpdateCaretOffset()
let plugin = new XSVim()
let state = { keys=[]; mode=NormalMode; visualStartOffset=0; findCharCommand=None; lastAction=[]; clipboard=""; desiredColumn=0 }
let state = { keys=[]; mode=NormalMode; visualStartOffset=0; findCharCommand=None; lastAction=[]; clipboard=""; desiredColumn=None }
let newState =
keys |> Seq.fold(fun state c ->
let descriptor = KeyDescriptor.FromGtk(Gdk.Key.a (* important? *), c, Gdk.ModifierType.None)
Expand Down
2 changes: 1 addition & 1 deletion XSVim/Properties/AddinInfo.fs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ open MonoDevelop
[<assembly:Addin (
"XSVim",
Namespace = "XSVim",
Version = "0.16.1"
Version = "0.16.2"
)>]

[<assembly:AddinName ("Vim")>]
Expand Down
29 changes: 19 additions & 10 deletions XSVim/XSVim.fs
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ type VimState = {
findCharCommand: VimAction option // f,F,t or T command to be repeated with ;
lastAction: VimAction list // used by . command to repeat the last action
clipboard: string
desiredColumn: int
desiredColumn: int option
}

[<AutoOpen>]
Expand Down Expand Up @@ -230,8 +230,9 @@ module VimHelpers =
if editor.CaretLine > DocumentLocation.MinLine then
let column =
let line = editor.GetLine (editor.CaretLine - 1)
if vimState.desiredColumn > editor.CaretColumn && vimState.desiredColumn <= line.Length then
vimState.desiredColumn
let desiredColumn = vimState.desiredColumn |> Option.defaultValue editor.CaretColumn
if desiredColumn <= line.Length then
desiredColumn
else
line.Length

Expand All @@ -243,8 +244,9 @@ module VimHelpers =
if editor.CaretLine < editor.LineCount then
let column =
let line = editor.GetLine (editor.CaretLine + 1)
if vimState.desiredColumn > editor.CaretColumn && vimState.desiredColumn <= line.Length then
vimState.desiredColumn
let desiredColumn = vimState.desiredColumn |> Option.defaultValue editor.CaretColumn
if desiredColumn <= line.Length then
desiredColumn
else
line.Length

Expand Down Expand Up @@ -426,11 +428,18 @@ module Vim =
setSelection vimState editor command start finish
| _ -> ()
let newState =
match command, vimState.lastAction with
match command, vimState.desiredColumn with
// don't change desired column if we already started moving up or down
| MoveUpOrDown, [ MoveUpOrDown ] -> vimState
| _ -> { vimState with desiredColumn = editor.CaretColumn }
editor.CaretOffset <- finish
| MoveUpOrDown, Some _c ->
editor.CaretOffset <- finish
vimState
| MoveUpOrDown, None ->
let res = { vimState with desiredColumn = Some editor.CaretColumn }
editor.CaretOffset <- finish
res
| _ ->
editor.CaretOffset <- finish
{ vimState with desiredColumn = Some editor.CaretColumn }
newState

| Delete -> delete vimState start finish
Expand Down Expand Up @@ -776,7 +785,7 @@ type XSVim() =

override x.Initialize() =
if not (editorStates.ContainsKey x.Editor.FileName) then
editorStates.Add(x.Editor.FileName, { keys=[]; mode=NormalMode; visualStartOffset=0; findCharCommand=None; lastAction=[]; clipboard=""; desiredColumn=0 })
editorStates.Add(x.Editor.FileName, { keys=[]; mode=NormalMode; visualStartOffset=0; findCharCommand=None; lastAction=[]; clipboard=""; desiredColumn=None })
EditActions.SwitchCaretMode x.Editor

override x.KeyPress descriptor =
Expand Down

0 comments on commit a8e3d07

Please sign in to comment.