【问题标题】:Can emacs window be "partially" dedicated?emacs 窗口可以“部分”专用吗?
【发布时间】:2015-01-04 11:55:16
【问题描述】:

我正在使用dedicated.el,它与dedicate-windows-manually.el 非常相似,可以手动将某些窗口标记为“专用”到它们的缓冲区,并且也无法通过打开新缓冲区的各种命令(grep、编译等)进行拆分。 .

但我真的只想要第二部分。

换句话说,我希望find-filekill-bufferswitch-buffer 等能够像当前窗口专用一样工作。但我希望其他命令(grepcompile)尊重专用状态而不拆分该窗口。

我对此做了一个小小的尝试,但它不能正常工作,而且似乎是一种错误的做法,可能会漏掉很多案例。

(其中一个问题是“专用”次要模式与缓冲区相关联,而 set-window-dedicated-p 适用于 窗口;这可以克服,但我仍然觉得必须有一个更好的方式来完成我想要的......)

(defun with-undedicated (f)
  (interactive)
  (let ((was-dedicated (bound-and-true-p dedicated-mode)))
    (progn
      (if was-dedicated (dedicated-mode))
      (command-execute f)
      (if was-dedicated (dedicated-mode)))))

(defun undedicated-find-file ()
  (interactive)
  (with-undedicated 'ido-find-file))

(defun undedicated-kill-buffer ()
  (interactive)
  (with-undedicated 'ido-kill-buffer))

(defun undedicated-switch-buffer ()
  (interactive)
  (with-undedicated 'ido-switch-buffer))

(global-set-key (kbd "C-x C-f") 'undedicated-find-file)
(global-set-key (kbd "C-x k") 'undedicated-kill-buffer)
(global-set-key (kbd "C-x b") 'undedicated-switch-buffer)

编辑

为了测试 Drew 的回答,我们做了以下测试:

(defun make-weak-dedicated ()
  (interactive)
  (set-window-dedicated-p (selected-window) "weak"))

(defun dedicated-status ()
  (interactive)
  (minibuffer-message "window-dedicated-p: %s" (window-dedicated-p (selected-window))))

使窗口“弱”专用确实可以满足我的要求:grep 和其他弹出缓冲区不会替换弱专用窗口中的缓冲区。然而,在那个弱专用窗口中,find-file 似乎将window-dedicated-p 重置为nil,正如我的dedicated-status 函数所测试的那样,所以我仍然没有防止弹出缓冲区的技术从使用或拆分窗口允许find-file等在该窗口内正常工作。

澄清

抱歉,不清楚。这就是我想要发生的事情:

  • 我将一个窗口标记为 [弱] 专用(或任何可能存在的等效项)
  • 我调用 grep、编译等,它们不会拆分该窗口,也不会替换该窗口中的缓冲区(而是拆分其他一些未标记为专用的窗口)
  • 在弱专用窗口中,我调用find-file,它替换了窗口中的缓冲区但将窗口弱专用留给现在更改的缓冲区

最后一点没有像我希望的那样工作:在find-file 之后,窗口不再是弱专用的(window-dedicated-pnil)。由于所讨论的属性与窗口相关联,我发现更改缓冲区会影响该窗口属性令人惊讶,但确实如此。

【问题讨论】:

  • find-file 替换当前窗口中的缓冲区。我不知道您允许它“在该窗口内正常工作”是什么意思。尝试描述您正在寻找的行为 - 例如一个食谱:你这样做,然后这个……你想看到这个,然后那个……结果。

标签: emacs


【解决方案1】:

参见 Elisp 手册,节点 Dedicated Windows。如果您使用函数set-window-dedicated-p 给窗口一个非nil 和非t 值,那么函数set-window-buffer 会将其视为弱专用窗口。这可能就是您正在寻找的。​​p>

【讨论】:

  • window-dedicated-p 设置为字符串似乎确实有效,谢谢。唯一的问题是在find-file 之后,值恢复为nil
  • 不知道你的意思 - 举一个例子(食谱)来说明问题。也许您只是说弱专用不是强专用(?),因此您可以在同一窗口中访问另一个缓冲区(例如文件)。
  • 我在原始问题中添加了一些示例代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多