Bagaimana cara mengubah ukuran layar terbagi emacs windows?

172

Saya memiliki emacs split secara horizontal - di atas saya mengedit kode Perl, bagian bawahnya adalah shell. Secara default emacs membuat dua jendela sama ukurannya, tapi saya ingin buffer shell lebih kecil (mungkin setengah ukuran?). Saya bertanya-tanya bagaimana saya bisa melakukan itu.

Steve
sumber

Jawaban:

294

Dengan mouse, Anda dapat menyeret ukuran jendela sekitar.

Klik di mana saja pada garis mode yang tidak 'aktif' (nama buffer aman, atau area yang tidak digunakan di sisi kanan), dan Anda dapat menarik ke atas atau ke bawah.

Seret dari sisi ke sisi memerlukan klik yang sangat tepat di tempat kedua garis mode bergabung.

C-x -( shrink-window-if-larger-than-buffer) akan menyusutkan jendela agar sesuai dengan isinya.

C-x +( balance-windows) akan membuat jendela dengan ketinggian dan lebar yang sama.

C-x ^( enlarge-window) meningkatkan ketinggian dengan 1 baris, atau nilai arg awalan. Arg negatif mengecilkan jendela. misalnya C-- C-1 C-6 C-x ^menyusut sebanyak 16 baris, seperti halnya C-u - 1 6 C-x ^.

(Tidak ada ikatan standar untuk shrink-window.)

C-x }( enlarge-window-horizontally) melakukan hal yang sama, secara horizontal.
C-x {( shrink-window-horizontally) juga terikat secara default.

Mengikuti salah satu dari perintah ini dengan repeat( C-x zuntuk memulai, dan hanya zuntuk pengulangan lanjutan) membuatnya cukup mudah untuk mencapai ukuran persis yang Anda inginkan.

Jika Anda secara teratur ingin melakukan ini dengan nilai tertentu, Anda bisa merekam makro keyboard untuk melakukannya, atau menggunakan sesuatu seperti
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

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

Yang merupakan peretasan smidgen, jadi ini akan lebih baik:

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

Intinya, saya juga suka winner-modeyang memungkinkan Anda berulang kali 'membatalkan' perubahan pada konfigurasi jendela dengan C-c left(apakah perubahannya adalah ukuran / angka / pengaturan jendela, atau hanya buffer mana yang ditampilkan). C-c rightmengembalikan Anda ke konfigurasi terbaru. Atur dengan global(winner-mode 1)

phils
sumber
3
Luar biasa, persis apa yang saya inginkan! Terima kasih banyak!
Steve
1
+1: terima kasih atas tip mode pemenang 'undo'. btw, dalam kasus saya mengklik nama buffer akan membuka buffer berikutnya. Tetapi mudah untuk melihat kapan Anda dapat mengubah ukuran melihat bentuk kursor mouse.
jfs
34

Saya menempatkan ini di .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
sumber
Dua yang pertama tidak berfungsi untuk saya di Emacs 24.3.1 di Mac OSX 10.9.1
Oskar Persson
1
@OskarPersson Ini mungkin konflik dengan pintasan global. Cari tahu dalam preferensi atau remap kontrol untuk caps lock (cara saya), itu harus berfungsi saat itu.
wilbeibi
Saya memiliki masalah yang sama dan menemukan bahwa C-kiri dan C-kanan bertentangan dengan pintasan Mission Control di OS X System Preferences, seperti yang dijelaskan oleh @Wilbeibi.
Doug Richardson
1
Tombol ini sudah didefinisikan, pertama diset kunci dengan (global-set-key (kbd "<C-up>") nil)sebelum set itu, tapi akan lebih baik menggunakan M-leftbukannya
Mauricio Cortazar
@MauricioCortazar Saya sudah bertahun-tahun tidak menggunakan Emacs. Jawaban ini mungkin tidak berlaku sekarang. Jangan ragu untuk memperbaruinya.
wilbeibi
14

mari kita coba menggunakan dokumen bantuan emacs.

C-h a

Kemudian ketik "perbesar" atau "Jendela"

Anda akan menemukan apa yang Anda inginkan.

Nikmati!

Maoyang
sumber
Mungkin saja seseorang bekerja di lingkungan yang C-htidak tersedia. Lalu bagaimana?
Derrell Durrett
1
Jika Anda sudah musnah bantuan standar yang mengikat peta, maka Anda harus pasti menyadari apa yang telah Anda musnah itu dengan . (Gagal itu, coba <f1>yang merupakan standar lain membantu mengikat peta.)
phils
6

C-x oke jendela yang ukurannya ingin Anda kembangkan. Dari sana, C-x ^untuk mengembangkannya.

vpit3833
sumber
3
Jika binding berbeda (milikku), perintahnya adalah enlarge-window. Tip tambahan adalah dengan menggunakan arg awalan untuk mengontrol jumlah ekspansi.
Joseph Gay
Luar biasa! Terima kasih banyak!
Steve
6

C-x ^mengambil argumen numerik positif dan negatif. Khususnya, jika Anda ingin mengecilkan jendela tempat kursor Anda saat ini sebanyak empat baris, Anda dapat menekan C-u -4 C-x ^.

justinpc
sumber
2

Ini bukan jawaban yang tepat yang Anda cari, tapi saya menemukan pertanyaan ini ketika mencari fungsionalitas dalam spacemacs, jadi saya akan menulis jawaban saya hanya demi kelengkapan.

<SPC> + w + .Opsinya adalah menggunakan (ini berfungsi di vanilla spacemacs)

Ini membuka jendela sementara di mana seseorang dapat menggunakan []{}untuk mengubah ukuran pada tingkat granular.

Tidak perlu untuk Cx atau Mouse ...

Manipulasi keadaan transien jendela

Ya
sumber
jika ada yang serupa di emacs biasa?
krokodil
Mungkin tidak ada di sana, itulah sebabnya Drew mengajukan pertanyaan ini ...
Yesh
0

Saya mendapat pertanyaan yang sama. Ini solusinya.
Pertama, saya mendefinisikan fungsi baru:

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

Sebagai contoh, saya ingin menjalankan-skema dalam buffer, Jadi saya menulis ulang.
Dan inilah definisi, dengan fungsi yang didefinisikan sebelumnya:

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

Jadi sekarang ketika saya masuk: Mx run-skema-di sini, buffer diubah ukurannya!
Dan ini file konfigurasi saya, berharap ini akan membantu. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el


sumber
3
tautan Anda rusak :(
Ciprian Tomoiagă