diff options
author | Hans Nilsson <hans@erlang.org> | 2019-10-15 15:22:15 +0200 |
---|---|---|
committer | Hans Nilsson <hans@erlang.org> | 2019-10-16 13:43:47 +0200 |
commit | c9122f6a7244d9b495fe5b777b1f472a89b2a3d9 (patch) | |
tree | 18f2540a0c36fb855be74b316ea146d87d3ac165 | |
parent | db6059a9217767a6e42e93cec05089c0ec977d20 (diff) | |
download | erlang-c9122f6a7244d9b495fe5b777b1f472a89b2a3d9.tar.gz |
ssh: Fix cli problems at line end
Was a bug when one
1) wrote a few chars,
2) moved back and inserted more chars until the
last chars should flow into the next line
The cursor then jumped one line above what one expects
-rw-r--r-- | lib/ssh/src/ssh_cli.erl | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl index 958c342f5f..ab9624ec6e 100644 --- a/lib/ssh/src/ssh_cli.erl +++ b/lib/ssh/src/ssh_cli.erl @@ -387,7 +387,7 @@ insert_chars([], {Buf, BufTail, Col}, _Tty) -> insert_chars(Chars, {Buf, BufTail, Col}, Tty) -> {NewBuf, _NewBufTail, WriteBuf, NewCol} = conv_buf(Chars, Buf, [], [], Col), - M = move_cursor(NewCol + length(BufTail), NewCol, Tty), + M = move_cursor(special_at_width(NewCol+length(BufTail), Tty), NewCol, Tty), {[WriteBuf, BufTail | M], {NewBuf, BufTail, NewCol}}. %%% delete characters at current position, (backwards if negative argument) @@ -402,7 +402,7 @@ delete_chars(N, {Buf, BufTail, Col}, Tty) -> % N < 0 NewBuf = nthtail(-N, Buf), NewCol = case Col + N of V when V >= 0 -> V; _ -> 0 end, M1 = move_cursor(Col, NewCol, Tty), - M2 = move_cursor(NewCol + length(BufTail) - N, NewCol, Tty), + M2 = move_cursor(special_at_width(NewCol+length(BufTail)-N, Tty), NewCol, Tty), {[M1, BufTail, lists:duplicate(-N, $ ) | M2], {NewBuf, BufTail, NewCol}}. @@ -459,6 +459,10 @@ move_cursor(From, To, #ssh_pty{width=Width, term=Type}) -> end, [Tcol | Trow]. +%%% Caution for line "breaks" +special_at_width(From0, #ssh_pty{width=Width}) when (From0 rem Width) == 0 -> From0 - 1; +special_at_width(From0, _) -> From0. + %% %%% write out characters %% %%% make sure that there is data to send %% %%% before calling ssh_connection:send |