python-ex-util.el書いた。

emacspythonのコードを書いている時に便利になるんじゃないかなと思うような機能が入っている。

具体的な機能

  • 現在開いているバッファのコードを実行(python-ex-util:eval-buffer-with-current-python)
  • 現在importしているmoduleへ飛ぶ(python-ex-util:anything-ffap)
    • anythingあったほうがいいよ。

これらの機能がvirtualenvwrapperの環境に対応しているのが便利な点。

例えば、/home/podhmo/.virtualenvs/flask/app.pyを開いて

(後で紹介する設定をしていると)

  • C-c @ でapp.pyを実行
    • .virtualenvsの下のファイルなのでflaskの環境のpythonを使って実行
    • (virtualenv環境以外のファイルは、デフォルトのpythonを使って実行)
  • C-c C-f でimportしているモジュールの候補を表示(anythingで選択)
    • 上と同じ(以下略)

install

その前に依存関係。

requirement

githubに上げたのでそこから取ってくる。with-prefix.elはあればいらない。

git clone git@github.com:podhmo/python-ex-util.git
cd python-ex-util
cp with-prefix.el <load-pathの通っているディレクトリ>
cp python-ex-util.el <load-pathの通っているディレクトリ>

.emacsの設定

githubに上げたリポジトリのinit.elが参考になるかも。こんな感じで設定する。

(require 'python-ex-util)

(defun peu:init ()
  (let ((kmap (current-local-map)))
    (define-key kmap "\C-c@" 'python-ex-util:eval-buffer-with-current-python)
    (cond ((fboundp 'anything)
           (define-key kmap "\C-c\C-f" 'python-ex-util:anything-ffap))
          (t 
           (define-key kmap "\C-c\C-f" 'python-ex-util:ffap/import-sentence)))))

(defmacro peu:dispatch (py-mode python-mode)
  `(if (boundp 'py-mode-hook) ',py-mode ',python-mode))

(add-hook (peu:dispatch py-mode-hook python-mode-hook) 'peu:init)

下のははC-c C-fを入力した時の風景。