第二个eshell缓冲区在顶部而不是底部打开

时间:2014-03-28 08:41:25

标签: emacs elisp

期望的函数算法

|------------------|
| old buffer - 70% |
|                  |
|                  |
|                  |
|------------------|
|                  |
| eshell - 30%     |
|------------------|
  1. 如果缓冲区中只有一个窗口

    1.1将缓冲区拆分为2个部分:顶部 - 高度的70%,底部 - 高度的30%。

    1.2。将光标放在底部缓冲区。

    1.3。打开eshell。

  2. 代码

    (defun new-eshell ()
      (interactive)
      (when (one-window-on-screen-p)
        (let ((new-window (split-window-vertically 30)))
          (select-window new-window)
          (eshell "eshell"))))
    
    (defun one-window-on-screen-p ()
      (= (length (window-list)) 1))
    
    (global-set-key "\M-e" 'new-eshell)
    

    问题

    当我第一次点击Alt-e时,该功能正常工作。但是如果我隐藏了eshell缓冲区,并且第二次单击Alt-e,则窗口将以50/50的比例分割,并且"*eshell<2>*"缓冲区将在顶部而不是底部打开。

1 个答案:

答案 0 :(得分:1)

我认为问题在于split-lines-vertically的参数是指多行,而不是一定比例。这段代码对我有用:

(defun new-eshell ()
  (interactive)
  (when (one-window-on-screen-p)
    (let* ((lines (window-body-height))
           (new-window (split-window-vertically (floor (* 0.7 lines)))))
      (select-window new-window)
      (eshell "eshell"))))

(顺便说一句,如果我将浮点数传递给split-lines-vertically,我获得了奇怪的结果,所以我不得不使用floor