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")
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With