Ticket #110 (closed defect: fixed)

Opened 4 years ago

Last modified 4 years ago

Pressing Enter results in M

Reported by: guest Owned by: judah
Priority: major Milestone:
Version: 0.6 Keywords:
Cc: imam.alam@…

Description

When pressing the Enter key in GHCi, it responds by an M character and the Enter is forgotten. When I press Ctrl+M instead it works.

I am using Linux Mint 9 (Isadora). GHCi is 6.12.3, I have the Haskell Platform installed, and haskeline is 0.6.2.2. I am assuming it's a haskeline bug just because everything else (like the terminal itself, python when run from the terminal, for example) works.

I am using GNOME-terminal 2.29.6. I have tried XTerm(256) but that also has the same problem.

$ echo $LANG produces en_AU.utf8

On #haskell it was suggested that I use $ rlwrap ghci but that didn't work either.

Trying to use haskeline as a library from GHCi failed because GHCi reported that haskeline is unusable due to missing or recursive dependency on mtl.

Change History

Changed 4 years ago by guest

  • cc imam.alam@… added

Changed 4 years ago by judah

  • owner set to judah
  • status changed from new to assigned

Thanks for the report. A few questions:

  • In your terminal shell, what is the output of the following commands?
    stty -a
    echo $TERM
    infocmp
    
  • If you run the following command and then press Enter, what is the output?
    ghc -e getChar
    
  • Start ghci and type getChar Then press ctrl-m (to enter that command into ghci). Then, press Enter. What happens?

Changed 4 years ago by guest

thanks.. I don't have sufficient expertise to interpret the outputs though...

$ stty -a

speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; 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

$ echo $TERM
xterm

$ infocmp
#	Reconstructed via infocmp from file: /lib/terminfo/x/xterm
xterm|X11 terminal emulator,
	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=\EO2P, kf14=\EO2Q,
	kf15=\EO2R, kf16=\EO2S, 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=\EO5P,
	kf26=\EO5Q, kf27=\EO5R, kf28=\EO5S, 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=\EO6P, kf38=\EO6Q, kf39=\EO6R,
	kf4=\EOS, kf40=\EO6S, 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=\EO3P,
	kf5=\E[15~, kf50=\EO3Q, kf51=\EO3R, kf52=\EO3S,
	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=\EO4P,
	kf62=\EO4Q, kf63=\EO4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
	khome=\EOH, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
	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>, 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=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
	sgr0=\E[m\E(B, smacs=\E(0, smam=\E[?7h, smcup=\E[?1049h,
	smir=\E[4h, smkx=\E[?1h\E=, 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,

$ ghc -e getChar
'\n'

calling getChar at GHCi and pressing Enter results in '\n', as expected (?!). This is on GNOME-terminal.

If this is my machine specific, could you please suggest a workaround? I love playing with GHCi.

Changed 4 years ago by judah

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

Ok, I've found the problem; thanks for your help in tracking it down. Haskeline wasn't recognizing xterm's key sequence for the enter key. (This is normally just "\n", but Haskeline puts itself into keypad mode so we have to be a little more careful.)

I've committed a fix in the main Darcs repo at http://code.haskell.org/haskeline . I'll make a new release within the next week (after taking care of some other pending issues). In the meantime, you can work around the problem by creating a .haskeline file in your home directory with the following line:

keyseq: "\ESCOM" return

Please reopen this ticket if that does not enable the enter key on your machine.

Changed 4 years ago by guest

thanks. applied your workaround. works like a charm.

Note: See TracTickets for help on using tickets.