2013-08-17 2 views
2

Мне очень давно интересно: Как получить выделенный буфер обмена в Emacs?Специальный буфер в Emacs (автозаполнение, информация о функции и т. Д.)

Автозаполнение, описания функций и, возможно, документация, все могут идти туда, не заканчивая где-то неожиданным, а вместо этого в предопределенном месте (возможно, четверть экрана?).

+0

И наконец! Вы также можете иметь, например, другой размер шрифта в этом выделенном окне. – katspaugh

ответ

2

(Я предполагаю, что вы имеете в виду выделенное окно вместо выделенного буфера.) Если вы держите окно открытым без каких-либо других команд разбиения окон, буферы справки/реплики будут автоматически использовать его. Вы можете изменить размер окна, как описано в this question.

Если вы хотите сделать обычное манипулирование окнами, но иметь окна справки определенного размера, я предлагаю вам изучить temp-buffer-show-hook, крючок, который запускается, когда отображаются временные буферы (например, буферы помощи). Я не пробовал, но, вероятно, можно было бы установить его в функцию, которая устраивает вашу конфигурацию окна определенным образом.

1

Вот что я делаю в One On One, чтобы определить выделенный *Help* кадр:

;; *Help* frame 
(if 1on1-*Help*-frame-flag 
    (add-to-list 
    'special-display-buffer-names 
    (list "*Help*" '1on1-display-*Help*-frame 
      (list (cons 'background-color 1on1-help-frame-background) 
       (cons 'mouse-color 1on1-help-frame-mouse+cursor-color) 
       (cons 'cursor-color 1on1-help-frame-mouse+cursor-color) 
       '(height . 40)))) 
    (setq special-display-buffer-names 
     (1on1-remove-if (lambda (elt) (equal "*Help*" (car elt))) 
         special-display-buffer-names))) 

(defun 1on1-display-*Help*-frame (buf &optional args) 
    "Display *Help* buffer in its own frame. 
`special-display-function' is used to do the actual displaying. 
BUF and ARGS are the arguments to `special-display-function'." 
    (let ((old-ptr-shape (and (boundp 'x-pointer-shape) x-pointer-shape)) 
     return-window) 
    (when (boundp 'x-pointer-xterm) (setq x-pointer-shape x-pointer-xterm)) 
    (setq return-window (select-window (funcall special-display-function buf args))) 
    (raise-frame) 
    (setq x-pointer-shape old-ptr-shape) 
    return-window)) 

Вам не нужны все эти детали (указатель формы и т.д.), но это дает вам идею. Главное - поставить *Help* на special-display-buffer-names. Это действительно все, что вам нужно сделать.

Переменные, используемые для параметров кадра здесь, довольно очевидны. Функция *-remove-if является стандартом remove-if. Полный код находится здесь: oneonone.el.