Подтвердить что ты не робот

Haskell: GHCi рассматривает Ctrl-Y как Ctrl-Z

В соответствии с haskeline документация, ввод CTRL + Y должен вывести самую последнюю запись из kill-ring (например, строка, которую я просто удалил через CTRL + U). Я нахожу это вместо этого, он приостанавливает REPL, как будто я набрал CTRL + Z.

Как неуклюжий обходной путь, я обнаружил, что набирать CTRL + V CTRL + Y выскакивает из кольца уничтожения, поскольку предполагается, что должен выполняться простой CTRL + Y.

Является ли это ошибкой, или что-то еще играет? Могу ли я это исправить? Я запускаю GHC версии 8.0.2.

Не уверен, если это имеет значение, но я запускаю GHCi через стек (например, stack ghci), а я brew установленный стек (macOS).

4b9b3361

Ответ 1

У терминалов /ttys Mac OS есть концепция ключа "dsusp" или "delayed suspend", а Ctrl-Y - обычный назначенный ключ. На уровне tty, когда читается a CTRL + Y, он немного напоминает CTRL + Z. Разница в том, что CTRL + Z вызывает немедленное приостановку при вводе; CTRL + Y вызывает приостановку, когда базовый процесс пытается прочитать символы и маркер CTRL + Y всплывает во входном потоке.

(CTRL + V обычно присваивается клавише "lnext", которая пропускает обработку терминала, делая следующий ключ "literal", поэтому CTRL + V CTRL + Y работает.)

В идеале GHCi будет проверять функциональность "dsusp" (например, она не существует в Linux) и отключить ее, если она обнаружена, но похоже, что она не делает этого.

Тем временем вы можете отключить свой ключ "dsusp" , запустив:

stty dsusp undef

перед запуском GHCi. Придерживание этого в вашем ".bashrc" и/или ".profile" является хорошей идеей, поскольку функциональность в основном бесполезна.