it-swarm-ru.tech

Как изменить размер окон Emacs с разделенным экраном?

У меня Emacs разделен по горизонтали - сверху я редактирую код Perl, снизу - оболочка. По умолчанию emacs делает два окна равными по размеру, но я бы хотел, чтобы буфер Shell был меньше (может быть, в два раза меньше?). Мне было интересно, как я мог это сделать.

162
Steve

С помощью мыши вы можете перетаскивать размеры окон вокруг.

Щелкните в любом месте строки режима, которая иначе не является "активной" (имя буфера является безопасным, или любая неиспользуемая область справа), и вы можете перетащить вверх или вниз.

Перетаскивание из стороны в сторону требует очень точного щелчка в месте соединения двух линий режима.

C-x- (shrink-window-if-larger-than-buffer) уменьшит окно, чтобы соответствовать его содержимому.

C-x+ (balance-windows) сделает окна одинаковой высоты и ширины.

C-x^ (enlarge-window) увеличивает высоту на 1 строку или значение префикса arg. Отрицательный аргумент сжимает окно. например C--C-1C-6C-x^ сжимается на 16 рядов, как и C-u-16C-x^,.

(Нет привязки по умолчанию для shrink-window.)

C-x} (enlarge-window-horizontally) делает то же самое, по горизонтали.
C-x{ (shrink-window-horizontally) также связан по умолчанию.

После одной из этих команд с repeat (C-xz инициировать и просто z для продолжения повторения) позволяет довольно легко получить нужный размер.

Если вы регулярно хотите делать это с определенным значением, вы можете записать макрос клавиатуры, чтобы сделать это, или использовать что-то вроде
(global-set-key (kbd "C-c v") (kbd "C-u - 1 6 C-x ^"))

Или это:
(global-set-key (kbd "C-c v") (kbd "C-x o C-x 2 C-x 0 C-u - 1 C-x o"))

Который является smidgen hacky, так что это было бы лучше:

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

Тангенциально, я также люблю winner-mode, который позволяет вам неоднократно "отменять" любые изменения в конфигурациях окон с C-cleft (является ли изменение размером/числом/расположением окон, или просто, какой буфер отображается). C-cright возвращает вас к самой последней конфигурации. Установите его глобально с помощью (winner-mode 1)

279
phils

Я положил их в свой .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)
31
wilbeibi

давайте попробуем использовать справочный документ Emacs.

C-ha

Затем введите "увеличить" или "окно"

Вы найдете то, что вы хотите.

Наслаждайтесь!

13
maoyang

C-x o к окну, размер которого вы хотите расширить. Оттуда, C-x ^, чтобы развернуть его.

6
vpit3833

C-x ^ принимает положительные и отрицательные числовые аргументы. В частности, если вы хотите уменьшить окно с текущим курсором на четыре строки, вы можете нажать C-u -4 C-x ^.

6
justinpc

У меня такой же вопрос. Вот мое решение.
Сначала я определю новую функцию:

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

Например, я хочу запустить схему в буфере, поэтому я переписываю ее.
А вот определение с функцией, определенной ранее:

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

Так что теперь, когда я ввожу: M-x run-схема-здесь, размер буфера изменяется!
А вот мой конфигурационный файл, надеясь, что это поможет. https://github.com/judevc/dotfiles/blob/master/.emacs.d/scheme-conf.el

0
user1001237