key repetition in macOS terminal
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.
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:
nottyseems to ignore termcap/terminfo for the purpose of ignoring escapes it doesn't knownottydoes not implementrepeat_charakarepakarp, which seems easy enough to add, but would require buffering the last char somewhere.- OSX seems to have its own incompatible termcap definition of
xterm-256colorwhich 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.