Я действительно хотел бы, чтобы sbt и его консоль работали под cygwin любым способом, которым вы думаете, что это можно сделать?

У меня есть эта проблема (https://github.com/sbt/sbt/issues/562) в основном, когда я пытаюсь получить консоль, она говорит:

[ERROR] Не удалось создать терминал; Возврат к unsupportedjava.lang.IllegalArgumentException: Неверный тип терминала: jline.UnixTerminal

также вы не можете использовать backspace

вы в принципе не можете использовать sbt в cygwin (в dos прекрасно, но cygwin - намного более приятная среда) и выразили мою озабоченность там

Я пробовал несколько обходных решений, которые я нашел в сети, но они все для старых версий и теперь не используются

просто интересно, знаете ли вы о каком-либо обходном пути?

спасибо

Ответ 1

Следующие работы для меня (в основном, см. примечание внизу):

  • Используйте оболочку mintty. Я считаю, что это оболочка по умолчанию для новых установок cygwin, но была включена в качестве альтернативы на некоторое время. Если mintty.exe существует в вашей папке <cygwin home>\bin, тогда он готов к использованию, иначе он может быть установлен через типичный пакет пакетов cygwin из файла setup.exe.
  • Откройте окно монетного двора, щелкните правой кнопкой мыши в любом месте, перейдите к Options...Keys и убедитесь, что отмечен Send Backspace as ^H. Это позволит REPL правильно интерпретировать обратные пространства.

Для запуска Scala REPL, который должен быть всем, что вам нужно, но попытка запустить sbt console может все же создать это исключение. Чтобы обойти это, запустите sbt без каких-либо аргументов, чтобы перейти к приглашению sbt. Оттуда выполните:

eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal")

затем

console

или, как единственная команда (с важными двумя полуколонами):

; eval System.setProperty("jline.terminal", "scala.tools.jline.UnixTerminal") ; console


Из того, что я могу сказать, это вызвано, по крайней мере частично, запросом Scala REPL и sbt с использованием несовместимых версий JLine. В частности, похоже, что Scala REPL создал свои собственные обертки вокруг библиотеки и использует это, в то время как sbt использует библиотеку JLine напрямую.

Примечание

Одно из ограничений, с которым я продолжаю сталкиваться, заключается в том, что REPL обертывается в столбце 80, даже если в окне оболочки больше горизонтального пространства. Не только это, но когда REPL обертывает это, он перезаписывает одну и ту же строку, а не переходит к следующему, а вытягивание длинных строк из истории заканчивается нажатием курсора над строкой, которую вы фактически редактируете.