2009-09-13 13 views
5

python-modeにはpy-execute-regionという関数があり、評価のためにPythonバッファにハイライトされたコード領域を送ります。評価の後、カーソルはPythonバッファにありますが、スクリプトバッファに残っていればより多くのコードを作成し続けることができます。私は簡単なアドバイス機能を書いた:python-mode関数のEmacs defadvice

(defadvice py-execute-region             
    (after py-execute-region-other-window activate)       
    """ After execution, return cursor to script buffer """     
    (other-window 1)               
) 

しかし、これはまったく何もしない。私は 'after'ではなく 'around'を使うような他の変種を試しました。変数をスクリプトのバッファ名に設定してから、そのバッファにpop-to-bufferして、そのようなものを入れます。失敗!私はこのことの仕組みが誰かに明らかであるかどうか疑問に思います...ありがとう!

答えて

8

この場合、解決策は、私が実際にこれを試していないが、私が見つけること-ファイルの似た何かをしなかった、とあそこに私が他を呼び出す前に、インタラクティブ呼び出すために必要な

(custom-set-variables 
'(py-shell-switch-buffers-on-execute nil)) 
1

あなたが持っているものは私のためにうまくいきます。自動起動する必要がありますので、別途起動する必要はありません。それはあなたがやりたいので、アドバイス

は変更されません)を定義し、アドバイス

2を活性化させる)

1:ただし、アクティブ解除し、変更を有効にするために、再度アクティブなアドバイスをする必要があります

3)を非アクティブ化:(AD-無効 'PY実行領域)

4)を再アクティブ化:(AD-アクティベート' PY実行領域)

変化をピックアップする必要があり、ステップ4ステップ2で作成しました。あるいは、ステップ2でコードを変更してから、手順4でコードを評価します(activateフラグが設定されていると仮定します)。コマンドが完了した後、前のウィンドウ 構成を復元れる、 save-window-excursionへの呼び出しで関数をラップする包囲アドバイス

+0

ありがとうございます...しかし、まだ私のために動作しません。 defadviceの本体を(other-window 1)( "x"を挿入)に置き換えると、スクリプトバッファに "x"が置かれますが、カーソルはまだPythonバッファに残っています...非常に混乱します。 – hatmatrix

+0

同じ機能に対して他のアドバイスが有効になっていますか? この時点で、私はプレーンなバニラemacs(emacs -q)を起動し、Pythonモードを読み込み、アドバイスを定義して起動し、まだ動作しないかどうかを確認します。何らかの奇妙な相互作用が起こっているかもしれません。 –

2

使用。

(defadvice py-execute-region 
    (around preserve-window-configuration activate) 
    "After execution, return cursor to script buffer" 
    (save-window-excursion ad-do-it)) 

は、コマンドが完了した後に、それはまだ表示されません 、Pythonのバッファがまだ示されていなかった場合ということ、しかし、覚えておいてください。それを解決するには、あなたが 最後にスイッチ・ツー・バッファ・他のウィンドウを呼び出すためのアドバイスの別の部分を追加することができ :また

(defadvice py-execute-region 
    (after show-pybuf-other-window activate) 
    "After execution, show the python buffer in another window." 
    (switch-to-buffer-other-window "[PYTHON BUFFER NAME]")) 

、あなたはelispの中"""triple quotes"""を使用していないことを確認してください。私は 彼らは動作するとは思わない。

+0

ありがとう!しかし、どちらも動作しません...save-window-excursionは私が望むように聞こえるが、何もしないように見え、2番目のスクリプトはPythonとスクリプトバッファの位置を反転させる(スクリプトバッファが元々あったウィンドウにカーソルを置く)。私はもともとswitch-to-buffer-other-windowの代わりにpop-to-bufferと似たようなものを試していましたが、Pythonバッファもスクリプトウィンドウに入れました! – hatmatrix

+0

save-window-excursionの中でコマンドを実行すると、そのコマンドが終了した後に、コマンドを実行したときと同じになります。他の古いアドバイスも有効にしていないことを確認してください。 –

+0

ありがとうございます - はい、私のウィンドウの構成は変更されていませんが、カーソルはPythonバッファーに終わります。私はコンセプトを得ていると思いますが、これが他の試行の仕組みがどういうものなのかはわかりません... – hatmatrix

1

ように見えます-窓。私は実際にEmacs Lispの実際のアイデアはありませんが、これはうまくいくかもしれません。

(defadvice py-execute-region             
    (after py-execute-region-other-window activate)       
    (interactive) 
    (other-window 1)               
)