2012-06-13 6 views
7

Sono nuovo di StackOverflow e ho una domanda su un problema che è stato praticamente l'unica cosa che mi ha infastidito nella mia ricerca di padroneggiare Emacs.Emacs: ottieni new-frame ed emacsclient -c per utilizzare la dimensione del fotogramma impostata?

Ho configurato il mio file .emacs per impostare la dimensione del frame predefinito per Emacs a 70 righe e 80 colonne in questo modo:

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

Questo funziona bene quando si avvia Emacs, il problema è che quando lancio di un nuovo telaio utilizzando new-frame o emacsclient -c queste impostazioni non sono rispettate. C'è un modo per forzare emacsclient e new-frame per leggere le impostazioni nel file .emacs quando vengono eseguite?

Edit:

Ecco il mio .emacs di 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") 
+0

Secondo la documentazione di Emacs, 'new-frame' è obsoleto. Quando uso 'make-frame' le impostazioni vengono rispettate. 'emacsclient -c' funziona bene anche per me. – Thomas

risposta

5

Si potrebbe provare ad aggiungere il seguente gancio per il file di avvio Emacs (normalmente, ~/.emacs), vale a dire:

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

Oppure, se si desidera ricaricare l'intero file .emacs:

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

L'ex gancio è quasi certamente preferibile, come ricaricare l'intero file .emacs probabilmente non è solo inutile e uno spreco di risorse, ma ha anche il potenziale di causare errori o comportamenti strani (a seconda del contenuto del file).

Per elaborare, i ganci sono variabili che definiscono gli elenchi di comandi che vengono eseguiti quando si verificano eventi specifici all'interno della sessione di Emacs, ad esempio il caricamento di una modalità di modifica principale o, come in questo caso, la creazione di una nuova cornice . Vedere il relativo Emacs manual page on hooks per ulteriori informazioni. In generale, se si desidera eseguire una funzione ogni volta che si verifica un evento particolare all'interno di Emacs, l'aggiunta di tale funzione al gancio preesistente giusto è probabilmente il modo migliore per farlo.

+0

Grazie per l'aiuto, ma per qualsiasi motivo la tua prima soluzione non funziona. 'make-frame' non rispetta affatto le mie impostazioni, e 'new-frame' sembra solo rispettare le impostazioni di larghezza. –

+0

@ user126553, perdonami se questo sembra troppo ovvio, ma hai aggiunto quel primo comando al tuo '.emacs' e in realtà carichi Emacs prima di provare a eseguire 'emacsclient -c', giusto? Funziona perfettamente sul mio sistema. È possibile che tu stia caricando un pacchetto che modifica queste impostazioni, o sono configurate da qualche altra parte, come tramite l'impostazione 'geometry/Emacs * in un file' ~/.Xresources' o '~/.Xdefaults'? –

+0

So che suona strano, ma la finestra appare anche nella posizione corretta. Oltre a melma e Cedet non ho nessun plugin aggiuntivo installato. Non ho nulla nel mio file .Xresources e ho solo le impostazioni per xterm nel mio file .Xdefaults. –

Problemi correlati