Почему у меня работают клавиши управления lein при использовании lein1, но не lein2?

Я успешно обновился до lein2 и успешно запустил lein repl. Я использую SecureCrt от VanDyke для входа на свою рабочую станцию ​​Ubuntu 12.04. Я не менял никаких настроек терминала, и у меня не было следующей проблемы с lein 1.x.

Когда я начал использовать свои обычные клавиши командной строки bash, такие как CTRL+A, CTRL+E и CTRL+C, ни одна из этих клавиш не работала.

Что мне нужно сделать, чтобы включить эти клавиши CTRL?

Следуя инструкциям по установке, я сохранил исходный lein как lein1. Я пробовал это, и клавиши управления работают, как указано выше.

Я попытался установить lein2 для нового пользователя вместо обновления, и проблема с ключом управления сохраняется. Я также пробовал это в системах CentOS и Ubuntu. Такое же поведение существует.

Вот вывод stty -a

скорость 38400 бод; ряды 42; столбцы 159; строка = 0; ввод = ^C; выйти = ^\; стереть = ^?; убить = ^U; эоф = ^D; эол = ; эол2 = ; переключатель = ; начало = ^Q; стоп = ^S; приостановка = ^Z; рпрнт = ^R; вера = ^W; След = ^V; смыв = ^O; мин = 1; время = 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 echoe echoe echok -echonl -noflsh -xcase -tostop -echort echoctl echoke cnorton@steamboy:~/projects/clojure/wtr-usage1$

Вот вывод из new lein:

nREPL server started on port 52310
REPL-y 0.1.9
Clojure 1.4.0
    Exit: Control+D or (exit) or (quit)
Commands: (user/help)
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
          (user/sourcery function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
Examples from clojuredocs.org: [clojuredocs or cdoc]
          (user/clojuredocs name-here)
          (user/clojuredocs "ns-here" "name-here")
wtr-usage1.core=> 

Существуют ли какие-либо каталоги или файлы, которые следует очистить между шагами 1 и 2? У меня нет плагинов, поэтому я не делал ничего из этой части обновления.

Я продолжил работу над этой проблемой и выполнил следующие диагностические тесты:

1) я выполнил следующую команду

java -cp target/jline-2.11-SNAPSHOT-tests.jar:target/jline-2.11-SNAPSHOT.jar -Djline.internal.Log.debug=true jline.example.Example none

в клонированном каталоге jline2. Клавиши управления не работали.

2) я выполнил следующую команду

export JLINE_LOGGING=trace && lein trampoline run

в клонированном -- git clone git://github.com/trptcolin/reply.git -- каталоге ответов. Клавиши управления работали. Мне было предложено создать проблему на github, что я и сделал.


person octopusgrabbus    schedule 04.03.2013    source источник
comment
Спасибо тому, кто проголосовал за это. Я не знаю, почему за это когда-либо проголосовали. Я опубликовал все, кроме кухонной раковины, и продолжал редактировать исходный пост, чтобы отразить тестирование, которое я провел на основе ответов, которые были полезными, но не решили проблему. Наконец, я обратился за помощью к внешней стороне SO, работая с кем-то, связанным с leiningen, который дал мне ответы, которые я искал. Эти ответы касались моей установки с помощью диагностики. В итоге было решено поставить вопрос против leiningen. Я отредактировал OP с результатами этих диагностических тестов, чтобы сделать вопрос максимально полным.   -  person octopusgrabbus    schedule 05.03.2013
comment
Для этого есть исправление, которое я скоро попробую. github.com/technomancy/leiningen/pull/1057 Если это сработает, я отредактируйте OP, чтобы отразить это.   -  person octopusgrabbus    schedule 11.03.2013
comment
Спасибо за предложение. Я попробовал это, и это все еще отключено.   -  person octopusgrabbus    schedule 14.03.2013


Ответы (5)


Этого не должно было случиться. Попробуйте выполнить set -o emacs в bash, но в сценарии lein не должно быть ничего, чтобы отключить его.

