Show full docs for symbol at point for Python mode.
--- a/.emacs-my Sat Feb 13 00:04:34 2016 +0200
+++ b/.emacs-my Sun Feb 14 20:04:20 2016 +0200
@@ -2745,8 +2745,72 @@
(setq python-indent 4)
+(defvar my/python-eldoc-setup-code
+ "def __PYDOC_get_full_help(obj):
+ try:
+ import inspect
+ try:
+ str_type = basestring
+ except NameError:
+ str_type = str
+ if isinstance(obj, str_type):
+ obj = eval(obj, globals())
+ doc = inspect.getdoc(obj)
+ if not doc and callable(obj):
+ target = None
+ if inspect.isclass(obj) and hasattr(obj, '__init__'):
+ target = obj.__init__
+ objtype = 'class'
+ else:
+ target = obj
+ objtype = 'def'
+ if target:
+ args = inspect.formatargspec(
+ *inspect.getargspec(target)
+ )
+ name = obj.__name__
+ doc = '{objtype} {name}{args}'.format(
+ objtype=objtype, name=name, args=args
+ )
+ except:
+ doc = ''
+ return doc"
+ "Python code to setup documentation retrieval.")
+
+(defvar my/python-eldoc-string-code "__PYDOC_get_full_help('''%s''')"
+ "Python code used to get a string with the documentation of an object.")
+
;; For built-in python.el
(my--eval-after-load python
+ (add-to-list 'python-shell-setup-codes 'my/python-eldoc-setup-code) ; Used inside (python-shell-send-setup-code)
+ (defun my/python-eldoc-at-point (&optional symbol)
+ "Show full docs for symbol at point."
+ (interactive
+ (let ((symbol (python-info-current-symbol t))
+ (enable-recursive-minibuffers t))
+ (list (read-string (if symbol
+ (format "Describe symbol (default %s): " symbol)
+ "Describe symbol: ")
+ nil nil symbol))))
+ (let ( (python-eldoc-string-code my/python-eldoc-string-code)
+ (python-eldoc-setup-code my/python-eldoc-setup-code) )
+ (switch-to-buffer (get-buffer-create "*Python-doc*"))
+ (read-only-mode -1)
+ (buffer-disable-undo)
+ (erase-buffer)
+ (insert (python-eldoc--get-doc-at-point symbol))
+ (goto-char (point-min))
+ (when (re-search-forward "^u?'" (line-end-position) t)
+ (replace-match ""))
+ (while (re-search-forward "\\\\n" nil t)
+ (replace-match "\n"))
+ (goto-char (point-max))
+ (when (eq ?' (char-before))
+ (delete-char -1))
+ (read-only-mode 1)
+ (goto-char (point-min))))
+ (define-key python-mode-map "\C-c\C-d" 'my/python-eldoc-at-point)
+
(defun my-python/send-paragraph ()
(interactive)
(save-excursion
@@ -2754,6 +2818,7 @@
(python-shell-send-region (point) (mark))))
(define-key python-mode-map [?\C-c ?\C-h] 'my-python/send-paragraph))
+
;; For 3rd party python-mode.el.
(my--eval-after-load python-mode
(when (and (boundp 'py-version) (equal py-version "5.1.0"))