如何分情况决定是否打开欢迎buffer?

我想直接打开emacs的时候,让它显示默认的欢迎的buffer。用emacs打开文件的时候,不显示默认的欢迎buffer,因为这样会将界面分成两个窗口,文件窗口就很小了。这样能否实现?

判断一下 command-line-args 的长度,如果超过 2 就说明是通过

emacs xxx 

这种方式打开。

我这样写似乎不行:

 (if (> (length command-line-args) 2)
        (setq inhibit-startup-message t))

没有任何效果

(add-hook 'after-init-hook
          (defun no-startup-screen ()
            (if (>= (length command-line-args) 2)
                (setq inhibit-startup-screen t
                      inhibit-startup-message t
                      inhibit-startup-buffer-menu t))))
1 个赞

这回成功了,谢谢。看来还是elisp语言不过关啊,得认真学习。

通常不建议打开欢迎 buffer。emacs可以保存desktop(下次打开时的界面保持上次退出时的界面)。

这个功能挺有用的。

保存desktop的功能是很好啊,我搜索一下先。

想了一下,也要分情况:如果直接打开emacs,那么就打开上次退出的界面;如果用emacs打开文件,就不需要打开上次的界面。这样可以利用上面的代码改动一下。 :grinning:

(add-hook 'after-init-hook
          (defun if-desktop-save ()
            (if (< (length command-line-args) 2)
                (setq desktop-save-mode t))))

我先把欢迎界面直接设置关闭了,然后执行上面这个代码,没有报错,但这样也没有效果,不保存上次退出时的界面。

(desktop-save-mode 1)

;; 如果用emacs打开文件则只打开文件,如果直接打开emacs则开启上次退出的非空界面
(add-hook 'after-init-hook
          (defun if-desktop-save ()
            (if (< (length command-line-args) 2)
		(progn
		  (setq desktop-dirname             "~/.emacs.d/desktop/"
			desktop-base-file-name      "emacs.desktop"
		        desktop-base-lock-name      "lock"
		        desktop-path                (list desktop-dirname)
		        desktop-save                t
		        desktop-files-not-to-save   "^$" ;reload tramp paths
		        desktop-load-locked-desktop nil
		        desktop-auto-save-timeout   10)
		  (desktop-save-mode 1)
		  (desktop-read)))))

这个还是不行,要把条件判断放在desktop-read前面才对。打开文件时,不打开上次的界面。

;; 如果用emacs打开文件则只打开文件,如果直接打开emacs则开启上次退出的非空界面
(add-hook 'after-init-hook
          (defun if-desktop-read ()
	    (setq desktop-dirname             "~/.emacs.d/desktop/"
		  desktop-base-file-name      "emacs.desktop"
		  desktop-base-lock-name      "lock"
		  desktop-path                (list desktop-dirname)
		  desktop-save                t
		  desktop-files-not-to-save   "^$" ;reload tramp paths
		  desktop-load-locked-desktop nil
		  desktop-auto-save-timeout   10)
	    (desktop-save-mode 1)
	    (if (< (length command-line-args) 2)
		(desktop-read))))

以上缩进有点问题