person Cubic    schedule 04.03.2013
comment
Переустановил. Все равно не работает. cnorton@steamboy:~/projects/clojure/wtr-usage1$ lein repl Сервер nREPL запущен на порту 48953 REPL-y 0.1.9 Clojure 1.4.0 Мой lein называется lein, а не lein2. Он установлен локально в моем каталоге ~/bin. Какие есть команды редактирования, кроме Backspace, CTRL+A и т. д.? Я попробую один из них. - person octopusgrabbus; 04.03.2013

Попробуйте переустановить Лейнинген. lein2 repl на моей конфигурации запускает REPL-ы, выглядит это так:

% lein2 repl
Downloading Leiningen to /home/dpx-infinity/.lein/self-installs/leiningen-2.0.0-standalone.jar now...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12.6M  100 12.6M    0     0  93665      0  0:02:21  0:02:21 --:--:-- 91018
nREPL server started on port 47543
REPL-y 0.1.9
Clojure 1.4.0
    Exit: Control+D or (exit) or (quit)
Commands: (user/help)
    Docs: (doc function-name-here)
          (find-doc "part-of-name-here")
  Source: (source function-name-here)
          (user/sourcery function-name-here)
 Javadoc: (javadoc java-object-or-class-here)
Examples from clojuredocs.org: [clojuredocs or cdoc]
          (user/clojuredocs name-here)
          (user/clojuredocs "ns-here" "name-here")
user=>

REPL-y имеет все обычные команды редактирования. Если вы этого не получаете, значит, что-то не так с вашей установкой.

person Vladimir Matveev    schedule 04.03.2013
comment
@octopusgrabbus, ну все стандартные команды emacs работают: ctrl+a, ctrl+e, ctrl+f, ctrl+b, alt+f, alt+b, ctrl+d, alt+d и т.д. -y запускается нормально, похоже, это проблема вашего эмулятора терминала. К сожалению, я ничего не знаю о SecureCrt, поэтому не могу здесь помочь. Может быть, эти комбинации конфликтуют с собственными ярлыками SecureCrt? - person octopusgrabbus; 04.03.2013
comment
Да, но мои клавиши управления работают нормально lein1. Я пытаюсь найти отличия. - person Vladimir Matveev; 05.03.2013
comment
Выполнил эти шаги с теми же результатами. Нет клавиш управления. - person octopusgrabbus; 05.03.2013

Я бы посоветовал вам протестировать новую установку свежего лейна в новой свежей среде:

  1. Создать нового пользователя: sudo useradd -m testlein
  2. Переключиться на нового пользователя: sudo su - testlein
  3. Получить последнюю версию lein2: wget https://raw.github.com/technomancy/leiningen/stable/bin/lein
  4. Установить execute разрешение: chmod +x lein
  5. Установить лейн: ./lein
  6. Выполнить ответ: ./lein repl

После этого попробуйте команды ctrl-a/e/... .

P.S. Я не знаю, как вы установили Java в свою систему. Возможно, вам следует настроить java в новой пользовательской среде до шага 5.

person mobyte    schedule 09.03.2013
comment
@octopusgrabbus Пробовали ли вы другие эмуляторы терминала? - person octopusgrabbus; 09.03.2013
comment
Нет, но я попробую в понедельник, сидя за своей консолью, чего я не могу делать из дома. Эмулятор не изменился. у лейна есть. lein2 отлично строится; только клавиши управления не работают. - person mobyte; 09.03.2013
comment
Это работает в срок; теперь мне нужно выяснить, в чем разница между SecureCrt и term. Мои настройки эмулятора не изменились, но я перешел с lein1 на lein2. Итак, какие-то настройки в эмуляторе нужно изменить, но зачем? - person octopusgrabbus; 09.03.2013
comment
Пробовал с ошибками. Я опубликую их в конце своего поста. Что мне нужно добавить? - person octopusgrabbus; 14.03.2013

Это похоже на проблемы с JLine на Cygwin. Стоит попробовать тот же обходной путь для вашей системы.

