Como eu defino o tamanho da janela do Emacs?

103

Estou tentando detectar o tamanho da tela em que estou iniciando o emacs e ajustar o tamanho e a posição da janela em que está começando (acho que é o quadro no emacs-speak) de acordo. Estou tentando configurar meu .emacs para que sempre tenha uma janela "razoavelmente grande" com seu canto superior esquerdo próximo ao canto superior esquerdo da tela.

Eu acho que esta é uma grande pergunta para o caso geral, então, para restringir um pouco as coisas, estou mais interessado no GNU Emacs 22 no Windows e (Debian) Linux.

Tom Dunham
fonte

Respostas:

89

Se você quiser alterar o tamanho de acordo com a resolução, você pode fazer algo assim (ajustando a largura e as resoluções preferidas de acordo com suas necessidades específicas):

(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

Observe que o sistema de janelas está obsoleto nas versões mais recentes do emacs. Um substituto adequado é (display-graphic-p). Veja esta resposta para a pergunta Como detectar se o emacs está no modo terminal? para um pouco mais de fundo.

Bryan Oakley
fonte
Eu gosto de números diferentes, então (como você sugere) eu ajustei o meu. Isso funciona muito bem; obrigado!
lindes
Então, novamente, eu realmente gosto mais desta versão - muito mais simples (fácil de ler e ajustar) e atende bem às minhas necessidades. Ambas são boas respostas, no entanto! +1
lindes
1
Tenha cuidado com a altura, pelo menos no Emacs 24.2 no OS X. Se você definir uma linha muito alta, as janelas ficarão presas em um estado onde a primeira linha do buffer não é visível - o ponto pode navegar até lá, mas a janela não rola para mostrá-lo.
Greg Hendershott
2
Há um pequeno artefato com este método (e com outros listados aqui). O Emacs abrirá com um certo tamanho e depois de uma fração de segundo será redimensionado para o tamanho que definimos. Mas a transição é visível. Existe uma maneira de dizer ao emacs que se desenha no tamanho desejado a partir de t = 0 seg?
stathisk de
48

Eu tenho o seguinte no meu .emacs:

(if (window-system)
  (set-frame-height (selected-frame) 60))

Você também pode olhar para as funções set-frame-size, set-frame-positione set-frame-width. Use C-h f(aka M-x describe-function) para trazer a documentação detalhada.

Não tenho certeza se existe uma maneira de calcular a altura / largura máximas de um quadro no ambiente de janelas atual.

Chris Conway
fonte
12
Yay! (if (window-system) (set-frame-size (selected-frame) 124 40))para a vitória - tão bom e conciso, e me dá o tamanho padrão do meu Terminal, que é bom e familiar. :) (Ajuste de acordo com as preferências, é claro.) Obrigado!
lindes
1
Só para esclarecer: se você colocar isso init.el, só se aplica ao quadro inicial. Se você criar um novo quadro depois disso, a função acima não terá efeito; o novo quadro terá as configurações definidas em default-frame-alist.
David J.
Isso funciona para mim, exceto que (set-frame-size (selected-frame) 80 24)me dá um quadro 161 por 48; Estou em uma tela hidpi de 4K, mas não esperaria que isso afetasse a contagem de personagens.
charliegreen
21

Retirado de: http://www.gnu.org/software/emacs/windows/old/faq4.html

(setq default-frame-alist
      '((top . 200) (left . 400)
        (width . 80) (height . 40)
        (cursor-color . "white")
        (cursor-type . box)
        (foreground-color . "yellow")
        (background-color . "black")
        (font . "-*-Courier-normal-r-*-*-13-*-*-*-c-*-iso8859-1")))

(setq initial-frame-alist '((top . 10) (left . 30)))

A primeira configuração se aplica a todos os quadros do emacs, incluindo o primeiro que aparece quando você inicia. A segunda configuração adiciona atributos adicionais ao primeiro quadro. Isso ocorre porque às vezes é bom saber o quadro original em que você inicia o emacs.


fonte
Eu usei esse método por um longo tempo para definir a altura e largura do quadro ( (width . 80) (height . 40)), mas por algum motivo, ele parou de funcionar depois que atualizei minha versão do Xubuntu de 12.04 para 13.10: ao iniciar, o tamanho do quadro era o padrão. Em seguida, comecei a usar a resposta de Chris Conway, que funciona para mim.
Teemu Leisti
17

A maneira mais fácil que eu encontrei para fazer isso em um ambiente X-Window é através de recursos X . A parte relevante do meu .Xdefaults é assim:

Emacs.geometry: 80x70

Você deve ser capaz de sufixo-lo com coordenadas de localização + 0 + 0 para forçá-lo para o canto superior esquerdo de sua tela. (a razão de eu não fazer isso é que ocasionalmente gero novos quadros, e fica confuso se eles aparecem exatamente no mesmo local que o anterior)

De acordo com o manual, esta técnica funciona também no MS Windows , armazenando os recursos como pares chave / valor no registro. Eu nunca testei isso. Pode ser ótimo, pode ser muito mais inconveniente do que simplesmente editar um arquivo.

JB.
fonte
1
sim funciona para Windows também. A wiki do Emacs fornece mais detalhes: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad
17

Tente adicionar o seguinte código a .emacs

(add-to-list 'default-frame-alist '(height . 24))

(add-to-list 'default-frame-alist '(width . 80)) 
Norbux
fonte
12

Você também pode usar o parâmetro -geometria ao iniciar o emacs: emacs -geometry 80x60+20+30lhe dará uma janela de 80 caracteres de largura, 60 linhas de altura, com o canto superior esquerdo 20 pixels à direita e 30 pixels abaixo do canto superior esquerdo do fundo.

Graeme Perrow
fonte
7

No ubuntu, faça:

(defun toggle-fullscreen ()
  (interactive)
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))
)
(toggle-fullscreen)
ftravers
fonte
5

No Windows, você pode maximizar o quadro do emacs usando esta função:

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))
Jérôme Radix
fonte
1
(setq initial-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                initial-frame-alist))

(setq default-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                default-frame-alist))
NN
fonte
0
(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

Eu prefiro as configurações de Bryan Oakley. No entanto, a 'altura não funciona corretamente no meu GNU Emacs 24.1.1.

WisdomFusion
fonte