diff options
author | Hans Nilsson <hans@erlang.org> | 2019-10-15 15:22:15 +0200 |
---|---|---|
committer | Hans Nilsson <hans@erlang.org> | 2019-10-16 12:53:39 +0200 |
commit | 1891b32adb8fabfd45a57af55c4cb14959a536eb (patch) | |
tree | c5a2a165083b7e1be1e3836ee73ae7a1ed966bd3 /lib | |
parent | cb3acd084773b90042419dc3db2a69c6ced27faf (diff) | |
download | erlang-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.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 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 |