summaryrefslogtreecommitdiff
path: root/lib
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 12:53:39 +0200
commit1891b32adb8fabfd45a57af55c4cb14959a536eb (patch)
treec5a2a165083b7e1be1e3836ee73ae7a1ed966bd3 /lib
parentcb3acd084773b90042419dc3db2a69c6ced27faf (diff)
downloaderlang-1891b32adb8fabfd45a57af55c4cb14959a536eb.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
Diffstat (limited to 'lib')
-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 c386806cb5..7f04fcb804 100644
--- a/lib/ssh/src/ssh_cli.erl
+++ b/lib/ssh/src/ssh_cli.erl
@@ -366,7 +366,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)
@@ -381,7 +381,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}}.
@@ -438,6 +438,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