Como alterar o tamanho das janelas emacs de tela dividida?


172

Eu tenho o emacs dividido horizontalmente - no topo, estou editando o código Perl, o fundo é o shell. Por padrão, o emacs torna as duas janelas iguais em tamanho, mas eu gostaria que o buffer do shell fosse menor (talvez metade do tamanho?). Fiquei me perguntando como eu poderia fazer isso.

Respostas:


294

Com o mouse, você pode arrastar os tamanhos das janelas.

Clique em qualquer lugar da linha de modo que não esteja 'ativa' (o nome do buffer é seguro ou em qualquer área não utilizada do lado direito) e você pode arrastar para cima ou para baixo.

Arrastar de um lado para o outro exige um clique muito preciso no local onde as duas linhas de modo se juntam.

C-x -( shrink-window-if-larger-than-buffer) reduzirá uma janela para ajustar seu conteúdo.

C-x +( balance-windows) fará com que as janelas tenham as mesmas alturas e larguras.

C-x ^( enlarge-window) aumenta a altura em 1 linha ou o valor do prefixo arg. Um argumento negativo encolhe a janela. por exemplo, C-- C-1 C-6 C-x ^diminui 16 linhas, assim como C-u - 1 6 C-x ^.

(Não há ligação padrão para shrink-window.)

C-x }( enlarge-window-horizontally) faz o mesmo, horizontalmente.
C-x {( shrink-window-horizontally) também é vinculado por padrão.

Seguir um destes comandos com repeat( C-x zpara iniciar e apenas zpara repetição contínua) facilita bastante o tamanho exato desejado.

Se você deseja fazer isso regularmente com um valor específico, grave uma macro de teclado ou use algo como
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

Ou isto:
(global-set-key (kbd "C-c v") (kbd "C-x o C-x 2 C-x 0 C-u - 1 C-x o"))

Qual é um hacker smidgen, então isso seria melhor:

(defun halve-other-window-height ()
  "Expand current window to use half of the other window's lines."
  (interactive)
  (enlarge-window (/ (window-height (next-window)) 2)))

(global-set-key (kbd "C-c v") 'halve-other-window-height)

Tangencialmente, também adoro o winner-modeque permite desfazer repetidamente quaisquer alterações nas configurações da janela C-c left(se a alteração é do tamanho / número / disposição das janelas ou apenas qual buffer é exibido). C-c rightretorna para a configuração mais recente. Configure globalmente com(winner-mode 1)


3
Incrível, exatamente o que eu queria! Muito obrigado!
— 1711 Steve

1
+1: obrigado pela dica 'desfazer' no modo vencedor. btw, no meu caso, um clique no nome do buffer abre o próximo buffer. Mas é fácil ver quando você pode redimensionar a forma do cursor do mouse.
— JFS

34

Coloquei estes no meu .emacs:

(global-set-key (kbd "<C-up>") 'shrink-window)
(global-set-key (kbd "<C-down>") 'enlarge-window)
(global-set-key (kbd "<C-left>") 'shrink-window-horizontally)
(global-set-key (kbd "<C-right>") 'enlarge-window-horizontally)

Os dois primeiros não funciona para mim em Emacs 24.3.1 do Mac OSX 10.9.1
— Oskar Persson

1
@OskarPersson Pode ser o conflito com atalhos globais. Descubra isso na preferência ou no controle remapeado para caps lock (do meu jeito), deve funcionar então.
— Wilbeibi

Eu tive o mesmo problema e descobri que C-esquerda e C-direita estavam em conflito com os atalhos do Controle de Missão nas Preferências do Sistema OS X, conforme descrito por @Wilbeibi.
— Doug Richardson

1
Estas chaves já estão definidos, primeiro resetar as chaves com (global-set-key (kbd "<C-up>") nil)antes set, mas seria melhor aproveitamento M-leftvez
— Mauricio Cortazar

@MauricioCortazar Não uso o Emacs há anos. Esta resposta pode não se aplicar agora. Sinta-se livre para atualizá-lo.
— Wilbeibi

13

vamos tentar usar o documento de ajuda do emacs.

C-h a

Em seguida, digite "ampliar" ou "janela"

Você encontrará o que deseja.

Aproveitar!


É possível que alguém esteja trabalhando em um ambiente em que C-hnão esteja disponível. O que então?
— Derrell Durrett

1
Se você clobbered a ajuda de ligação mapa padrão, então certamente você deve estar ciente do que você clobbered-lo com . (Caso contrário, tente <f1>que é o outro de ajuda padrão mapa de ligação.)
— phils

6

C-x opara a janela cujo tamanho você deseja expandir. A partir daí, C-x ^para expandi-lo.


3
Caso as ligações sejam diferentes (as minhas são), o comando é enlarge-window. Uma dica adicional é usar um prefixo arg para controlar a quantidade de expansão.
— Joseph Gay

Impressionante! Muito obrigado!
— 21411 Steve Steve

6

C-x ^aceita argumentos numéricos positivos e negativos. Em particular, se você quiser reduzir a janela onde atualmente está o cursor em quatro linhas, pressione C-u -4 C-x ^.


2

Esta não é a resposta exata que você está procurando, mas me deparei com essa pergunta ao procurar a funcionalidade spacemacs, portanto escreverei minha resposta apenas por uma questão de integridade.

A opção é usar <SPC> + w + .(funciona em baunilha spacemacs)

Isso abre uma janela transitória onde é possível []{}redimensionar em um nível granular.

Não há necessidade de Cx ou Mouse ...

Estado transitório da manipulação da janela


se houver algo semelhante no emacs regular?
— precisa

Provavelmente não está lá, e é por isso que Drew fez essa pergunta em primeiro lugar ...
— Yesh

0

Eu tenho a mesma pergunta. Aqui está a minha solução.
Primeiro, defino uma nova função:

(defun buffer-resize ()
  (delete-other-windows)
  (split-window-vertically (floor (* 0.68 (window-height))))
  (other-window 1)
  (switch-to-buffer buf)
  (other-window 1))

Por exemplo, eu quero executar o esquema em um buffer, então eu o reescrito.
E aqui está a definição, com a função definida anteriormente:

(defun run-scheme-here ()
  "Run a new scheme process at the directory of the current buffer.
   If a process is already running, switch to its buffer."
  (interactive)
  (let* ((proc (format "scheme: %s" default-directory))
         (buf (format "*%s*" proc)))
    (unless (comint-check-proc buf)
      (let ((cmd (split-string scheme-program-name)))
        (set-buffer
         (apply 'make-comint-in-buffer proc buf (car cmd) nil (cdr cmd)))
        (inferior-scheme-mode)
        (buffer-resize)))
    (pop-to-buffer buf)))

Então agora, quando digito: Mx run-schema-here, o buffer é redimensionado!
E aqui está o meu arquivo de configuração, esperando que isso ajude. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


3
seu link está quebrado :(
— Ciprian Tomoiagă
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.