hannesm / jackline

minimalistic secure XMPP client in OCaml
BSD 2-Clause "Simplified" License
250 stars 20 forks source link

key repetition in macOS terminal #186

Open Iix opened 6 years ago

Iix commented 6 years ago

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.

hannesm commented 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.

Iix commented 6 years ago

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.

cfcs commented 5 years ago

@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
Iix commented 5 years ago

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:~$
cfcs commented 5 years ago

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.

Iix commented 5 years ago

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.

cfcs commented 5 years ago

@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: