Функция Emacs для сообщения функции Python, в которой я нахожусь - PullRequest
10 голосов
/ 23 апреля 2009

Я редактирую некоторый код 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)))))

Ответы [ 3 ]

21 голосов
/ 23 апреля 2009

Вы можете найти приличные результаты с which-function-mode :

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

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

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

2 голосов
/ 23 апреля 2009

Вы пробовали 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, но если это не та проблема, с которой вы столкнулись, то, возможно, я просто вижу другой симптом причины невежества в моем другом ответе .

0 голосов
/ 23 апреля 2009

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

...