schrute 20161124.1227(in MELPA)
Help you remember there is a better way to do something.

概要

Emacsには様々な便利機能が存在します。
あまりにも多すぎて、上級者であってもついつい忘れてしまうこともあるのではないでしょうか?
そこで、思い出させてくれるのを支援するマイナーモードがあります。

schrute.elが提供するグローバルモードM-x schrute-modeです。

たとえば、avy を導入している場合、C-pやC-nを連発するよりもM-x avy-goto-lineを使った方が効率がよいです。
特定のコマンドを一定時間以内に連続して実行したときに、よりよい方法を教えてくれるのがschrute-modeの役割です。

オリジナルの設定では、左右移動を連発したときにavy-goto-charを実行させるようにしていますが、日本語環境ではかえって面倒なことになるので本設定では外しています。

他にもいろいろな設定を加えると面白いと思います。

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてschruteを使う方は
以下のコマンドを実行します。

M-x package-install schrute

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name schrute

設定 161124140404.schrute.el(以下のコードと同一)

(setf schrute-shortcuts-commands
      '((avy-goto-line                  ;便利なコマンド
         ;; 以下のコマンドを連発したときに発動させる
         next-line previous-line)))


;;; [2016-11-24 Thu]時点ではバグがあるので再定義しておく
;;; 修正され次第消す
(require 'schrute)
(defun schrute-mode-activate ()
  "Do some setup when the global minor mode is activated."
  (if schrute-mode
      (add-hook 'post-command-hook #'schrute-check-last-command)
    (remove-hook 'post-command-hook 'schrute-check-last-command))
  ;; regenerate the list of commands we are interested
  (let* ((elemen)
         (command-list))
    (setf schrute--interesting-commands nil)
    (dolist (elemen schrute-shortcuts-commands)
      (setf command-list (cdr elemen))
      (cond ((symbolp command-list) (push command-list schrute--interesting-commands))
            ((listp command-list) (setf schrute--interesting-commands (append schrute--interesting-commands command-list)))))))
(defun schrute--run-command ()
  "Helper that will run an alternative-command."
  (let* ((alternative-command)
         (command-list))
    (dolist (elem schrute-shortcuts-commands)
      (setf alternative-command (car elem))
      (setf command-list (cdr elem))
      (when (or (member this-command command-list)
               (eq this-command command-list))
        (schrute--call-until-success alternative-command)))))

(schrute-mode)

実行方法

$ wget http://rubikitch.com/f/161124140404.schrute.el
$ emacs -Q -f package-initialize -l 161124140404.schrute.el

本サイト内の関連パッケージ


参考サイト

本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。