“屏幕”以某种方式在^ Z之后取消映射emacs中的箭头键

时间:2010-12-28 17:52:21

标签: emacs gnu-screen

每次我使用emacs时,我都可以使用箭头键来移动光标。但是当我在屏幕上运行emacs时,我将emacs推送到后台(ctrl-Z)然后将其返回到前台,我的箭头键不再有效,例如。

M-[ a is undefined

当我在屏幕外运行emacs时,不会发生此行为。

有什么想法吗?这是一些屏幕设置吗?

7 个答案:

答案 0 :(得分:29)

对于它的价值,这恰好发生在我身上,我能够通过断开屏幕然后重新连接来纠正它:

Ctrl+A, d

screen -R

答案 1 :(得分:24)

屏幕(以及几乎所有其他终端仿真器)模拟的vt100终端有两种模式,正常模式和应用模式。普通模式用于逐行应用程序和全屏应用程序的应用程序模式。模式之间的区别在于箭头键发送different control sequences(我不知道为什么):例如全屏模式下为ESC O A,正常模式下为ESC [ A。似乎当你按 Ctrl + Z 时,Emacs会将终端切换回正常模式,但当你将它返回到前台时,它不会切换到全屏再次模式,或屏幕没有正确响应Emacs的命令。

一种可能的解决方法是在.screenrc的两种模式下bind the same character sequences,例如

bindkey -k ku stuff ^[OA
bindkey -k kd stuff ^[OB
bindkey -k kr stuff ^[OC
bindkey -k kl stuff ^[OD

另一种可能的解决方法是告诉Emacs解释两个关键序列,而不管终端说什么。虽然这原则上是一个坏主意,因为有些终端可能会将这些密钥序列用于不同的密钥,但我从来没有遇到过这样一个不兼容的终端,我怀疑在过去的20年或更长时间内都没有这样做。

(define-key function-key-map "\eOA" [up])
(define-key function-key-map "\e[A" [up])
(define-key function-key-map "\eOB" [down])
(define-key function-key-map "\e[B" [down])
(define-key function-key-map "\eOC" [right])
(define-key function-key-map "\e[C" [right])
(define-key function-key-map "\eOD" [left])
(define-key function-key-map "\e[D" [left])

真正的解决方案是找出造成问题的原因。它可能是Screen中的错误,Emacs中的错误,Screen运行的终端(模拟器)中的错误,termcap或terminfo数据库中的错误或错误配置。如果你想调查一下,首先要提到你的操作系统,运行什么终端(模拟器)屏幕,你在哪里获得屏幕(或者你如何编译它,如果这就是你所做的)以及什么版本,同上Emacs,无论你是否在屏幕外观察到同样的问题,屏幕内的echo $TERMecho -E "$TERMCAP"的输出。

答案 2 :(得分:3)

我的xterm窗口全屏,并且在屏幕上,这发生了。 我双击xterm边框以全屏显示。 Ctrl-z到后台emacs。然后fg把它带回来然后箭头键工作。我可以毫无问题地进入全屏。

我应该学习所有的emacs导航命令,但是我迁移到箭头键的旧习惯很难:/

答案 3 :(得分:2)

首先,将emacs推送到后台。

Ctrl+z 

再次走在前列。

fg

答案 4 :(得分:1)

不是答案,但值得注意的是,在Ubuntu的终端或xterm上运行tmux上的GNU emacs时也会出现所描述的行为

快速解决方法是不在tmux中运行emacs。

版本

Emacs: 2014-06-06关于布朗尼的GNU Emacs 24.3.1(x86_64-pc-linux-gnu),由Debian修改)

tmux: 1.9

Ubuntu: 14.10

答案 5 :(得分:1)

我们在这里遇到同样的问题,我们发现的解决方法(但我们仍然需要找到问题的根源)是从emacs中手动设置“应用程序序列”:

  • 导航至*scratch*缓冲区
  • 粘贴:(send-string-to-terminal "\e[?1h")
  • M-x eval-buffer

和voilà。

此外,简单C-z fg可能已足够,输入速度更快

答案 6 :(得分:0)

这是一个解决方案,对我来说,一旦破坏就会破坏它(ubuntu 14.04,emacs 24.1)。如果不从屏幕上分离,请尝试以下操作:

1)Ctrl-z停止emacs。

2)启动另一个emacs:emacs -nw

3)在第二个emacs中按Ctrl-z,瞧!,第一个emacs将再次运行。 (然后我重新打开第二个emacs并关闭它Ctrl-x Ctrl-c)。