Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

key repetition in macOS terminal #186

Open
Iix opened this issue Mar 16, 2018 · 7 comments
Open

key repetition in macOS terminal #186

Iix opened this issue Mar 16, 2018 · 7 comments

Comments

@Iix
Copy link

Iix commented Mar 16, 2018

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.

@Iix Iix changed the title key repeatition in macOS terminal key repetition in macOS terminal Mar 16, 2018
@hannesm
Copy link
Owner

hannesm commented Mar 17, 2018

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
Copy link
Author

Iix commented Mar 30, 2018

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
Copy link

cfcs commented Jul 19, 2018

@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
Copy link
Author

Iix commented Jul 20, 2018

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
Copy link

cfcs commented Jul 20, 2018

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
Copy link
Author

Iix commented Jul 22, 2018

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
Copy link

cfcs commented Jul 23, 2018

@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 know
  • notty does not implement repeat_char aka rep aka rp, 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-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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants