Перецентрировать именованный буфер, который не обязательно является текущим буфером в Emacs Lisp - PullRequest
2 голосов
/ 21 марта 2010

Я бы хотел переназначить буфер, называемый *Lense*, в который я вставил некоторый текст. Я хотел сделать его текущим буфером (set-buffer "*Lense*"), затем (recenter 0)). По следующим сегментам кода:

(save-excursion (set-buffer "*Lense*")
                (recenter 0))

Однако, похоже, что приведенный выше код будет только перенумеровывать буфер, который является текущим буфером, и (set-buffer "*Lense*") не имеет никакого эффекта, чтобы текущий буфер был *Lense*.

Пожалуйста, помогите мне найти правильный способ переназначить именованный буфер *Lense*.

Ответы [ 2 ]

7 голосов
/ 21 марта 2010

Если буфер, который вы хотите переназначить, виден, то вы хотите переназначить его окно.

(with-selected-window (get-buffer-window "*Lense*")
  (recenter 0))

Это взорвется, если буфер не отображается, поэтому вы можете захотеть использовать условиеили unwind-protect.

Если вы хотите обработать случай, когда буфер не виден, вам нужно переместить точку.Окно, в котором в конечном итоге будет отображаться буфер, будет находиться в центре рядом с точкой, поэтому вам придется переместить точку куда-нибудь, чтобы это произошло.Похоже, что ваша операция вставки будет DTRT, так что вам не нужно беспокоиться в этом случае.

0 голосов
/ 21 марта 2010

Я не нашел (Recenter) функция, но есть (Recenter-top-bottom) . Вы можете попробовать использовать его вместо (recenter) . Стандартная горячая клавиша Cl вызывает именно эту функцию (recenter-top-bottom) , также она имеет необязательный аргумент, строку окна, которую можно передать по Cu arg Cl.

PS: я могу ошибаться, потому что я не знаком с emacs-lisp, я просто использую emacs с минимальными настройками.

...