From 0e5d211fcc5952976137828e1eebbe619bdc54b6 Mon Sep 17 00:00:00 2001 From: Ivan Andrus Date: Sat, 29 Jun 2013 18:48:53 -0600 Subject: [PATCH] Added cython-current-defun for add-log-current-defun-function --- Tools/cython-mode.el | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Tools/cython-mode.el b/Tools/cython-mode.el index 8acc74e..2979a5a 100644 --- a/Tools/cython-mode.el +++ b/Tools/cython-mode.el @@ -223,6 +223,23 @@ Finds end of innermost nested class or method definition." (if (< (point) orig) (goto-char (point-max))))) +(defun cython-current-defun () + "`add-log-current-defun-function' for Cython." + (save-excursion + ;; Move up the tree of nested `class' and `def' blocks until we + ;; get to zero indentation, accumulating the defined names. + (let ((start t) + accum) + (while (or start (> (current-indentation) 0)) + (setq start nil) + (cython-beginning-of-block) + (end-of-line) + (beginning-of-defun) + (if (looking-at (rx (0+ space) (or "def" "cdef" "cpdef" "class") (1+ space) + (group (1+ (or word (syntax symbol)))))) + (push (match-string 1) accum))) + (if accum (mapconcat 'identity accum "."))))) + ;;;###autoload (define-derived-mode cython-mode python-mode "Cython" "Major mode for Cython development, derived from Python mode. @@ -240,6 +257,9 @@ Finds end of innermost nested class or method definition." #'cython-end-of-defun) (set (make-local-variable 'compile-command) (format cython-default-compile-format (shell-quote-argument buffer-file-name))) + (set (make-local-variable 'add-log-current-defun-function) + #'cython-current-defun) + (add-hook 'which-func-functions #'cython-current-defun nil t) (add-to-list (make-local-variable 'compilation-finish-functions) 'cython-compilation-finish)) -- 2.7.4