Отредактируйте сценарий lein, начиная со строки 284, следующим образом; добавленные строки обозначаются ->.

    export TRAMPOLINE_FILE

->  stty -icanon min 1 -echo

    "$LEIN_JAVA_CMD" \
        -client -XX:+TieredCompilation \
        "${BOOTCLASSPATH[@]}" \
        $LEIN_JVM_OPTS \
        -Dfile.encoding=UTF-8 \
->      -Djline.terminal=jline.UnixTerminal \      
        -Dmaven.wagon.http.ssl.easy=false \
        -Dleiningen.original.pwd="$ORIGINAL_PWD" \
        -Dleiningen.script="$SCRIPT" \
        -classpath "$CLASSPATH" \
        clojure.main -m leiningen.core.main "$@"

->  stty icanon echo

    EXIT_CODE=$?
person A. Webb    schedule 14.03.2013
comment
@octopusgrabbus У вас опечатка. Выход ошибки говорит _1_, входной переключатель _2_. Слишком много _3_. - person octopusgrabbus; 14.03.2013
comment
Ошибки исчезли после того, как я удалил банку lein и заново сделал самостоятельную установку. Однако проблема сохраняется. - person A. Webb; 14.03.2013
comment
Я принял его, потому что вы ответили так, как я просил. Мне нужна помощь в устранении проблемы, которую вы предоставили. Какой бы ни была эта проблема, на прошлой неделе я провел некоторое время, шаг за шагом разбираясь с кем-то из списка рассылки lein, рассылая результаты туда и обратно. Вот что привело к проблеме, выложенной на github под jline. - person octopusgrabbus; 14.03.2013
comment
Лейн, от которого я завишу ~/bin/lein, не был перезаписан и отображается как лейн, который я использую в _1_. Правки, которые вы мне дали, находятся там. Еще одним тестом было бы удаление ваших правок и сохранение терминала Linux (в SecureCrt) vandyke.com/products/securecrt/index.html - person octopusgrabbus; 14.03.2013
comment
И если я установлю SecureCrt на терминал Linux с терминала VT100, это сработает. Большинству моих приложений Informx 4GL нужны терминалы VT100. - person octopusgrabbus; 14.03.2013

По предложению А. Уэбба я публикую свой выпуск github # 79 для jline в качестве ответа. Это работает с термином, но не с моим SecureCrt. У SecureCrt не было проблем с lein1.


Клавиши управления не работают и отсутствуют в файле ~/.jline.rc

Нет вехи Никто не назначен

(Я пошел дальше и создал ~/.jline.rc, содержащий jline.terminal=auto, после написания этой проблемы.) Моя проблема в том, что мои клавиши управления не работают, и что я могу сделать, чтобы обойти эту проблему.

Вот описание того, что я сделал.

я бегу

java -cp target/jline-2.11-SNAPSHOT-tests.jar:target/jline-2.11-SNAPSHOT.jar -Djline.internal.Log.debug=true jline.example.Example нет

в моем каталоге ~/jline2, где я установил jline2. У меня не работают клавиши управления (ctrl+a, ctrl+e, ctrl+u и Backspace).

Я вхожу в систему Ubuntu 12.04 с bash в качестве оболочки и использую продукт эмулятора терминала VanDyke SecureCrt. Я не вносил недавних изменений в настройки своего эмулятора.

Во-первых, я заметил, что у меня нет файла ~/.jline.rc [DEBUG] Загрузка свойств из: file:/home/cnorton/.jline.rc [DEBUG] Невозможно прочитать конфигурацию из: file:/home/cnorton/.jline .rc java.io.FileNotFoundException: /home/cnorton/.jline.rc (Нет такого файла или каталога)

После трассировки стека остальная часть вывода.

