Перейти к буферу документации в режиме компании

10

Я недавно переключился с auto-complete-modeна company-modeи мне было весело. Недавно мне пришлось написать код Emacs Lisp. Я начинаю набирать свою функцию, отображаются кандидаты на завершение, я нажимаю, F1и документация открывается в другом буфере. Я хотел бы перейти к буферу документации , но при вводе C-x oон закрывается. Любой намек?

petrux
источник

Ответы:

8

Я не вижу способа, встроенного в режим компании, чтобы сделать это, но вы можете добавить свою собственную привязку ключа к company-active-map.

В качестве быстрого эксперимента я взял company-show-doc-bufferреализацию и просто удалил company--electric-doоболочку:

(defun my/company-show-doc-buffer ()
  "Temporarily show the documentation buffer for the selection."
  (interactive)
  (let* ((selected (nth company-selection company-candidates))
         (doc-buffer (or (company-call-backend 'doc-buffer selected)
                         (error "No documentation available"))))
    (with-current-buffer doc-buffer
      (goto-char (point-min)))
    (display-buffer doc-buffer t)))

Вы можете связать это с другим ключом, например C-F1, чтобы «постоянно» открыть буфер документации:

    (define-key company-active-map (kbd "C-<f1>") #'my/company-show-doc-buffer)
glucas
источник
Просто ради полноты: вот проблема, которую я открыл в репозитории проекта GitHub, и они предложили пойти по этому пути.
Petrux
Я просто хотел опубликовать мой небольшой твик на тот случай, если вы хотите, чтобы это окно также было выделено (defun my-company-show-doc-buffer () "Временно показать буфер документации для выбора." (Интерактивный) (let * ((selected) (nth company-selection company -андидаты)) (doc-buffer (или (company-call-backend 'doc-buffer выбран) (ошибка "Документация недоступна")))) (с текущим буфером doc-buffer (Перейти к -char (point-min))) (окно выбора (display-buffer doc-buffer t))))
sandric
4

Комментарий автора на странице, сравнивающей режим компании с автоматическим заполнением :

Что происходит, когда вы нажимаете F1 в режиме компании

Он использует pop-to-window для отображения буфера справки, но скрывает его перед следующей командой (если только эта команда не scroll-other-window или scroll-other-window-down).

Исходя из этого, вы можете только прокрутить буфер документации, но не переходить к нему.

Но, глядя на код для company-show-doc-buffer, я заметил, что он использует company--electric-do, который будет интерактивно вызывать любые команды в company--electric-commands. Обычно он содержит только scroll-other-windowи scroll-other-window-down, но, возможно, вы можете добавить other-windowв этот список.

Давор Кубраник
источник
Я только что проверил, (defvar company--electric-commands '(scroll-other-window scroll-other-window-down other-window) "List of Commands that won't break out of electric commands.")но это не работает. Когда я C-...набираю, буфер справки закрывается. То же самое (add-to-list 'company--electric-commands 'other-window)в моем файле инициализации.
petrux
Да, похоже на компанию - electric-do использует save-window-excursionдля сохранения / восстановления конфигурацию окна, поэтому она не будет работать. Возможно, вам лучше связать свою собственную команду 'show doc' с ключом в company-active-map.
glucas