Ticket #107 (closed defect: fixed)

Opened 5 years ago

Last modified 3 years ago

Vi mode: 'k' key behave oddly: command mode -> insert mode

Reported by: guest Owned by:
Priority: major Milestone: 0.6.2
Version: 0.6 Keywords: Vi k historyBack
Cc: rlpowell@…

Description

version: 0.6.2.3 ghc-version: 6.10.4 OS: gentoo linux

In Vi mode. Push [Esc] key, and push 'k' key, then mode return to insert mode.

for example

% abc[return]
% def[return]
then I push [Esc] key, and 'k', 'k'
I wanted "abc", but I got "kdef".

Maybe, this is problem of searchHistory in System.Console.Haskeline.Command.History.

searchHistory = choiceCmd [
metaChar 'j' +> searchForPrefix Forward
, metaChar 'k' +> searchForPrefix Reverse
...

|
V

searchHistory = choiceCmd [
metaChar 'j' +> searchForPrefix Forward
, metaChar '-' +> searchForPrefix Reverse
...

Then, resolved.

Please excuse me for my awful English.

Best regards,
-Yoshikuni

Change History

  Changed 4 years ago by judah

Thanks for the report. I cannot reproduce the problem; it's possible that the problem has been fixed since you posted this.

If you use the latest development version from http://code.haskell.org/haskeline , do you still have this issue? If so, can you please let me know what terminal program you use (for example, xterm or urxvt), and what the output of the following commands are:

stty -a
echo $TERM
infocmp

follow-up: ↓ 3   Changed 3 years ago by rlpowell

I'm having exactly this problem with whatever haskeline is bundled with GHC 7.0.4 on Fedora.

In fact, none of the VI movement keys work at all.

Here's my relevant package versions:

Installed Packages ghc-haskell2010.x86_64 1.0.0.0-31.3.fc16 installed ghc-haskell2010-devel.x86_64 1.0.0.0-31.3.fc16 installed ghc-haskell98.x86_64 1.1.0.1-31.3.fc16 installed ghc-haskell98-devel.x86_64 1.1.0.1-31.3.fc16 installed ghc-template-haskell.x86_64 2.5.0.0-31.3.fc16 installed ghc-template-haskell-devel.x86_64 2.5.0.0-31.3.fc16 installed

Huh. I just discovered this only happens when I'm under tmux. In both cases, I'm connecting to my linux box via KiTTY (a PuTTY fork).

Here's the term info commands requested in the terminal that *WORKS* (not under tmux):

rlpowell@vrici> stty -a speed 38400 baud; rows 94; columns 274; line = 0; intr = C; quit = \; erase = H; kill = U; eof = D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>; susp = Z; rprnt = R; werase = W; lnext = V; flush = <undef>; min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke rlpowell@vrici> echo $TERM xterm rlpowell@vrici> infocmp # Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm xterm|xterm terminal emulator (X Window System),

am, bce, km, mc5i, mir, msgr, npc, xenl, colors#8, cols#80, it#8, lines#24, pairs#64,

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, 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, 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=\177, 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, meml=\El, memu=\Em, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, 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, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, 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%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m, sgr0=\E(B\E[m, 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[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd,

Here's the same commands in a terminal under tmux, that doesn't work; everything else is the same as far as I know:

rlpowell@vrici> stty -a speed 38400 baud; rows 93; columns 274; line = 0; intr = C; quit = \; erase = ?; kill = U; eof = D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = Q; stop = S; susp = Z; rprnt = R; werase = W; lnext = V; flush = O; min = 1; time = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke rlpowell@vrici> echo $TERM xterm rlpowell@vrici> infocmp # Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm xterm|xterm terminal emulator (X Window System),

am, bce, km, mc5i, mir, msgr, npc, xenl, colors#8, cols#80, it#8, lines#24, pairs#64,

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, 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, 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=\177, 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, meml=\El, memu=\Em, op=\E[39;49m, rc=\E8, rev=\E[7m, ri=\EM, rin=\E[%p1%dT, 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, rs2=\E[!p\E[?3;4l\E[4l\E>, sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, 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%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m, sgr0=\E(B\E[m, 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[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd,

in reply to: ↑ 2   Changed 3 years ago by rlpowell

  • cc rlpowell@… added

  Changed 3 years ago by judah

Thank you for the additional information. I have a question about your statement:

In fact, none of the VI movement keys work at all.

Can you be more specific about exactly what happens when you do the following:

1. Type some text, then press the left/right arrow keys to move around the line

2. Type some text, press "escape" and then press "0" (which should move the cursor to the start of the line)

3. Type some text, press "escape" and then type "dd" (should delete the whole line)

Does it just do absolutely nothing, or does it print incorrect output to the screen as in the original ticket description?

Finally: what is the contents of your ~/.haskeline file (if any)?

  Changed 3 years ago by rlpowell

Under tmux where things are broken:

1. Arrow keys work just fine, it's VI command mode stuff that's broken.

2. It beeps at me, no cursor change.

3. Works.

In addition, here's what happens when I type a few lines of text, arrow up a couple of lines, move to the middle of the line, (so that movement in all directions is possible), hit escape, and hit various keys:

kkk: First time it worked, which has happened before but is not repeateable. On retry, first k did nothing, second and third inserted.

jjj: First j did nothing, second and third inserted.

hhh: First time it worked. Second time, first h causes screen beep, second and third inserted.

lll: First l causes screen beep, second and third inserted.

Oh, and now I can't get "dd" to work; first causes beep, second inserts.

It's all *VERY* odd.

~/.haskeline:

rlpowell@vrici> cat ~/.haskeline editMode: Vi historyDuplicates: IgnoreConsecutive?

-Robin

  Changed 3 years ago by judah

Thanks again for your very helpful diagnostics. I think I've found the cause:

https://github.com/henrikthuesen/zink/wiki/ghci http://www.muddygoat.org/articles/vim-in-tmux

After pressing the escape key, tmux delays for a second or two before responding. This problem pops up with vi/vim as well.

You should be able to fix it by editing either ~/.tmux or ~/.tmux.conf and adding either

set -sg escape-time 0

Or

set-option -sg escape-time 0

The exact combination depends on your configuration, I think.

Please let me know if those steps fix the problem for you. If so, I'll add some documentation to the wiki about this.

  Changed 3 years ago by rlpowell

*HUH*. What's *bizarre* is that I don't have that problem in vim, *at all*.

But you're absolutely right, that fixed it. How *weird*.

Thank you!

-Robin

  Changed 3 years ago by judah

  • status changed from new to closed
  • resolution set to fixed

Thanks for the update. I've documented the fix at UsingTmux.

Note: See TracTickets for help on using tickets.