[DEBUG] Создание терминала; type=auto [DEBUG] Конфигурация: скорость 38400 бод; ряды 34; столбцы 117; строка = 0; ввод = ^C; выйти = ^\; стереть = ^?; убить = ^U; эоф = ^D; эол = ; эол2 = ; переключатель = ; начало = ^Q; стоп = ^S; приостановка = ^Z; рпрнт = ^R; вера = ^W; След = ^V; смыв = ^O; мин = 1; время = 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 echoe echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

[DEBUG] Создан терминал: jline.UnixTerminal@1d520c4 [DEBUG] Регистрация выключения-перехватчика: Thread[JLine Shutdown Hook,5,main] [DEBUG] Добавление задачи выключения-перехватчика: jline.TerminalSupport$1@1e9cb75 [DEBUG] Поддержка Ansi: true [DEBUG] Эхо включено: false [DEBUG] Запуск NonBlockingInputStream [DEBUG] Загруженная пользовательская конфигурация: file:/home/cnorton/.inputrc prompt> [DEBUG] Запуск всех задач отключения-перехватчика [DEBUG] Запуск задачи: jline.TerminalSupport$1 @ 1e9cb75 [DEBUG] Удаление хука выключения: Thread[JLine Shutdown Hook, 5, main]

Вот еще несколько результатов отладки при запуске

export JLINE_LOGGING=trace && lein trampoline запустить в клонированном каталоге git clone git://github.com/trptcolin/reply.git Обратите внимание, что управляющие клавиши работают.

[DEBUG] Создание терминала; type=unix [TRACE] Выполняется: [sh,-c,stty -a ‹ /dev/tty] [TRACE] Результат: скорость 38400 бод; ряды 34; столбцы 117; строка = 0; ввод = ^C; выйти = ^\; стереть = ^?; убить = ^U; эоф = ^D; эол = ; эол2 = ; переключатель = ; начало = ^Q; стоп = ^S; приостановка = ^Z; рпрнт = ^R; вера = ^W; След = ^V; смыв = ^O; мин = 1; время = 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 echoe echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

[DEBUG] Конфигурация: скорость 38400 бод; ряды 34; столбцы 117; строка = 0; ввод = ^C; выйти = ^\; стереть = ^?; убить = ^U; эоф = ^D; эол = ; эол2 = ; переключатель = ; начало = ^Q; стоп = ^S; приостановка = ^Z; рпрнт = ^R; вера = ^W; След = ^V; смыв = ^O; мин = 1; время = 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 echoe echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

[DEBUG] Создан терминал: jline.UnixTerminal@74a7af [DEBUG] Регистрация выключения-перехватчика: Thread[JLine Shutdown Hook,5,main] [DEBUG] Добавление задачи выключения-перехватчика: jline.TerminalSupport$1@183e6d4 [DEBUG] Поддержка Ansi: true [TRACE] Выполняется: [sh,-c,stty -icanon min 1 -icrnl -inlcr ‹ /dev/tty] [TRACE] Результат: [TRACE] Выполняется: [sh,-c,stty -echo ‹ /dev/ tty] [TRACE] Результат: [DEBUG] Эхо включено: false [DEBUG] Запуск NonBlockingInputStream [DEBUG] Загруженная пользовательская конфигурация: файл:/home/cnorton/.inputrc [TRACE] Загрузка истории из: /home/cnorton/.jline- answer.history user=> [TRACE] Выполняется: [sh,-c,stty intr undef ‹ /dev/tty] [TRACE] Результат: [TRACE] Нажатие клавиши: 1 [TRACE] Привязка: BEGINNING_OF_LINE [TRACE] Нажатие клавиши: 5 [ TRACE] Привязка: END_OF_LINE [TRACE] Нажатие клавиши: 21 [TRACE] Привязка: UNIX_LINE_DISCARD [TRACE] Нажатие клавиши: 127 [TRACE] Привязка: BACKWARD_DELETE_CHAR

Я с удовольствием опубликую дополнительную информацию о своей рабочей станции, и я попробую это на системе, отличной от Ubuntu, для дальнейшего тестирования. Я знаю, что есть что-то, что мне не хватает, чтобы исправить это как часть обновления lein1 до lein2.


