7

私は 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これらの設定を使用して新しいフレームを起動したときに無視されることです。実行時にファイル内の設定を強制emacsclientnew-frameて読み取る方法はありますか?.emacs

編集:

これが私の.emacsファイルです:

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

1 に答える 1

5

次のフックを 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))))

.emacsまたは、ファイル全体をリロードする場合:

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

ファイル全体をリロードすること.emacsはおそらく不必要でリソースを浪費するだけでなく、(ファイルの内容によっては) エラーや奇妙な動作を引き起こす可能性があるため、前者のフックがほぼ確実に望ましいものです。

詳しく説明すると、フックは、Emacs セッション内で特定のイベントが発生したときに実行されるコマンドのリストを定義する変数です。たとえば、主要な編集モードのロード、またはこの場合のように新しいフレームの作成です。詳細については、フックに関する関連するEmacs マニュアル ページを参照してください。一般的に言えば、Emacs 内で特定のイベントが発生するたびに何らかの関数を実行したい場合、その関数を適切な既存のフックに追加するのがおそらく最善の方法です。

于 2012-06-13T03:58:55.853 に答える