Pergunta

Eu estou tentando detectar o tamanho da tela que estou começando emacs, e ajustar o tamanho ea posição da janela ela está começando em (eu acho que é o quadro no emacs-speak) em conformidade. Eu estou tentando configurar meu .emacs para que eu sempre obter um "razoavelmente grande" janela com o seu canto superior esquerdo perto do canto superior esquerdo da tela do meu.

Eu acho que essa é uma grande perguntar para o caso geral, de modo a estreitar as coisas um pouco eu estou mais interessado em GNU Emacs 22 em Windows e (Debian) Linux.

Foi útil?

Solução

Se você quiser alterar o tamanho de acordo com a resolução que você pode fazer algo como isto (ajustar a largura e resoluções preferido 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)

Note que a janela do sistema é obsoleto em versões mais recentes do Emacs. Um substituto adequado é (display-graphic-p). Consulte esta resposta à pergunta Como detectar que o Emacs está em modo de terminal? para um pouco mais fundo.

Outras dicas

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-position e set-frame-width. Use C-h f (aka M-x describe-function) para abrir a documentação detalhada.

Eu não tenho certeza se há uma maneira de calcular o máximo altura / largura de um quadro no ambiente de janelas atual.

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 definição aplica-se a todos os Emacs quadros, incluindo o primeiro que aparece quando você começar. A segunda configuração adiciona atributos adicionais para o primeiro quadro. Isso ocorre porque às vezes é bom saber que o quadro original que você começar emacs em.

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

Emacs.geometry: 80x70

Você deve ser capaz de sufixo com + 0 + 0 coordenadas de localização para forçá-lo para o canto superior esquerdo da tela. (A razão de eu não fazê-lo é que eu novos quadros occasionnally de desova, e isso torna as coisas confusas, se eles aparecem na mesma localização exata do anterior)

De acordo com o manual, este técnica funciona em MS Windows também , armazenando os recursos como pares de chave / valor no registro. Eu nunca testado isso. Pode ser grande, pode ser muito mais de um inconveniente em comparação com simplesmente editar um arquivo.

Tente adicionar o seguinte código ao .emacs

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

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

Você pode também o parâmetro -geometry quando queima-se emacs: emacs -geometry 80x60+20+30 lhe dará uma janela de 80 caracteres de largura, 60 linhas de altura, com o canto superior esquerdo, 20 pixels para a direita e 30 pixels para baixo do canto superior esquerdo da fundo.

Em ubuntu fazer:

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

No Windows, você poderia fazer emacs quadro maximizada usando esta função:

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))
(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))
(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 configurações de Bryan Oakley. No entanto, o 'height não funcionar corretamente em meu GNU Emacs 24.1.1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top