Защо контролните клавиши на 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; intr = ^C; изход = ^\; изтриване = ^?; убивам = ^U; eof = ^D; eol =; eol2 = ; превключвател =; начало = ^Q; стоп = ^S; сусп = ^Z; rprnt = ^R; изтрихме = ^W; следващ = ^V; флъш = ^O; min = 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 echo echoe echok -echonl -noflsh -xcase -tostop -echoprt 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=> 

Има ли някакви директории или файлове, които трябва да бъдат изчистени между lein 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

Опитайте да преинсталирате leiningen. lein2 repl в моята конфигурация стартира REPL-y, изглежда така:

% 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 и т.н. Тъй като изглежда, че REPL -y се стартира нормално, това изглежда е проблем с вашия терминален емулатор. За съжаление, не знам нищо за SecureCrt, така че не мога да помогна тук. Може би тези комбинации се сблъскват със собствените преки пътища на SecureCrt? - person octopusgrabbus; 04.03.2013
comment
Да, но контролните ми клавиши работят добре lein1. Опитвам се да открия разликите. - person Vladimir Matveev; 05.03.2013
comment
Изпълнихте тези стъпки със същите резултати. Няма контролни клавиши. - person octopusgrabbus; 05.03.2013

Бих ви предложил да тествате нова свежа инсталация на lein в нова свежа среда:

  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: ./lein
  6. Изпълнение repl: ./lein repl

След това опитайте команди ctrl-a/e/... .

P.S. Не знам как инсталирахте java във вашата система. Може би трябва да настроите java в нова потребителска среда преди стъпка 5.

person mobyte    schedule 09.03.2013
comment
@octopusgrabbus Опитахте ли други терминални емулатори? - person octopusgrabbus; 09.03.2013
comment
Не, но ще опитам термина в понеделник, седнал на конзолата си, което не мога от вкъщи. Емулаторът не е променен. lein има. 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_s. - person octopusgrabbus; 14.03.2013
comment
Грешките изчезнаха, след като изтрих lein jar и направих повторно самоинсталиране. Проблемът обаче продължава. - person A. Webb; 14.03.2013
comment
Приех го, защото ми отговорихте както поисках. Исках помощ за отстраняване на грешки на проблема, който предоставихте. Какъвто и да е този проблем, прекарах известно време миналата седмица, разглеждайки нещата стъпка по стъпка с някой от пощенския списък на lein, изпращайки резултати напред-назад. Това е, което доведе до проблема, поставен в github под jline. - person octopusgrabbus; 14.03.2013
comment
Lein, от който завися ~/bin/lein, не беше презаписан и се показва като 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

По предложение на A. Webb публикувам моя github проблем #79 за jline като отговор. Това работи с term, но не и с моя 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 none

в моята директория ~/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; intr = ^C; изход = ^\; изтриване = ^?; убивам = ^U; eof = ^D; eol =; eol2 = ; превключвател =; начало = ^Q; стоп = ^S; сусп = ^Z; rprnt = ^R; изтрихме = ^W; следващ = ^V; флъш = ^O; min = 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 echo 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 start [DEBUG] Заредена потребителска конфигурация: file:/home/cnorton/.inputrc prompt> [DEBUG] Изпълнение на всички задачи за изключване [DEBUG] Изпълнение на задача: jline.TerminalSupport$1 @1e9cb75 [DEBUG] Премахване на кука за изключване: Нишка [JLine Shutdown Hook,5,main]

Ето още малко резултати за отстраняване на грешки от изпълнението

експорт JLINE_LOGGING=trace && lein trampoline run в клонирана директория git clone git://github.com/trptcolin/reply.git Моля, обърнете внимание, че контролните клавиши работят.

[DEBUG] Създаване на терминал; type=unix [TRACE] Работи: [sh,-c,stty -a ‹ /dev/tty] [TRACE] Резултат: скорост 38400 бода; редове 34; колони 117; линия = 0; intr = ^C; изход = ^\; изтриване = ^?; убивам = ^U; eof = ^D; eol =; eol2 = ; превключвател =; начало = ^Q; стоп = ^S; сусп = ^Z; rprnt = ^R; изтрихме = ^W; следващ = ^V; флъш = ^O; min = 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 echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

[DEBUG] Конфигурация: скорост 38400 бода; редове 34; колони 117; линия = 0; intr = ^C; изход = ^\; изтриване = ^?; убивам = ^U; eof = ^D; eol =; eol2 = ; превключвател =; начало = ^Q; стоп = ^S; сусп = ^Z; rprnt = ^R; изтрихме = ^W; следващ = ^V; флъш = ^O; min = 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 echo 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] Echo активирано: false [DEBUG] NonBlockingInputStream start [DEBUG] Заредена потребителска конфигурация: file:/home/cnorton/.inputrc [TRACE] Зареждане на хронология от: /home/cnorton/.jline- reply.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 или (изход) или (излизане) Команди: (потребител/помощ) Документи: (doc име-на-функция-тук) (намерете-doc "част-от-име-тук") Източник: (източник име-на-функция-тук) (потребител/име-на-функция-източник-тук) 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) в reply.reader.simple_jline$setup_console_reader. invoke(simple_jline.clj:39) в reply.reader.simple_jline$get_input_line.invoke(simple_jline.clj:74) в reply.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) в reply.reader.simple_jline$safe_read_line.invoke(simple_jline.clj:99) в reply.eval_modes.nrepl$safe_read_line. invoke(nrepl.clj:55) в reply.eval_modes.nrepl$parsed_forms.invoke(nrepl.clj:88) в reply.eval_modes.nrepl$run_repl.invoke(nrepl.clj:139) в reply.eval_modes.nrepl$main .invoke(nrepl.clj:227) в reply.main$launch_nrepl$fn__3187.invoke(main.clj:63) в clojure.core$with_redefs_fn.invoke(core.clj:6585) в reply.main$launch_nrepl.invoke( main.clj:62) в reply.main$launch.invoke(main.clj:79) в reply.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) в reply.ReplyMain .main(ReplyMain.java:14) в sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorI mpl.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(Native Method) в 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.invokeMa tchingMethod (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