2009-04-23 6 views
10

かなり長い関数でいくつかのPythonコードを編集していて、スクロールせずにすぐに関数名を取得すると便利だと決めました。私はそれを行うためにこのコードをまとめました。一般的にemacsに標準で組み込まれているもの、あるいは特に標準的なpythonモードがありますが、代わりに使うことができますか?Python関数にメッセージを送るEmacs関数

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

答えて

21

あなたはwhich-function-modeとまともな結果を見つけることがあります。

あなたがバッファに動き回る として、それを更新し、モード行に現在の関数 名が表示され、マイナーモード あるファンクションモード

機能モードを にするかどうかを指定するには、M-x which-function-modeコマンドを使用します。このコマンドは グローバルです。すべてのバッファに適用されます。 は既存のものと がまだ作成されていません。ただし、特定のメジャーモードでは、 のみが有効になります。 の値は-func-modesとなります。 の値がtの場合、 モードは、 がそれをサポートする方法を知っているすべてのメジャーモードに適用されます。つまり、 をサポートするすべての主要モードです。 Imenu

私はそれが私がここに持っている1つのPythonのファイルで少し混乱取得を参照してくださいが...

+0

はい、この動作はPython –

+1

だけでなく、理想的です。関数ではなく、作業中のクラスを報告しますが、デフォルトでは 'which-func-modes'にはないので、Pythonモードで動作するようです。 – justinhj

+0

関数名を取得したいがマイナーモードは使用しない場合は '(which-function)'を呼び出すこともできます。 – ohspite

0

C-c C-u(py-goto-block-up)は、あなたが望むものかもしれません。

+0

残念ながら、これは、ポスターが望むものではないかもしれないバッファ内を移動する必要があります... –

+0

これは、save-excursionが来るところです。 –

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よりも良い結果が得られますが、それはあなたが抱えている問題ではない場合は、多分私はちょうどmy other answerにwonkinessの原因の別の症状を見ている見つけます。

+0

私はそれを試みるかもしれませんが、それまでのところ、すべての機能のために働いています。 – justinhj