2009-04-23 13 views
10

Estoy editando un código Python con funciones bastante largas y decidí que sería útil obtener rápidamente el nombre de la función sin desplazarme hacia arriba. Puse este bit de código juntos para hacerlo. ¿Hay algo incorporado en emacs en general, o en el modo python estándar en particular, que puedo usar en su lugar?Función de Emacs para enviar un mensaje a la función python Estoy en

(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))))) 

Respuesta

21

Usted puede encontrar resultados decentes con which-function-mode:

Qué modo de función es un modo menor que muestra el nombre de la función actual en la línea de modo, actualizándolo como se mueve alrededor en un búfer.

Para activar o desactivar Qué modo de función , utilice el comando M-x which-function-mode. Este comando es global; se aplica a todos los buffers, tanto los existentes como los que aún no se han creado . Sin embargo, solo tiene efecto en ciertos modos principales, los enumerados en el valor de los cuales-modos-func. Si el valor es t, entonces ¿Qué modo de función se aplica a todos los modos principales que saben cómo soportarlo? En otras palabras, todos los modos principales que admiten Imenu.

Aunque veo que conseguir un poco confundido en un archivo de Python que tengo aquí ...

+0

Sí, y esto funciona no sólo para el pitón –

+1

Gracias, eso es lo ideal. Parece que funciona principalmente en el modo python, aunque informa la clase en la que estás trabajando en lugar de la función, y tienes que habilitarla, ya que no está en 'which-func-modes' por defecto. – justinhj

+0

También puede simplemente llamar a '(which-function)' si desea obtener el nombre de la función pero no usar el modo menor. – ohspite

0

C-c C-u (py-goto-block-up) es lo que usted desea.

+0

Por desgracia, esto requiere que se mueve en la memoria intermedia, que puede no ser lo que quiere cartel ... –

+0

Ahí es donde save-excursion entra en acción. –

2

¿Usted intentó 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))))) 

me parece que me da mejores resultados que su beginning-of-defun, pero si ese no es el problema que tienes, entonces tal vez sólo estoy viendo otro síntoma de la causa de la wonkiness en my other answer.

+0

que podría intentar eso, pero hasta el momento funciona para todas las funciones. – justinhj

Cuestiones relacionadas