【问题标题】:Do stuff when selecting a window选择窗口时做的事情
【发布时间】:2014-01-05 14:32:36
【问题描述】:

我一直在查看the available hooks,但是当您切换窗口时,它们似乎都没有触发。

我正在尝试为所选窗口激活次要模式:

(defvar active-window (frame-selected-window))

(defun active-window-switch (&rest _)
  (when active-window
    (with-selected-window active-window
      (active-window-mode nil)))
  (setq active-window (frame-selected-window))
  (active-window-mode t))

(define-minor-mode active-window-mode
  "Minor mode to distinguish the selected window."
  :global nil :group 'active-window :init-value nil :lighter " Active")

(add-hook 'window-configuration-change-hook #'active-window-switch)

(provide 'active-window)

我可以使用什么钩子或函数来代替window-configuration-change-hook(仅在我创建或退出窗口时触发)?

【问题讨论】:

  • 最终,我想解决这个问题:stackoverflow.com/q/1516830/352796
  • 建议选择窗口有帮助吗? (defadvice select-window (在 select-window-and-do-stuff 激活后) (do-stuff))
  • @AlexVorobiev,谢谢,它成功了!您可以将其发布为答案吗?
  • 如果我没记错的话,您的次要模式将附加到 缓冲区,而不是 窗口。这应该不是问题,除非同一个缓冲区被多次显示(在不同的窗口甚至帧中)

标签: emacs elisp


【解决方案1】:

select-window 是在许多情况下内部使用的操作,可能在单个命令中使用数千次。您并不总是真正关心选定的窗口,而只是在不运行命令时才关心。所以更好地勾搭自己的地方是post-command-hook

【讨论】:

  • 谢谢,斯特凡。我可能还应该检查选定的窗口是否发生了变化,以免它“做事”太频繁。接受作为更正确的答案。
【解决方案2】:

您可以尝试建议选择窗口:

(defadvice select-window (after select-window-and-do-stuff activate) 
    (do-stuff))

或者,如果您想在您要先离开的窗口中取消设置:

(defadvice select-window (around select-window-and-do-stuff activate)
    (undo-stuff)
    ad-do-it 
    (do-stuff))

【讨论】:

    猜你喜欢
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2016-08-23
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多