summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Nilsson <hans@erlang.org>2019-10-15 15:22:15 +0200
committerHans Nilsson <hans@erlang.org>2019-10-16 13:43:47 +0200
commitc9122f6a7244d9b495fe5b777b1f472a89b2a3d9 (patch)
tree18f2540a0c36fb855be74b316ea146d87d3ac165
parentdb6059a9217767a6e42e93cec05089c0ec977d20 (diff)
downloaderlang-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.erl8
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