Emacs mark-areaでquickrunの有効範囲を指定しておく

リージョンやナローイングするのが面倒だったので、有効範囲をあらかじめ決める方法をとりました。

mark-area

mark-area.elはマークの開始点と終了点をquickrun.elのような他のelispに提供できるように作ってみました。

ShingoFukuyama/mark-area

マークは見えますが実態はなく、ファイルに影響を与えません。DEL(C-h)キーやC-dをマークの直後ですることで消せます。また開始/終了点が存在するときにもう一度セットしようとすると両方消せます。

以下のようにmark-area-at-pointをキーボードにセットして使います。


(require 'mark-area)
(setq mark-area-beginning-char "☆") ;; Beginning mark
(setq mark-area-end-char "★")       ;; End mark
(global-set-key (kbd "M-M") 'mark-area-at-point) ;;[shift+meta+m]

そして他のelispに適応させるコードを書きます。

有り難く使わせていただいています。syohex/emacs-quickrun


(require 'quickrun) ;; https://github.com/syohex/emacs-quickrun

;; そのときの状況に応じて4通りに振り分ける
(defun quickrun-mark-area-ad-hoc ()
  (interactive)
  ;; バッファでマークを使用可能にする
  (mark-area-set-local-variable)
  (cond
   ;; リージョン時に C-u M-x quickrun-mark-area-ad-hoc
   ((and mark-active current-prefix-arg)
    (deactivate-mark)
    (quickrun-replace-region (region-beginning) (region-end)))
   ;; リージョン時に M-x quickrun-mark-area-ad-hoc with region
   (mark-active
    (deactivate-mark)
    (quickrun :start (region-beginning) :end (region-end)))
   ;; 2つのマークが存在時に M-x quickrun-mark-area-ad-hoc
   ((and (mark-area-b) (mark-area-e))
    (quickrun :start (mark-area-b)
              :end (mark-area-e)))
   ;; それ以外は通常
   (t (quickrun))))

別の話ですが、1作目と2作目がMELPAに登録されました!

MELPAから、helm-css-scssとhelm-swoopで検索してみてください。