Функция Emacs для сообщения функции python, в которой я находится

Я редактирую код Python с довольно длинными функциями и решил, что было бы полезно быстро получить имя функции без прокрутки. Я поместил этот бит кода вместе, чтобы сделать это. Есть ли что-то встроенное в emacs вообще или стандартный режим python, в частности, который я могу использовать вместо этого?

(defun python-show-function-name()
  "Message the name of the function the point is in"
  (interactive)
  (save-excursion
    (beginning-of-defun)
    (message (format "%s" (thing-at-point 'line)))))

Ответ 1

Вы можете найти достойные результаты с который-функция-режим:

Какой режим функции является второстепенным который отображает текущую функцию имя в строке режима, обновив его как вы перемещаетесь в буфере.

Чтобы включить или отключить Функциональный режим, используйте команду M-x который-функция-режим. Эта команда Глобальный; он применяется ко всем буферам, как существующие, так и те, создано. Однако он вступает в силу только в некоторых основных режимах, перечисленных в значении которых-func-моды. Если значение t, то какая функция режим применяется ко всем основным режимам, которые знают, как его поддерживать, другими словами, все основные режимы, поддерживающие Imenu.

Хотя я вижу, что это немного запутано в одном файле Python, который у меня есть здесь...

Ответ 2

Вы попробовали py-beginning-of-def-or-class?

(defun python-show-function-name()
  "Message the name of the function the point is in"
  (interactive)
  (save-excursion
    (py-beginning-of-def-or-class)
    (message (format "%s" (thing-at-point 'line)))))

Я нахожу, что это дает мне лучшие результаты, чем ваш beginning-of-defun, но если это не проблема, которую вы испытываете, то, возможно, я просто вижу еще один симптом причины неудобства в мой другой ответ.

Ответ 3

C-c C-u (py-goto-block-up) может быть тем, что вы хотите.