Doom-emacs: 如何移动 REPL 窗口?

创建于 2017-08-08  ·  3评论  ·  资料来源: hlissner/doom-emacs

当我使用C-c C-l打开 REPL 时,它创建的窗口看起来很特别(较暗的背景,关闭时退出进程,...)。

它似乎也总是水平分割我的屏幕,这有时很有用,有时很烦人。 对 emacs 了解不够,我似乎无法找到将这个窗口移动到右侧的方法。
我已经通过使用 switch-buffer 命令设法将它放入另一个帧中,但我无法关闭原始的,因为它会终止进程和所有包含缓冲区的帧。

你能给我指点一下如何处理这个特殊的缓冲区以及它是如何显示的吗? :(

谢谢!

discussion

最有用的评论

嗯,这里有很多活动部件。 我不确定您绑定了C-c C-l 。 如果您没有使用+eval/repl命令来启动模式的 repl,那么 Doom 会将 repl 缓冲区视为普通的特殊缓冲区。

在这种情况下,两个相关变量是shackle-default-alignmentshackle-rules ,它们告诉 Emacs 如何处理满足特定条件的窗口。

shackle-rules的末尾有两个包罗万象的规则:

(set! :popup 
  '("^\\*"  :regexp t :noselect t :autokill t)
  '("^ \\*" :regexp t :size 12 :noselect t :autokill t :autoclose t))))

这里的两个问题是:autokill t (确保缓冲区及其相关进程一起被杀死)并且由于没有指定:align ,它求助于shackle-default-alignment ,默认为'below

那么,我们如何解决这个问题?

以下是三种方式:

  1. 只需为您的 repl 指定一个覆盖规则:

    (set! :popup "*my-repl-buffer*" :align 'left :noesc t)
    

    有关详细信息,请参阅M-x doom/describe-setting RET :popup

  2. 在你的 repl 中启用+eval-repl-mode次要模式:

    (add-hook 'inferior-python-mode-hook #'+eval-repl-mode)

    您将在modules/feature/eval/config.el 中找到此弹出规则:

    (set! :popup
     '(:custom (lambda (b &rest _) (buffer-local-value '+eval-repl-mode b)))
     :size 16 :noesc t)
    
  3. C-c C-l绑定到+eval/repl并使用它来调用您的 repl。 大多数模式都有合理的默认值。 如果它没有打开你想要的repl,你可以改变major-mode->repl与:repl设置的关联,例如

    (set! :repl 'python-mode #'+python/repl)

    :repl 想要的函数应该返回一个包含 repl 的缓冲区。


希望有帮助!

所有3条评论

嗯,这里有很多活动部件。 我不确定您绑定了C-c C-l 。 如果您没有使用+eval/repl命令来启动模式的 repl,那么 Doom 会将 repl 缓冲区视为普通的特殊缓冲区。

在这种情况下,两个相关变量是shackle-default-alignmentshackle-rules ,它们告诉 Emacs 如何处理满足特定条件的窗口。

shackle-rules的末尾有两个包罗万象的规则:

(set! :popup 
  '("^\\*"  :regexp t :noselect t :autokill t)
  '("^ \\*" :regexp t :size 12 :noselect t :autokill t :autoclose t))))

这里的两个问题是:autokill t (确保缓冲区及其相关进程一起被杀死)并且由于没有指定:align ,它求助于shackle-default-alignment ,默认为'below

那么,我们如何解决这个问题?

以下是三种方式:

  1. 只需为您的 repl 指定一个覆盖规则:

    (set! :popup "*my-repl-buffer*" :align 'left :noesc t)
    

    有关详细信息,请参阅M-x doom/describe-setting RET :popup

  2. 在你的 repl 中启用+eval-repl-mode次要模式:

    (add-hook 'inferior-python-mode-hook #'+eval-repl-mode)

    您将在modules/feature/eval/config.el 中找到此弹出规则:

    (set! :popup
     '(:custom (lambda (b &rest _) (buffer-local-value '+eval-repl-mode b)))
     :size 16 :noesc t)
    
  3. C-c C-l绑定到+eval/repl并使用它来调用您的 repl。 大多数模式都有合理的默认值。 如果它没有打开你想要的repl,你可以改变major-mode->repl与:repl设置的关联,例如

    (set! :repl 'python-mode #'+python/repl)

    :repl 想要的函数应该返回一个包含 repl 的缓冲区。


希望有帮助!

哦,我忘了提:目前没有办法移动实时弹出窗口(我从来不需要)。 这是我会努力解决的问题。

这似乎是我需要的所有帮助!

更具体地说,我实际上是在谈论intero REPL,它由一个名为intero-repl-load的命令启动。 我不知道它当时使用什么机制。

我最终去了:

(set! :popup "^\\*intero:" :regexp t :align 'right :size 80)

在我的modules/private/ptival/init.el ,效果非常好!

感谢您花时间向我解释这一切! 我想我不会在任何合理的时间内自己解决这个问题! 👍

此页面是否有帮助?
0 / 5 - 0 等级