2012-06-13 12 views
7

私はStackOverflowを初めて使用しています。Emacsを習得するための私の挑戦の中で私を悩ませている事実はほとんど問題ではありません。Emacs:新しいフレームとemacsclient -cを取得して、設定されたフレームサイズを使用しますか?

私は70行とそうのような80個の列にはEmacsのデフォルトのフレームサイズを設定するには、私の.emacsファイルを設定した:

(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") 
+0

Emacsのドキュメントによると、 'new-frame'は時代遅れです。 'make-frame'を使うと設定が尊重されます。 'emacsclient -c'は私にとってもうまく動作します。 – Thomas

答えて

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 manual page on hooksを参照してください。一般的に言えば、Emacs内で特定のイベントが発生するたびにある関数を実行させたい場合は、その関数を右の既存フックに追加するのがおそらく最善の方法でしょう。

+0

助けてくれてありがとうが、何らかの理由で最初の解決策が働かない。 'make-frame'は設定をまったく尊重しません。 'new-frame'は幅の設定のみを反映しているようです。 –

+0

@ user126553これはあまりにも明白だと私には許してもらいますが、最初のコマンドを '.emacs'に追加し、実際に' emacsclient -c'を実行する前にEmacsをロードしました。それは私のシステムで完璧に動作します。 '〜/ .Xresources'や'〜/ .Xdefaults'ファイルの 'Emacs * geometry'設定のように、これらの設定を変更したり、別の場所に設定したパッケージを読み込んでいる可能性はありますか? –

+0

私はそれが奇妙に聞こえることを知っていますが、窓は正しい位置に現れています。スライムとCedetのほかに私は追加のプラグインをインストールしていません。 .Xresourcesファイルには何もありません.Xdefaultsファイルにxtermの設定しかありません。 –

関連する問題