3

In earlier versions of emacs one could use emacs -nw file1 file2 file3 and see three files (and no buffer list) at startup. For recent versions this no longer works. Is it possible to add some code to .emacs to fix this regression? It looks like the limit of 2 is hardcoded in startup.el. One also needs 3, 4...

4
  • Are you sure those files are not just visited in buffers that are not displayed by default?
    – Drew
    Commented Dec 3, 2018 at 2:25
  • Yes, of course. But I want to see them, at the same time.
    – ember
    Commented Dec 3, 2018 at 6:33
  • Then please make that clear in the question. Comments can be deleted at any time. Visiting ("opening") a file is not the same as displaying the buffer that visits it. Your question is about Emacs windows more than it is about files or buffers.
    – Drew
    Commented Dec 3, 2018 at 15:00
  • See also emacs.stackexchange.com/a/36369/15748
    – Basil
    Commented Jan 3, 2019 at 12:33

2 Answers 2

1

I think this changed in emacs 25. As you noted, the behavior is currently hard-coded in startup.el: if there are more than 2 buffers to be shown, Emacs uses one of the windows to show the buffer list. You could enter a bug report -- maybe that limit could be exposed as a variable.

For now, your best bet might be to use emacs-startup-hook, which runs after the command-line options have been processed. You could have a custom function to look at (buffer-list) and display buffers in separate windows, up to some configurable max number of windows. You'll want to filter out uninteresting buffers -- for example, only display buffers associated with a file.

You may be able to use a package like tile or splitter to split up the frame into a suitable number of windows.

1
  • Yes, thank you. The proper variable is probably not the number of files (by default we want to see them all) but the minimum number of visible lines from each displayed buffer, something in the range 2-6, say. However, maybe I am not sufficiently familiar with emacs internals to code such a startup hook.
    – ember
    Commented Dec 4, 2018 at 0:55
1

Does the following code do what you want?

;; allow more than two windows on initial screen
(add-hook 'window-setup-hook #'foo-show-many-buffers)
(defun foo-show-many-buffers ()
  "Call display-buffer for all file arguments."
  (let ((tmp (buffer-list)))
    (while tmp
      (let ((buf (car tmp)))
            (setq tmp (cdr tmp))
            (if (buffer-file-name buf) (display-buffer buf))))))
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.