アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

4つ単位で増加するuniversal-argumentで大丈夫か

こんにちは、chibaです!
ネタ切れなので、どうでも良い感じのEmacsの日々を書きます。

Emacsのユーザーには、お馴染の数引数を入力するC-uですが、デフォルトだと(* 4)な感じで増加していきます。

================================================================

は、C-u C-u C-u =の様に入力したりしていますが、自分は便利だなと思うのはこれ位です。
どちらかというと一個ずつ増加していった方が便利なのではないだろうか、ということで、オリジナルのコードを改造して作ってみました。
C-uと置き換えてみても良かったのですが、super+uということにしてみましたが、どんな感じなのかしばらく様子を見てみたいと思います。

(defun universal-argument-1+ ()
  (interactive)
  (setq prefix-arg (list 1))
  (setq universal-argument-num-events (length (this-command-keys)))
  (ensure-overriding-map-is-bound))

(defun universal-argument-1+-more (arg)
  (interactive "P")
  (cond ((consp arg)
         (setq prefix-arg
               (list (if (minusp (car arg))
                         (1- (car arg))
                         (1+ (car arg))))))
        ((eq arg '-)
         (setq prefix-arg (list -1)))
        ('T (setq prefix-arg arg)
            (restore-overriding-map)))
  (setq universal-argument-num-events (length (this-command-keys))))

(define-key global-map [(super u)]
  'universal-argument-1+)

(define-key universal-argument-map [(super u)]
  'universal-argument-1+-more)