跳转到公司模式的文档缓冲区


10

我最近从切换到auto-complete-modecompany-mode并且很开心。最近,我不得不编写一些Emacs Lisp代码。我开始输入函数,显示完成候选,然后按F1,文档在另一个缓冲区中打开。我想跳到文档缓冲区,但是,当我键入C-x o它时,它就关闭了。有什么提示吗?

Answers:


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)

出于完整性考虑:是我在GitHub项目的存储库中打开的问题,他们建议走这条路。
petrux

我只是想发布我的一些小调整,以防您也希望该窗口也被选中(defun my-company-show-doc-buffer()“临时显示所选内容的文档缓冲区。”(交互式)(let *((selected (第n个公司选择公司候选人))(文档缓冲区(或(公司调用后端'文档缓冲区已选择)(错误“无可用文档”)))))(带有当前缓冲区文档缓冲区(转到-char(point-min)))(select-window(display-buffer doc-buffer t))))
sandric

4

作者在比较公司模式与自动完成的页面上的评论:

在公司模式下按F1键会发生什么

它使用弹出窗口显示帮助缓冲区,但在下一个命令之前将其隐藏(除非该命令是“滚动其他窗口”或“滚动其他窗口向下”)。

基于此,您只能滚动文档缓冲区,而不能跳转到它。

但是,在查看其中的代码company-show-doc-buffer,我注意到它使用company--electric-do,它将以交互方式调用中的任何命令company--electric-commands。通常,它仅包含scroll-other-windowscroll-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)我的init文件中。
petrux 2014年

是的,看起来就像公司--electric-do用于save-window-excursion保存/恢复窗口配置,因此它将无法正常工作。您最好将自己的“ show doc”命令绑定到中的键company-active-map
glucas 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.