Mercurial > emacs
comparison lisp/progmodes/python.el @ 81824:0a0e79e50844
(python-which-func-length-limit): New var.
(python-which-func): New function.
(python-current-defun): Add optional `length-limit' and try to fit
computed function name to that length.
(python-mode): Hook `python-which-func' up.
| author | Stefan Monnier <monnier@iro.umontreal.ca> |
|---|---|
| date | Thu, 12 Jul 2007 04:36:48 +0000 |
| parents | f0107aee8e99 |
| children | b98604865ea0 a66921565bcb |
comparison
equal
deleted
inserted
replaced
| 81823:d3277da93598 | 81824:0a0e79e50844 |
|---|---|
| 994 (python-skip-comments/blanks t) | 994 (python-skip-comments/blanks t) |
| 995 (beginning-of-line 2) | 995 (beginning-of-line 2) |
| 996 (throw 'done t))))))) | 996 (throw 'done t))))))) |
| 997 (setq arg (1- arg))) | 997 (setq arg (1- arg))) |
| 998 (zerop arg))) | 998 (zerop arg))) |
| 999 | 999 |
| 1000 (defvar python-which-func-length-limit 40 | |
| 1001 "Non-strict length limit for `python-which-func' output.") | |
| 1002 | |
| 1003 (defun python-which-func () | |
| 1004 (let ((function-name (python-current-defun python-which-func-length-limit))) | |
| 1005 (set-text-properties 0 (length function-name) nil function-name) | |
| 1006 function-name)) | |
| 1007 | |
| 1008 | |
| 1000 ;;;; Imenu. | 1009 ;;;; Imenu. |
| 1001 | 1010 |
| 1002 (defvar python-recursing) | 1011 (defvar python-recursing) |
| 1003 (defun python-imenu-create-index () | 1012 (defun python-imenu-create-index () |
| 1004 "`imenu-create-index-function' for Python. | 1013 "`imenu-create-index-function' for Python. |
| 1812 The level is the number of `python-indent' steps of indentation | 1821 The level is the number of `python-indent' steps of indentation |
| 1813 of current line." | 1822 of current line." |
| 1814 (1+ (/ (current-indentation) python-indent))) | 1823 (1+ (/ (current-indentation) python-indent))) |
| 1815 | 1824 |
| 1816 ;; Fixme: Consider top-level assignments, imports, &c. | 1825 ;; Fixme: Consider top-level assignments, imports, &c. |
| 1817 (defun python-current-defun () | 1826 (defun python-current-defun (&optional length-limit) |
| 1818 "`add-log-current-defun-function' for Python." | 1827 "`add-log-current-defun-function' for Python." |
| 1819 (save-excursion | 1828 (save-excursion |
| 1820 ;; Move up the tree of nested `class' and `def' blocks until we | 1829 ;; Move up the tree of nested `class' and `def' blocks until we |
| 1821 ;; get to zero indentation, accumulating the defined names. | 1830 ;; get to zero indentation, accumulating the defined names. |
| 1822 (let ((start t) | 1831 (let ((start t) |
| 1823 accum) | 1832 (accum) |
| 1824 (while (or start (> (current-indentation) 0)) | 1833 (length -1)) |
| 1834 (while (and (or start (> (current-indentation) 0)) | |
| 1835 (or (null length-limit) | |
| 1836 (null (cdr accum)) | |
| 1837 (< length length-limit))) | |
| 1825 (setq start nil) | 1838 (setq start nil) |
| 1826 (python-beginning-of-block) | 1839 (python-beginning-of-block) |
| 1827 (end-of-line) | 1840 (end-of-line) |
| 1828 (beginning-of-defun) | 1841 (beginning-of-defun) |
| 1829 (if (looking-at (rx (0+ space) (or "def" "class") (1+ space) | 1842 (when (looking-at (rx (0+ space) (or "def" "class") (1+ space) |
| 1830 (group (1+ (or word (syntax symbol)))))) | 1843 (group (1+ (or word (syntax symbol)))))) |
| 1831 (push (match-string 1) accum))) | 1844 (push (match-string 1) accum) |
| 1832 (if accum (mapconcat 'identity accum "."))))) | 1845 (setq length (+ length 1 (length (car accum)))))) |
| 1846 (when accum | |
| 1847 (when (and length-limit (> length length-limit)) | |
| 1848 (setcar accum "..")) | |
| 1849 (mapconcat 'identity accum "."))))) | |
| 1833 | 1850 |
| 1834 (defun python-mark-block () | 1851 (defun python-mark-block () |
| 1835 "Mark the block around point. | 1852 "Mark the block around point. |
| 1836 Uses `python-beginning-of-block', `python-end-of-block'." | 1853 Uses `python-beginning-of-block', `python-end-of-block'." |
| 1837 (interactive) | 1854 (interactive) |
| 2246 (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil) | 2263 (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil) |
| 2247 (make-local-variable 'python-saved-check-command) | 2264 (make-local-variable 'python-saved-check-command) |
| 2248 (set (make-local-variable 'beginning-of-defun-function) | 2265 (set (make-local-variable 'beginning-of-defun-function) |
| 2249 'python-beginning-of-defun) | 2266 'python-beginning-of-defun) |
| 2250 (set (make-local-variable 'end-of-defun-function) 'python-end-of-defun) | 2267 (set (make-local-variable 'end-of-defun-function) 'python-end-of-defun) |
| 2268 (add-hook 'which-func-functions 'python-which-func nil t) | |
| 2251 (setq imenu-create-index-function #'python-imenu-create-index) | 2269 (setq imenu-create-index-function #'python-imenu-create-index) |
| 2252 (set (make-local-variable 'eldoc-documentation-function) | 2270 (set (make-local-variable 'eldoc-documentation-function) |
| 2253 #'python-eldoc-function) | 2271 #'python-eldoc-function) |
| 2254 (add-hook 'eldoc-mode-hook | 2272 (add-hook 'eldoc-mode-hook |
| 2255 (lambda () (run-python nil t)) ; need it running | 2273 (lambda () (run-python nil t)) ; need it running |
