2012-06-13 9 views
7

Jestem nowy w StackOverflow i mam pytanie dotyczące problemu, który był praktycznie jedyną rzeczą, która mnie irytuje w mojej misji opanowania Emacsa.Emacs: Pobierz nową klatkę i emacsclient -c, aby użyć rozmiaru ramki zestawu?

skonfigurowałem mój plik .emacs ustawić domyślny rozmiar ramki dla Emacsa do 70 wierszy i 80 kolumn tak:

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

Działa to dobrze, gdy zaczyna Emacs, problemem jest to, że kiedy uruchomi nową ramkę z ustawieniami new-frame lub te ustawienia nie są przestrzegane. Czy istnieje sposób na wymuszenie emacsclient i new-frame odczytania ustawień w pliku .emacs po ich wykonaniu?

Edit:

Oto moja .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") 
+0

Zgodnie z dokumentacją Emacsa, "nowa ramka" jest przestarzała. Kiedy używam 'make-frame', ustawienia są szanowane. 'emacsclient -c' również działa dobrze dla mnie. – Thomas

Odpowiedz

5

Można spróbować dodać następujące hak do pliku rozruchu Emacs (normalnie ~/.emacs), tj:

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

Lub, jeśli chcesz ponownie załadować cały plik .emacs:

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

Były haczyk jest prawie na pewno korzystne, jak przeładowywania całej .emacs plik prawdopodobnie jest nie tylko niepotrzebna i marnotrawstwo zasobów, ale również ma potencjał, aby spowodować błędy lub dziwne zachowanie (w zależności od zawartości pliku).

Aby opracować, haki są zmiennymi, które definiują listy poleceń, które są wykonywane podczas określonych zdarzeń w twojej sesji Emacs, np. Ładowanie większego trybu edycji lub, jak w tym przypadku, tworzenie nowej klatki . Więcej informacji można znaleźć w odpowiednim numerze Emacs manual page on hooks. Ogólnie mówiąc, jeśli chcesz, aby jakaś funkcja była wykonywana za każdym razem, gdy zdarzy się jakieś zdarzenie w Emacs, dodanie tej funkcji do prawego wcześniej istniejącego haka jest prawdopodobnie najlepszym sposobem na to.

+0

Dzięki za pomoc, ale z jakiegokolwiek powodu Twoje pierwsze rozwiązanie nie działa. "make-frame" w ogóle nie respektuje moich ustawień, a "nowa-ramka" tylko wydaje się respektować ustawienia szerokości. –

+0

@ user126553, wybacz mi, jeśli to wydaje się zbyt oczywiste, ale dodałeś to pierwsze polecenie do '.emacs' i faktycznie wczytałeś Emacsa przed próbą uruchomienia' emacsclient -c', prawda? Działa idealnie na moim systemie. Czy możliwe jest ładowanie pakietu, który modyfikuje te ustawienia, lub są one skonfigurowane gdzie indziej, np. Poprzez ustawienie 'Emacs * geometry' w pliku' ~/.Xresources' lub '~/.Xdefaults'? –

+0

Wiem, że to brzmi dziwnie, ale okno pojawia się nawet we właściwej pozycji. Poza szlamem i cedetem nie mam żadnych dodatkowych wtyczek. Nie mam nic w moim pliku .Xresources i mam tylko ustawienia dla xterm w moim pliku .Xdefaults. –

Powiązane problemy