在我通常的设置中,我使用 matlab-emacs 通过 Emacs GUI 运行 Matlab。我在 Linux 服务器上运行 Matlab 和 emacs,并使用 ssh 和 X 转发,因此这一切都显示在我本地的 Ubuntu 笔记本电脑上。
我想通过在屏幕中运行 emacs 来使此设置进一步复杂化。这主要适用于一个值得注意的例外,即告诉 Matlab 运行代码块的键盘快捷键Ctrl+ Alt+似乎没有执行任何操作。Enter我想这个快捷方式可能会被发送到我自己机器上本地的某个地方?当我尝试运行此命令时,我注意到笔记本电脑上终端顶部的菜单栏发生了变化。
有谁对如何让Ctrl++按预期运行Matlab代码块有一个聪明的建议吗?AltEnter
答案1
终端传输字符,而不是密钥。当您按下Ctrl+ Alt+等键或组合键时Enter,终端必须将其转换为字符或字符序列。没有足够的字符来表示所有键,因此大多数此类组合都作为转义序列传输:以转义字符开头的字符序列。
尽管有一些常见的约定,但转义序列没有通用标准。例如,Alt+key通常发送转义字符,后跟字符或转义序列钥匙;但Ctrl+发送的内容没有标准Enter。有些终端是可配置的,有些具有硬编码转义序列。
也可以看看使用终端时的键绑定问题获取更详细的解释以及 Xterm 的可能解决方案。
如果您无法通过您喜欢的终端传输Ctrl++ ,您可以选择不同的键绑定。当您在 GUI Emacs 中使用 Matlab 时,请按 确定运行的命令++ 。然后输入其中是命令名称;这将告诉您绑定了什么键。如果没有可以方便键入的绑定,请在初始化文件中添加一个,类似于AltEnterCtrlAltEnterC-h c C-M-return
C-h w matlab-foo RET
matlab-foo
matlab-foo
(defun my-eval-after-load-matlab ()
(define-key matlab-mode-map [f9] 'matlab-foo))
(eval-after-load "matlab" '(my-eval-after-load-matlab))
对于"matlab"
,替换为定义该命令的 Lisp 文件的名称matlab-foo
。要了解它是什么,请输入C-h k C-M-return
;这告诉你类似“CM-return 运行命令 matlab-foo,它是 `matlab.el` 中的交互式编译 Lisp 函数”。 Lisp 文件的名称是该行的最后一位,减去该.el
部分。对于matlab-mode-map
,替换键盘映射的名称;这通常是主要模式的名称(C-h v major-mode RET
“其值为 matlab-mode”)加上-map
末尾。
或者,您真的需要使用 Screen 吗?如果您只是使用它来使 Emacs 在断开连接后继续存在,那么实际上没有必要这样做。将 Emacs 作为守护进程 ( ) 启动,并通过运行打开一个新的 GUI 框架emacs --daemon
通过 SSH 远程连接到它。emacsclient -c
您可以在多个显示器上打开和关闭 GUI 框架,即使显示器来来去去,Emacs 也将继续运行。
1实际上是字节,但这一点在这里无关紧要。