*Megahurtz py-mode.l
Deecayさんが楽しそうなのでxyzzyにはまってみたりしているわけだけど、lispはカッコばっかりで目が回りそう。
いろいろな拡張や標準スクリプトやウェブサイトを参考にしつつバッファー上のコードをpython shellで実行する拡張を書いてみた。主にM.Hiroi's Home Pageのコードサンプルが元になっている。

(setf *python-buffer-name* "Output - python")

(defun run-python ()
  (interactive)
  (let* ((py-file (get-buffer-file-name))
         (dir      (directory-namestring py-file))
         (tmp-file (make-temp-file-name))
         (output   (find-buffer *python-buffer-name*))
         result)
    (setf result (call-process (concat "pythonw " py-file)
                               :output tmp-file
                               :exec-directory dir
                               :show :minimize
                               :wait t))
    (unless output
      (setf output (let ((output (create-new-buffer *python-buffer-name*)))
                     (save-excursion (set-buffer output) (setq need-not-save t))
                     output)))

    (erase-buffer output)
    (pop-to-buffer output t)
    (insert-file-contents tmp-file)
    (set-buffer-modified-p nil)

    (delete-file tmp-file)))