yaotti's diary

Software is Eating the World

pythonでdedent

集合知プログラミングを読み初めた。
大学の講義で習った機械学習などの理論を実際どう使うかが書かれていておもしろい。
使用言語はpythonなのでEmacsにpymacsを入れ、pythonのリファレンスを読みつつ進めているところ。
pymacsは Pymacsを使ってPythonでEmacs拡張 - Pyro Memoを参考にして入れた。


そこで問題が。
Emacsだとインデントを自動でやってくれるけど、そのインデントを消すにはいちいちpython-indent分(自分の場合はSPC4つ分)戻らなければならないので面倒。
dedent関数がpython-modeになさそうだったので書いてみた。

(defun python-dedent ()
  "deindent in python"
  (interactive)
  (save-excursion
    (beginning-of-line-text)
    (if (>= (- (point) (point-at-bol)) 4)
	(delete-backward-char 4))
  ))
;; key-bind
(define-key global-map (kbd "C-S-i") 'python-dedent)

ifのpredicateの書き方が気にいらないけど、現在行での行頭からの文字数を得る方法がわからなかったのでこれで。
何かありそうなんだけどなー。

マジックナンバー(python-indent)が入ってるのは気にしないことにする。
というか特定のelispが読まれたときに定義する方法がわからない。
この関数をpython-modeに書きこむべきなのかなー。