Emacs: Get new-frame and emacsclient -c to use set frame size?
dot-emacs, elisp, emacs, emacsclient
Solution
You might try adding the following hook to your Emacs start-up file (normally, `~/.emacs`), i.e.:
(add-hook 'before-make-frame-hook
#'(lambda ()
(add-to-list 'default-frame-alist '(left . 0))
(add-to-list 'default-frame-alist '(top . 0))
(add-to-list 'default-frame-alist '(height . 70))
(add-to-list 'default-frame-alist '(width . 80))))
Or, if you want to reload the whole `.emacs` file:
(add-hook 'before-make-frame-hook #'(lambda () (load-file "~/.emacs")))
The former hook is almost certainly preferable, as reloading the entire `.emacs` file is probably not only unnecessary and wasteful of resources, but also has the potential to cause errors or weird behavior (depending on the file's contents).
To elaborate, hooks are variables which define lists of commands that are executed when specific events happen within your Emacs session, e.g., the loading of a major editing mode, or, as in this case, the creation of a new frame. See the relevant Emacs manual page on hooks for more information. Generally speaking, if you want some function to be executed every time a particular event occurs within Emacs, adding said function to the right pre-existing hook is probably the best way to go about it.
Problem
I am new to StackOverflow and I have a question about an issue that has been virtually the only thing to irk me in my quest to master Emacs. I configured my `.emacs` file to set the default frame size for Emacs to 70 rows and 80 columns like so: ``` (add-to-list 'default-frame-alist '(left . 0)) (add-to-list 'default-frame-alist '(top . 0)) (add-to-list 'default-frame-alist '(height . 70)) (add-to-list 'default-frame-alist '(width . 80)) ``` This works fine when starting Emacs, the problem is that when I launch a new frame using `new-frame` or `emacsclient -c` these settings are not respected. Is there a way to force `emacsclient` and `new-frame` to read the settings in the `.emacs` file when they are executed? Edit: Here is my `.emacs` file: ``` ;;This setting is meant to force emacs to read size settings before make-frame. (add-hook 'before-make-frame-hook #'(lambda () (add-to-list 'default-frame-alist '(left . 0)) (add-to-list 'default-frame-alist '(top . 0)) (add-to-list 'default-frame-alist '(height . 70)) (add-to-list 'default-frame-alist '(width . 80)))) ;;disable annoying welcome screen. (setq inhibit-splash-screen t) (setq inferior-lisp-program "/usr/bin/abcl") (add-to-list 'load-path "/usr/share/emacs/site-lisp/slime/") (require 'slime) (slime-setup) (add-to-list 'auto-mode-alist '("\\.lisp$" . lisp-mode)) (add-to-list 'auto-mode-alist '("\\.cl$" . lisp-mode)) (add-to-list 'auto-mode-alist '("\\.asd$" . lisp-mode)) (require 'slime) (slime-setup) (eval-after-load "slime" '(progn (setq slime-complete-symbol*-fancy t slime-complete-symbol-function 'slime-fuzzy-complete-symbol slime-when-complete-filename-expand t slime-truncate-lines nil slime-autodoc-use-multiline-p t) (slime-setup '(slime-fancy slime-asdf)) (define-key slime-repl-mode-map (kbd "C-c ;") 'slime-insert-balanced-comments) (define-key slime-repl-mode-map (kbd "C-c M-;") 'slime-remove-balanced-comments) (define-key slime-mode-map (kbd "C-c ;") 'slime-insert-balanced-comments) (define-key slime-mode-map (kbd "C-c M-;") 'slime-remove-balanced-comments) (define-key slime-mode-map (kbd "RET") 'newline-and-indent) (define-key slime-mode-map (kbd "C-j") 'newline))) (add-to-list 'default-frame-alist '(left . 0)) (add-to-list 'default-frame-alist '(top . 0)) (add-to-list 'default-frame-alist '(height . 70)) (add-to-list 'default-frame-alist '(width . 80)) (normal-erase-is-backspace-mode 0) (tool-bar-mode -1) ;;method for disabling changed in 24. can not nil, most negative (scroll-bar-mode -1) ;;for loading cedet. (load-file "/usr/share/emacs/site-lisp/cedet/common/cedet.el") ```