Open Iix opened 6 years ago
I'm sorry to hear this. it looks like this is an issue in the notty library -- and I don't have a system to test this with the macOS terminal. maybe @pqwy has an idea what could be the issue.
I further noticed that sometimes using key repetition in a macOS terminal using jackline on a remote server, e.g. scrolling up and down through the user roster, there is "~5" and "~6" shown as an output.
@lix ah, interesting. It does indeed sound like notty
doesn't handle repeat_char
aka rep
aka rp
from your client.
Could you provide the output of these commands:
echo "$TERM"
infocmp -I
tput rep 65 8 | xxd
Hi @cfcs
user@host:~$ echo "$TERM"
xterm-256color
user@host:~$ infocmp -I
# Reconstructed via infocmp from file: /lib/terminfo/x/xterm-256color
xterm-256color|xterm with 256 colors,
am, bce, ccc, xenl, km, mir, msgr, npc, mc5i,
cols#80, it#8, lines#24, colors#256, pairs#32767,
acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
cbt=\E[Z, bel=^G, cr=^M, csr=\E[%i%p1%d;%p2%dr, tbc=\E[3g,
clear=\E[H\E[2J, el1=\E[1K, el=\E[K, ed=\E[J,
hpa=\E[%i%p1%dG, cup=\E[%i%p1%d;%p2%dH, cud1=^J,
home=\E[H, civis=\E[?25l, cub1=^H, cnorm=\E[?12l\E[?25h,
cuf1=\E[C, cuu1=\E[A, cvvis=\E[?12;25h, dch1=\E[P,
dl1=\E[M, smacs=\E(0, smam=\E[?7h, blink=\E[5m, bold=\E[1m,
smcup=\E[?1049h, dim=\E[2m, smir=\E[4h, sitm=\E[3m,
rev=\E[7m, invis=\E[8m, smso=\E[7m, smul=\E[4m,
ech=\E[%p1%dX, rmacs=\E(B, rmam=\E[?7l, sgr0=\E(B\E[m,
rmcup=\E[?1049l, rmir=\E[4l, ritm=\E[23m, rmso=\E[27m,
rmul=\E[24m, flash=\E[?5h$<100/>\E[?5l,
is2=\E[!p\E[?3;4l\E[4l\E>,
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
il1=\E[L, kb2=\EOE, kbs=\177, kcbt=\E[Z, kdch1=\E[3~,
kcud1=\EOB, kend=\EOF, kent=\EOM, kf1=\EOP, kf10=\E[21~,
kf11=\E[23~, kf12=\E[24~, kf13=\E[1;2P, kf14=\E[1;2Q,
kf15=\E[1;2R, kf16=\E[1;2S, kf17=\E[15;2~, kf18=\E[17;2~,
kf19=\E[18;2~, kf2=\EOQ, kf20=\E[19;2~, kf21=\E[20;2~,
kf22=\E[21;2~, kf23=\E[23;2~, kf24=\E[24;2~,
kf25=\E[1;5P, kf26=\E[1;5Q, kf27=\E[1;5R, kf28=\E[1;5S,
kf29=\E[15;5~, kf3=\EOR, kf30=\E[17;5~, kf31=\E[18;5~,
kf32=\E[19;5~, kf33=\E[20;5~, kf34=\E[21;5~,
kf35=\E[23;5~, kf36=\E[24;5~, kf37=\E[1;6P, kf38=\E[1;6Q,a
kf39=\E[1;6R, kf4=\EOS, kf40=\E[1;6S, kf41=\E[15;6~,
kf42=\E[17;6~, kf43=\E[18;6~, kf44=\E[19;6~,
kf45=\E[20;6~, kf46=\E[21;6~, kf47=\E[23;6~,
kf48=\E[24;6~, kf49=\E[1;3P, kf5=\E[15~, kf50=\E[1;3Q,
kf51=\E[1;3R, kf52=\E[1;3S, kf53=\E[15;3~, kf54=\E[17;3~,
kf55=\E[18;3~, kf56=\E[19;3~, kf57=\E[20;3~,
kf58=\E[21;3~, kf59=\E[23;3~, kf6=\E[17~, kf60=\E[24;3~,
kf61=\E[1;4P, kf62=\E[1;4Q, kf63=\E[1;4R, kf7=\E[18~,
kf8=\E[19~, kf9=\E[20~, khome=\EOH, kich1=\E[2~,
kcub1=\EOD, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kcuf1=\EOC,
kDC=\E[3;2~, kEND=\E[1;2F, kind=\E[1;2B, kHOM=\E[1;2H,
kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~, kPRV=\E[5;2~,
kri=\E[1;2A, kRIT=\E[1;2C, kcuu1=\EOA, rmkx=\E[?1l\E>,
smkx=\E[?1h\E=, meml=\El, memu=\Em, oc=\E]104\007,
op=\E[39;49m, dch=\E[%p1%dP, dl=\E[%p1%dM, cud=\E[%p1%dB,
ich=\E[%p1%d@, indn=\E[%p1%dS, il=\E[%p1%dL,
cub=\E[%p1%dD, cuf=\E[%p1%dC, rin=\E[%p1%dT,
cuu=\E[%p1%dA, mc0=\E[i, mc4=\E[4i, mc5=\E[5i,
rs1=\Ec\E]104\007, rs2=\E[!p\E[?3;4l\E[4l\E>, rc=\E8,
vpa=\E[%i%p1%dd, sc=\E7, ind=^J, ri=\EM,
setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m,
setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m,
sgr=%?%p9%t\E(0%e\E(B%;\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m,
hts=\EH, ht=^I, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c,
u9=\E[c,
user@host:~$ tput rep 65 8 | xxd
user@host:~$
I checked the code for notty, the let csi
function does not parse the xterm
repeat_char, and for osx it seems to not be defined, which makes me wonder what generates it in this case.
I wonder what the repeat_char
that your machine ends up sending out looks like. When you see the ~5
and ~6
and so on, are they followed by b
? like ~5b
?
Maybe you can trigger it by ssh'ing to a machine, running xxd > foo.txt
and holding down a button for a while, then pressing control + d
to end the input.
Anyway, to conclude, this is definitely in notty
land and not a jackline issue. In the C world all this stuff would be handled in ncurses
. Too bad notty is not maintained anymore.
Thanks for investigating on it, @cfcs
I have no strange output in xxd
when repeating a key. Just within Jackline. Btw. it also occurs sometimes when I paste something into Jackline.
@Iix Pasting should be handled by notty
, at least it works pretty well for me on Linux.
I'm sorry, it's tricky for me to investigate, but I'll try to look into it next time I see someone who's got a mac.
But if someone finds this at a latter point, the issue seems to be a mix of:
notty
seems to ignore termcap/terminfo for the purpose of ignoring escapes it doesn't knownotty
does not implement repeat_char
aka rep
aka rp
, which seems easy enough to add, but would require buffering the last char somewhere.xterm-256color
which lies about its capabilities. This is not causing the bug here, but it does mean that it won't work to use the OS termcap database in a potential fix.
The keyboard repetition in the macOS terminal seems not to work correctly. The repetition actually works, but does not appear, e.g. when scrolling through the users roster, the repetition only shows, when the key is released again. The same happens when moving through the message input field.