Emacs: получить new-frame и emacsclient-c для использования заданного размера кадра?

Я новичок в StackOverflow, и у меня есть вопрос о проблеме, которая была практически единственной, чтобы раздражать меня в моем стремлении освоить Emacs.

Я настроил мой .emacs файл, чтобы установить размер кадра по умолчанию для Emacs в 70 строк и 80 столбцов, например:

(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))

это отлично работает при запуске Emacs, проблема в том, что при запуске нового фрейма с помощью new-frame или emacsclient -c эти параметры не соблюдаются. Есть ли способ заставить emacsclient и new-frame в прочитайте настройки в .emacs файл, когда они выполняются?

Edit:

вот мой :

;;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")

1 ответов


вы можете попробовать добавить следующий крюк в файл запуска Emacs (обычно,~/.emacs), т. е.:

(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))))

или, если вы хотите, чтобы перезагрузить всю :

(add-hook 'before-make-frame-hook #'(lambda () (load-file "~/.emacs")))

бывший крюк почти наверняка предпочтительнее, так как перезарядка всего .emacs файл, вероятно, не только ненужный и расточительный ресурсов, но также имеет потенциал, чтобы вызвать ошибки или странное поведение (в зависимости от содержимого файла).

для разработки, крючки переменные, определяющие списки команд, которые выполняются, когда определенные события происходят в сеансе Emacs, например, загрузка основного режима редактирования или, как в этом случае, создание нового фрейма. Смотрите соответствующий страница руководства Emacs на крючки для получения дополнительной информации. Вообще говоря, если вы хотите, чтобы какая-то функция выполнялась каждый раз, когда определенное событие происходит в Emacs, добавление указанной функции к правому ранее существующему крюку, вероятно, лучший способ он.