Emacsの簡単な電卓

暗算だとちょっとめんどくさい計算をするとき、電卓的なソフトをわざわざ立ち上げるのもめんどくさいので、いままでGoogle先生にお伺いを立てていたのですが、それもめんどくさいので、Emacsでできるはずだとおもって調べたらありました。

M-x calculator

は簡易電卓で、

M-x calc-grab-region

は選択中の領域を計算です。

こういった領域選択が必要な関数をなんらかのキーにバインドするときは、領域選択されていないときに別の関数を割り当てたくなりますよね。

ということで

(defun my-calc (beg end)
  (interactive (list (point) (mark t)))
  (if (and (interactive-p) transient-mark-mode (not mark-active))
      (calculator)
    (calc-grab-region beg end nil)))
(global-set-key (kbd "M-c") 'my-calc)

M-cにはもともとcapitalize-wordが割り当てられてますが、僕は使ったこと無いのでこれにしました。

この、

(if (and (interactive-p) transient-mark-mode (not mark-active))
  ...
)

みたいなのは便利で、

;;領域選択されてなければdelete-window されてればkill-region
(defun kill-region-or-delete-window (beg end)
  (interactive (list (point) (mark t)))
  (if (and (interactive-p) transient-mark-mode (not mark-active))
      (delete-window)
    (kill-region beg end)))
(global-set-key (kbd "C-w") 'kill-region-or-delete-window)

みたいな風にもつかっております。