1

我正在尝试唯一标识一个窗口,以便在我再次按下某个键时可以选择并删除该窗口,尽管我在执行此操作时遇到了麻烦。

(setq split-window-right-toggle-var nil)

(defun split-window-right-toggle ()
  (interactive)
  (if split-window-right-toggle-var 
      (progn
        (right-split-undo)
        (setq split-window-right-toggle-var nil))
    (progn
      (right-split-do)
      (setq split-window-right-toggle-var t))))

(defun right-split-do ()
  (interactive)
  (split-window-right)
  (other-window 1))

(defun right-split-undo ()
  (interactive)
  (other-window -1)
  (delete-window))

这段代码的问题在于它在很大程度上取决于哪个窗口处于活动状态,因为可以更改我的窗口的状态并删除错误的窗口,我可以唯一地给我的窗口一个名称,然后以该窗口名称为目标进行删除吗?我是 Emacs lisp 的新手,如果有任何帮助,我将不胜感激。

4

2 回答 2

1

(selected-window)返回对当前窗口的引用。

(next-window)返回下一个窗口。使用 Emacs 的自我记录功能来了解更多信息或参考手册。

这是我将如何编写您的命令

(defvar ej-spit-window-saved nil)

(defun ej-split-window-right-toggle ()
  "toggle split right"
  (interactive)
  (setq ej-split-window-saved
        (if (and ej-split-window-saved
                 (frame-visible-p (window-frame ej-split-window-saved)))
            (delete-window ej-split-window-saved)
          (split-window-right))))

笔记

  • 前缀函数/变量以便于调试。
  • 记录代码永远不会太早。
于 2013-02-09T09:27:32.617 回答
1

你可以尝试这样的事情:

(setq window-names (make-hash-table :test 'equal ))                                                                                                  

(defun name-window ()                                                                                                                                
  (interactive)                                                                                                                                      
  (let ((name (read-input "Name: ")))                                                                                                                
    (setf (gethash name window-names) (selected-window))))                                                                                           

(defun del-window ()                                                                                                                                 
  (interactive)                                                                                                                                      
  (let ((name (read-input "Name: ")))                                                                                                                
    (delete-window (gethash name window-names)))) 
于 2013-02-09T13:07:48.177 回答