ah sorry, don't need that `or' in server.el: (unless (or files commands) (switch-to-buffer (get-buffer-create (cond ((stringp initial-buffer-choice) (find-file-noselect initial-buffer-choice)) ((functionp initial-buffer-choice) (funcall initial-buffer-choice)) (t "*scratch*"))) 'norecord)) 2012/12/22 Constantin Kulikov > // Discussion in devel. > https://lists.gnu.org/archive/html/emacs-devel/2012-12/msg00521.html > Short: > I want to be able to set buffer that will be displayed in window of newly > created frame. > I need it for my emacs package, that will save and restore some emacs > state including > last window configurations, opened and displayed buffers and such. > I tried this: add hook to `after-make-frame-functions'. Inside this hook I > do > `(switch-to-buffer )' and frame is switched to that > at first, > but after a short time it's switched to *scratch*. > > The one way I found how to overcome this behaviour is by setting the > `initial-buffer-choice' in the `after-make-frame-functions' hook. One > drawback of this > approach is that it could only be set to name of file, t or nil and so > there is no way to > force switching to buffer without underlying file. This could be fixed int > server.el:1258 > replacing > > (unless (or files commands) > (if (stringp initial-buffer-choice) > (find-file initial-buffer-choice) > (switch-to-buffer (get-buffer-create "*scratch*") > 'norecord))) > > to > (unless (or files commands) > (switch-to-buffer > (get-buffer-create > (or (cond > ((stringp initial-buffer-choice) (find-file-noselect > initial-buffer-choice)) > ((functionp initial-buffer-choice) (funcall > initial-buffer-choice))) > "*scratch*")) > 'norecord)) > > and modified defcustom in in startup.el:41 would be: > > (defcustom initial-buffer-choice nil > "Buffer to show after starting Emacs. > If the value is nil and `inhibit-startup-screen' is nil, show the > startup screen. If the value is a string, visit the specified file > or directory using `find-file'. If t, open the `*scratch*' > buffer. If function, switch to a buffer returned by this function. > > A string value also causes emacsclient to open the specified file > or directory when no target file is specified." > :type '(choice > (const :tag "Startup screen" nil) > (directory :tag "Directory" :value "~/") > (file :tag "File" :value "~/.emacs") > (function :tag "Function") > (const :tag "Lisp scratch buffer" t)) > :version "23.1" > :group 'initialization) > > This code allows setting `initial-buffer-choice' to a function returning > needed buffer. > >