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 に答える