首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >emacs窗口可以“部分”专用吗?

emacs窗口可以“部分”专用吗?
EN

Stack Overflow用户
提问于 2014-12-31 22:29:41
回答 1查看 517关注 0票数 5

我使用非常类似于dedicated.eldedicate-windows-manually.el将某些窗口手动标记为对其缓冲区的“专用”,并且对于打开新缓冲区的各种命令(grep、编译等)也是不可替代的。

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

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

我做了一个小小的尝试,但它不能正常工作,似乎是一种误导性的方法,很可能漏掉了很多案例。

(问题之一是,当set-window-dedicated-p应用于窗口时,“专用”次要模式与缓冲区相关联;这是可以克服的,但我仍然认为必须有更好的方法来实现我想要的.)

代码语言:javascript
运行
复制
(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的答案,执行了以下操作:

代码语言:javascript
运行
复制
(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函数的测试将window-dedicated-p重置为nil,因此我仍然没有一种技术来防止弹出缓冲区使用或拆分窗口,并允许find-file等在该窗口内正常工作。

clarification

抱歉没说清楚。我想要发生的事情如下:

  • 我将窗口标记为弱专用(或任何可能存在的等价物)
  • 我调用grep、编译等,它们既不分割该窗口,也不替换该窗口中的缓冲区(相反,拆分其他未标记为专用的窗口)。
  • 在弱专用窗口中,我调用了find-file,它替换了窗口中的缓冲区,但将窗口留给现在更改的缓冲区。

这是我所希望的最后一点不起作用的地方:在find-file之后,窗口不再是弱专用的(window-dedicated-pnil)。由于所讨论的属性与窗口相关联,因此,更改缓冲区会影响该窗口属性,这是令人惊讶的。

EN

回答 1

Stack Overflow用户

发布于 2014-12-31 23:05:34

参见Elisp手册,节点Dedicated Windows。如果您使用函数set-window-dedicated-p为窗口提供一个非nil和非t值,那么函数set-window-buffer将把它视为一个弱专用窗口。这可能就是你要找的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27726897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档