]> code.delx.au - gnu-emacs-elpa/commitdiff
Added documentation buffer.
authorNikolaj Schumacher <git@nschum.de>
Sun, 15 Mar 2009 18:37:11 +0000 (19:37 +0100)
committerNikolaj Schumacher <git@nschum.de>
Fri, 20 Mar 2009 08:46:06 +0000 (09:46 +0100)
company-elisp.el
company-semantic.el
company.el

index 37cf7ac59975eeaa09f7a16ced417ec0ba64128b..6373aeab85a4958153a162181d2b9006566170e0 100644 (file)
@@ -52,7 +52,9 @@
                    (append (all-completions arg (company-elisp-parse-let))
                            (all-completions arg obarray
                                             'company-elisp-predicate))))
-    ('meta (company-elisp-doc arg))))
+    ('meta (company-elisp-doc arg))
+    ('doc-buffer (describe-function 'describe-function)
+                 (help-buffer))))
 
 (provide 'company-elisp)
 ;;; company-elisp.el ends here
index 8fba9cf1429000763755c735010eee0141520560..960e69bc7c87d6399992df5778af1791135c9648 100644 (file)
                     "\n"))
             doc)))
 
+(defun company-semantic-doc-buffer (tag)
+  (let ((doc (semantic-documentation-for-tag tag)))
+    (when doc
+      (with-current-buffer (company-doc-buffer)
+        (insert (funcall semantic-idle-summary-function tag nil t)
+                "\n"
+                doc)
+        (current-buffer)))))
+
 (defsubst company-semantic-completions (prefix)
   (ignore-errors
     (let ((completion-ignore-case nil)
@@ -42,7 +51,9 @@
                      (mapcar 'semantic-tag-name
                              (semantic-analyze-find-tags-by-prefix arg))))
     ('meta (funcall company-semantic-metadata-function
-                    (semantic-analyze-find-tag arg)))))
+                    (semantic-analyze-find-tag arg)))
+    ('doc-buffer (company-semantic-doc-buffer (semantic-analyze-find-tag arg)))
+    ))
 
 (provide 'company-semantic)
 ;;; company-semantic.el ends here
index c65bd06f11dadf2e1279a472b875adfa2c45bcb4..c15f1516323c4de415a30aa5bfae25199ca6b317 100644 (file)
@@ -4,6 +4,7 @@
              "^Pseudo tooltip frontend cannot be used twice$")
 (add-to-list 'debug-ignored-errors "^Preview frontend cannot be used twice$")
 (add-to-list 'debug-ignored-errors "^Echo area cannot be used twice$")
+(add-to-list 'debug-ignored-errors "^No documentation available$")
 
 (defgroup company nil
   ""
     (define-key keymap (kbd "M-p") 'company-select-previous)
     (define-key keymap (kbd "M-<return>") 'company-complete-selection)
     (define-key keymap "\t" 'company-complete)
+    (define-key keymap (kbd "<f1>") 'company-show-doc-buffer)
     keymap))
 
 ;;;###autoload
   (setq company-point (point)))
 
 (defun company-pre-command ()
-  (when company-candidates
-    (company-call-frontends 'pre-command)))
+  (unless (eq this-command 'company-show-doc-buffer)
+    (when company-candidates
+      (company-call-frontends 'pre-command))))
 
 (defun company-post-command ()
-  (unless (equal (point) company-point)
-    (company-begin))
-  (when company-candidates
-    (company-call-frontends 'post-command)))
+  (unless (eq this-command 'company-show-doc-buffer)
+    (unless (equal (point) company-point)
+      (company-begin))
+    (when company-candidates
+      (company-call-frontends 'post-command))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
             (cons selected (funcall company-backend 'meta selected))))
     (cdr company-last-metadata)))
 
+(defun company-doc-buffer (&optional string)
+  (with-current-buffer (get-buffer-create "*Company meta-data*")
+    (erase-buffer)
+    (current-buffer)))
+
+(defun company-show-doc-buffer ()
+  (interactive)
+  (when company-candidates
+    (save-window-excursion
+      (let* ((selected (nth company-selection company-candidates))
+             (buffer (funcall company-backend 'doc-buffer selected)))
+        (if (not buffer)
+            (error "No documentation available.")
+          (display-buffer buffer)
+          (read-event)
+          (when last-input-event
+            (clear-this-command-keys t)
+            (setq unread-command-events (list last-input-event))))))))
+
 ;;; pseudo-tooltip ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
 (defvar company-pseudo-tooltip-overlay nil)