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.

Steve
fonte

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)

phils
fonte
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)
wilbeibi
fonte
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!

maoyang
fonte
É 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.

vpit3833
fonte
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 ^.

justinpc
fonte
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

Yesh
fonte
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


fonte
3
seu link está quebrado :(
Ciprian Tomoiagă