4

我已经成功升级到lein2,并且运行lein repl成功。我使用 VanDyke 的 SecureCrt 登录到我的 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; eof = ^D; eol = ; eol2 = ; 开关 = ; 开始 = ^Q; 停止 = ^S; 悬念 = ^Z; rprnt = ^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 echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke cnorton@steamboy:~/projects/clojure/wtr-usage1$

这是新 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 上创建一个问题,我做到了。

4

5 回答 5

1

这不应该发生。尝试set -o emacs在 bash 中执行,但 lein 脚本中不应该有任何内容来禁用它。

于 2013-03-04T16:03:31.710 回答
1

尝试重新安装 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 有所有常用的编辑命令。如果你没有得到这个,那么你的安装应该有问题。

于 2013-03-04T16:14:05.697 回答
1

我建议您在新环境中测试新的 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/... 。

PS我不知道你是如何在你的系统中安装java的。也许您应该在第 5 步之前在新用户环境中设置 java。

于 2013-03-09T02:59:57.043 回答
1

这听起来类似于Cygwin 上 JLine 的问题。尝试相同的解决方法您的系统值得一试。

将 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=$?
于 2013-03-14T00:50:47.600 回答
0

根据 A. Webb 的建议,我将我的 github issue #79 for 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 none

在我安装 jline2 的 ~/jline2 目录中。我的控制键(ctrl+a、ctrl+e、ctrl+u 和 Backspace)不起作用。

我正在使用 bash 作为 shell 并使用 VanDyke SecureCrt 终端仿真器产品登录 Ubuntu 12.04 系统。我最近没有对我的模拟器进行任何设置更改。

首先,我注意到我没有 ~/.jline.rc 文件 [DEBUG] Loading properties from: file:/home/cnorton/.jline.rc [DEBUG] Unable to read configuration from: file:/home/cnorton/.jline .rc java.io.FileNotFoundException: /home/cnorton/.jline.rc (没有这样的文件或目录)

在堆栈跟踪之后,这是输出的其余部分。

[DEBUG] 创建终端;type=auto [DEBUG] 配置:速度 38400 波特;第 34 行;第 117 栏;线 = 0; 内部 = ^C; 退出 = ^\; 擦除 = ^?; 杀死 = ^U; eof = ^D; eol = ; eol2 = ; 开关 = ; 开始 = ^Q; 停止 = ^S; 悬念 = ^Z; rprnt = ^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 echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

[DEBUG] 创建终端:jline.UnixTerminal@1d520c4 [DEBUG] 注册shutdown-hook: Thread[JLine Shutdown Hook,5,main] [DEBUG] 添加shutdown-hook 任务:jline.TerminalSupport$1@1e9cb75 [DEBUG] Ansi 支持: true [DEBUG] Echo 启用:false [DEBUG] NonBlockingInputStream start [DEBUG] 加载用户配置:file:/home/cnorton/.inputrc prompt> [DEBUG] 运行所有关机挂钩任务 [DEBUG] 运行任务:jline.TerminalSupport$1 @1e9cb75 [DEBUG] 删除关机钩子:线程[JLine 关机钩子,5,main]

这是运行中的更多调试输出

export JLINE_LOGGING=trace && lein trampoline 在克隆目录中运行 git clone git://github.com/trptcolin/reply.git 请注意控制键的作用。

cnorton@steamboy:~/reply$ export JLINE_LOGGING=trace && lein trampoline run REPL-y 0.2.0-SNAPSHOT Clojure 1.4.0 Exit: Control+D or (exit) o​​r (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) 来自 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 at jline.TerminalFactory.create(TerminalFactory.java:50) at jline.TerminalFactory.get(TerminalFactory.java:159) at 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) 回复.main$launch_nrepl.invoke(main.clj:62) 回复。main$launch.invoke(main.clj:79) at reply.main$_main.doInvoke(main.clj:89) at clojure.lang.RestFn.invoke(RestFn.java:397) at 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(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(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.invokeMatchingMethod (Reflector.java:93) at clojure.lang.Reflector.invokeStaticMethod(Reflector.java:207) at user$eval5.invoke(NO_SOURCE_FILE:1) at clojure.lang.Compiler.eval(Compiler.java:6511) at clojure .lang.Compiler.eval(Compiler.java:6501) at clojure.lang.Compiler.eval(Compiler.java:6477) at clojure.core$eval.invoke(core.clj:2797) at clojure.main$eval_opt。在 clojure.main$null_opt.invoke(main.clj:349) 在 clojure.main$initialize.invoke(main.clj:316) 在 clojure.main$main.doInvoke(main.clj) 调用(main.clj:297) :427) 在clojure.lang 的clojure.lang.RestFn.invoke(RestFn.java:421) 的clojure.lang.Var.invoke(Var.java:419)。AFn.applyToHelper(AFn.java:163) 在 clojure.lang.Var.applyTo(Var.java:532) 在 clojure.main.main(main.java:37)

[DEBUG] 创建终端;type=unix [TRACE] 运行:[sh,-c,stty -a < /dev/tty] [TRACE] 结果:速度 38400 波特;第 34 行;第 117 栏;线 = 0; 内部 = ^C; 退出 = ^\; 擦除 = ^?; 杀死 = ^U; eof = ^D; eol = ; eol2 = ; 开关 = ; 开始 = ^Q; 停止 = ^S; 悬念 = ^Z; rprnt = ^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 echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

[DEBUG] 配置:速度 38400 波特;第 34 行;第 117 栏;线 = 0; 内部 = ^C; 退出 = ^\; 擦除 = ^?; 杀死 = ^U; eof = ^D; eol = ; eol2 = ; 开关 = ; 开始 = ^Q; 停止 = ^S; 悬念 = ^Z; rprnt = ^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 echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

[DEBUG] Created Terminal: jline.UnixTerminal@74a7af [DEBUG] Registering shutdown-hook: Thread[JLine Shutdown Hook,5,main] [DEBUG] 添加shutdown-hook任务: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 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


于 2013-03-14T12:34:46.413 回答