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

shift->right_cursor shift->right_cursor inserts control codes into editor #55

Closed
rofl0r opened this issue Apr 3, 2019 · 4 comments
Closed

Comments

@rofl0r
Copy link
Contributor

rofl0r commented Apr 3, 2019

first shift-right_cursor opens menu, another shit-right_cursor inserts [1;2C into xterm.
(happens with netbsd-curses, ncurses untested)

@vigna
Copy link
Owner

vigna commented Apr 3, 2019

It looks like the sequence is not recognized. Can you send a dump of infocmp?

@rofl0r
Copy link
Contributor Author

rofl0r commented Apr 3, 2019

xterm-256color|xterm with 256 colors,
	am, bce, ccc, km, mc5i, mir, msgr, npc, xenl,
	colors#256, cols#80, it#8, lines#24, pairs#32767,
	acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G,
	blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, clear=\E[H\E[2J,
	cnorm=\E[?12l\E[?25h, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD,
	cub1=^H, cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
	cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A, cvvis=\E[?12;25h,
	dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M,
	ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
	flash=\E[?5h$<100/>\E[?5l, home=\E[H, hpa=\E[%i%p1%dG, ht=^I,
	hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=^J,
	indn=\E[%p1%dS,
	initc=\E]4;%p1%d;rgb:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\,
	invis=\E[8m, is2=\E[!p\E[?3;4l\E[4l\E>, kDC=\E[3;2~, kEND=\E[1;2F,
	kHOM=\E[1;2H, kIC=\E[2;2~, kLFT=\E[1;2D, kNXT=\E[6;2~,
	kPRV=\E[5;2~, kRIT=\E[1;2C, kb2=\EOE, kbs=^H, kcbt=\E[Z,
	kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~,
	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,
	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~, kind=\E[1;2B, kmous=\E[M,
	knp=\E[6~, kpp=\E[5~, kri=\E[1;2A, mc0=\E[i, mc4=\E[4i, mc5=\E[5i,
	oc=\E]104\007, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM,
	rin=\E[%p1%dT, ritm=\E[23m, rmacs=\E(B, rmam=\E[?7l,
	rmcup=\E[?1049l, rmir=\E[4l, rmkx=\E[?1l\E>, rmm=\E[?1034l,
	rmso=\E[27m, rmul=\E[24m, rs1=\Ec\E]104\007,
	rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7,
	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,
	setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
	setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%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,
	sgr0=\E(B\E[m, sitm=\E[3m, smacs=\E(0, smam=\E[?7h,
	smcup=\E[?1049h, smir=\E[4h, smkx=\E[?1h\E=, smm=\E[?1034h,
	smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n,
	u8=\E[?%[;0123456789]c, u9=\E[c, vpa=\E[%i%p1%dd,

does this help?

@utoddl
Copy link
Collaborator

utoddl commented Apr 4, 2019

Sure, that helps a lot. So, "kRIT=\E[1;2C" assigns the "kRIT" function (which I'm guessing is terminfo speak for "shift-right_cursor") to the character sequence "escape" (\E) "[" "1", ";", "2",and "C". Apparently ne doesn't map that to anything, but you can!

Say you want to map Shift-Right_Cursor to the AutoComplete command.
First, find a key code that isn't already assigned. Say 0xfe (that's 254 in decimal). On the ne command line, say:
keycode 0xfe
On my system, that returns
Key Code: 0xfe, Input Class: ALPHA, Assigned Command: (none)
Perfect; it's available. So in your ~/.ne/.keys file, add these lines:

SEQ "\x1b[1;2C" fe
KEY fe AutoComplete

That maps the escape sequence to key "fe" (in hex), then assigns the AutoComplete command to that key. You'll have to start a new ne instance after changing the file, because ne only reads it once upon start-up. (The file doesn't change very often after all.) If you mess up your .keys file so much that ne is not usable, start ne with the --no-config option so you can fix it.

The reason you are seeing the menu the first time you hit that key combination is because of the leading escape character. ne waits a brief time to see if the next character is another escape (which would activate the menu; try Esc followed immediately by another Esc to see it in action) or if it's the beginning of a known escape sequence. It's the beginning of an escape sequence, but not one that's known, or at least not used by the default configuration. So the leading escape brings up the menu, then the subsequent characters don't do anything noticeable while the menu is up and they just get "consumed".

The 2nd time you hit that sequence (while the menu is displayed), the leading escape closes the menu, and the subsequent characters look to ne like you typed "[1;2C" really, really fast! So they get inserted into the document.

Once you assign that escape sequence using SEQ and KEY in your ~/.ne/.keys file, ne recognizes it as key number 254, and does whatever you've configured that key to do.

ne has a notion of around 509 keys that you can map any which way you like. The only two you can't change are Esc and Tab. (That's from memory, but it's close enough.) A good number of them are mapped to things already. You can play with the KeyCode command a while and probably find some surprises.

Does that help?

@rofl0r
Copy link
Contributor Author

rofl0r commented Apr 4, 2019

oh interesting. yes, that does indeed explain the behaviour.
it's unusual because all other terminal editors i know do not process unknown escape sequences as user input. so i suspected there might be a bug somewhere (i'm testing the new release of netbsd-curses). in this case though it looks as it this is what you have intended so the user can do precisely what you proposed to create another keyboard shortcut, correct?

@vigna vigna closed this as completed Jun 18, 2020
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