如何编写 ~/.haskeline 以便 ghci 或 haskeline 可以在 `home` 和 `end` 上正常运行

How to write ~/.haskeline so that ghci or haskeline can behave properly on `home` and `end`

我的问题是如何让我的 ghci 在我的 homeend 按下时做出正确的反应。

我了解到 ghci 使用 haskeline 对用户输入做出反应,并且 haskeline 的行为在某种程度上部分定义在 ~/.haskeline 中。

长期以来,我一直在为 end 键和 ghcihome 键缺乏支持而苦恼。所以我尝试定义自己的 ~/.haskeline 文件。

首先:

bind: a home
bind: b end

keyseq: "a" home
keyseq: "b" end

bind: left home
bind: right end

两者的行为都与我按 a 然后将光标移至最左侧时的行为相同。

其次:

bind: home a
bind: end b

这表明我的ghci似乎完全忽略了我的homeend按下。

那么我如何将 homeend 密钥发送到 ghcihaskline

默认情况下应该工作。很可能 Haskeline 无法识别您的键盘作为 homeend 键发送的任何内容。这取决于您的 OS 和终端设置。

您可能需要将 $TERM 设置调整为支持这些键的设置,之后 Haskeline 应该 自动拾取它们。

否则,Haskeline trac wiki 有一个方法可以让它识别未知的键序列,它应该可以在 POSIX 系统上工作(不适用于 Windows,其中 homeend 也应该已经默认工作了)。将其适应当前情况:

$ ghc -e getLine
<press home, then return>...some noise here...
"...haskell string for home..."
$ ghc -e getLine
<press end, then return>...some other noise...
"...haskell string for end..."

将相应的行添加到~/.haskeline:

keyseq: your-terminal "...haskell string for home..." home
keyseq: your-terminal "...haskell string for end..." end

其中 your-terminal 是您的 $TERM 变量中的任何内容。

我目前不太了解Most likely Haskeline isn't recognizing whatever your keyboard sends as the home and end keys. This depends on your OS and terminal setup.我今天第一次知道。

但是我成功写了一个~/.haskeline适配我的笔记本(Ubuntu 14.04, ghc-7.10.2).

keyseq: "\ESCOH" home
keyseq: "\ESCOF" end