person octopusgrabbus    schedule 14.03.2013
comment
cnorton@steamboy:~/reply$ export JLINE_LOGGING=trace && lein trampoline run REPL-y 0.2.0-SNAPSHOT Clojure 1.4.0 Выход: Control+D или (выход) или (выход) Команды: (пользователь/помощь) Документы: (имя-функции-документа) (найти-документ "часть-имени-здесь") Источник: (имя-исходной-функции-здесь) (имя-функции-пользователя/источника-здесь) Javadoc: (javadoc java-object- or-class-here) Примеры с clojuredocs.org: clojuredocs или cdoc (user/clojuredocs "ns-here" "name-here") [DEBUG] Загрузка свойств из: file:/home/cnorton/.jline.rc [DEBUG ] Загруженные свойства: [DEBUG] jline.terminal=unix [TRACE] java.lang.Throwable: CREATE MARKER в jline.TerminalFactory.create(TerminalFactory.java:50) в jline.TerminalFactory.get(TerminalFactory.java:159) в jline.console.ConsoleReader.(ConsoleReader.java:226) в jline.console.ConsoleReader.(ConsoleReader.java:218) в jline.console.ConsoleReader.(ConsoleReader.java:210) в answer.reader.simple_jline$setup_console_reader. вызывать(simple_jline.clj:39) в answer.reader.simple_jline$get_input_lin e.invoke(simple_jline.clj:74) в answer.reader.simple_jline$safe_read_line$fn__941.invoke(simple_jline.clj:101) в clojure.lang.Atom.swap(Atom.java:37) в clojure.core$swap_BANG_ .invoke(core.clj:2108) по адресу answer.reader.simple_jline$safe_read_line.invoke(simple_jline.clj:99) по адресу answer.eval_modes.nrepl$safe_read_line.invoke(nrepl.clj:55) по адресу answer.eval_modes.nrepl$ parsed_forms.invoke(nrepl.clj:88) по адресу answer.eval_modes.nrepl$run_repl.invoke(nrepl.clj:139) по адресу answer.eval_modes.nrepl$main.invoke(nrepl.clj:227) по адресу answer.main$launch_nrepl $fn__3187.invoke(main.clj:63) в clojure.core$with_redefs_fn.invoke(core.clj:6585) в response.main$launch_nrepl.invoke(main.clj:62) в answer.main$launch.invoke( main.clj:79) в answer.main$_main.doInvoke(main.clj:89) в clojure.lang.RestFn.invoke(RestFn.java:397) в clojure.lang.Var.invoke(Var.java:411) ) в clojure.lang.AFn.applyToHelper(AFn.java:159) в clojure.lang.Var.applyTo(Var.java:532) в answer.ReplyMain.main(ReplyMain.java:14) в sun.reflect.NativeMethodAccessorI mpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method. java:616) на clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93) на clojure.lang.Reflector.invokeStaticMethod(Reflector.java:207) на clojure.lang.Reflector.invokeStaticMethod(Reflector.java:200) на sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect. NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:616) в clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:93) на clojure.lang.Reflector.invokeStaticMethod(Reflector.java:207) на user$eval5.invoke(NO_SOURCE_FILE:1) на clojure.lang.Compiler.eval(Compiler.java:6511) на clojure .lang.Compiler.eval(Compiler.java:6501) в clojure.lang.Compiler.eval(Compiler.java:6477) в clojure.core$eval.invoke(core.clj:2797) в clojure.main$eval_opt. invoke(main.clj:297) в clojure.main$initialize.invoke(main.clj:316) в clojure.main$null_opt.invoke(main.clj:349) в clojure.main$main.doInvoke(main.clj :427) на clojure.lang.RestFn.invoke(RestFn.java:421) на clojure.lang.Var.invoke(Var.java:419) на clojure.lang.AFn.applyToHelper(AFn.java:163) на clojure .lang.Var.applyTo(Var.java:532) в clojure.main.main(main.java:37) - person octopusgrabbus; 14.03.2013