quickrun 20170222.1715(in MELPA)
Run commands quickly

概要

Emacs内で開発中のプログラム実行をカンタンにする quickrun.el ですが、
いつのまにかめっちゃパワーアップしてました。

元々、標準の M-x compileM-x executable-interpret
お手軽かつ空気読めるバージョンとして開発されました。

正直、出た当初のころは話題沸騰ながらも、
俺的にはしっくりこなくて放置していました。

MELPAで更新されていたのを機に再び使ってみたら、
なかなかイケてる感じでした。

今や、いろいろな形での実行がサポートされており、
helmanything インターフェースまで
出来ているではありませんかっ!!

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.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/")))

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

M-x package-install quickrun

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

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

対応言語

対応プログラミング言語もものすごい増えていました。

何に対応しているかはコードを見ていただくのが早いでしょう。

(defvar quickrun-file-alist
  '(("\\.c\\'" . "c")
    ("\\.\\(cpp\\|cxx\\|C\\|cc\\)\\'" . "c++")
    ("\\.m\\'" . "objc")
    ("\\.cs\\'" . "c#")
    ("\\.\\(pl\\|pm\\)\\'" . "perl")
    ("\\.rb\\'" . "ruby")
    ("\\.py\\'" . "python")
    ("\\.php\\'" . "php")
    ("\\.\\(el\\|elisp\\)\\'" . "emacs")
    ("\\.\\(lisp\\|lsp\\)\\'" . "lisp")
    ("\\.\\(scm\\|scheme\\)\\'" . "scheme")
    ("\\.js\\'" . "javascript")
    ("\\.clj\\'" . "clojure")
    ("\\.erl\\'" . "erlang")
    ("\\.ml\\'" . "ocaml")
    ("\\.\\(fsx?\\|fsscript\\)\\'" . "fsharp")
    ("\\.go\\'" . "go")
    ("\\.io\\'" . "io")
    ("\\.lua\\'" . "lua")
    ("\\.hs\\'" . "haskell")
    ("\\.java\\'" . "java")
    ("\\.d\\'" . "d")
    ("\\.\\(f\\|for\\|f90\\|f95\\)\\'" . "fortran")
    ("\\.\\(md\\|markdown\\|mdown\\|mkdn\\)\\'" . "markdown")
    ("\\.coffee\\'" . "coffee")
    ("\\.jsx\\'" . "jsx")
    ("\\.ts\\'" . "typescript")
    ("\\.scala\\'" . "scala")
    ("\\.groovy\\'". "groovy")
    ("\\.haml\\'" . "haml")
    ("\\.sass\\'" . "sass")
    ("\\.less\\'" . "less")
    ("\\.\\(sh\\|bash\\|zsh\\|csh\\|csh\\)\\'" . "shellscript")
    ("\\.awk\\'" . "awk")
    ("\\.rs\\'" . "rust")
    ("\\.dart\\'" . "dart/checked")
    ("\\.exs?\\'" . "elixir")
    ("\\.tcl\\'" . "tcl")
    ("\\.swift\\'" . "swift")
    ("\\.dats\\'" . "ats")
    ("\\.\\(r\\|R\\)\\'" . "r"))
  "Alist of (file-regexp . key)")

(defvar quickrun/major-mode-alist
  '((c-mode . "c")
    (c++-mode . "c++")
    (objc-mode . "objc")
    (csharp-mode . "c#")
    ((perl-mode cperl-mode) . "perl")
    (ruby-mode . "ruby")
    (python-mode . "python")
    (php-mode . "php")
    (emacs-lisp-mode . "emacs")
    (lisp-mode . "lisp")
    (scheme-mode . "scheme")
    ((javascript-mode js-mode js2-mode) . "javascript")
    (clojure-mode . "clojure")
    (erlang-mode . "erlang")
    ((ocaml-mode tuareg-mode) . "ocaml")
    (fsharp-mode . "fsharp")
    (go-mode . "go")
    (io-mode . "io")
    (lua-mode . "lua")
    (haskell-mode . "haskell")
    (java-mode . "java")
    (d-mode . "d")
    (fortran-mode . "fortran")
    (markdown-mode . "markdown")
    (coffee-mode . "coffee")
    (jsx-mode . "jsx")
    (typescript-mode . "typescript")
    (scala-mode . "scala")
    (groove-mode . "groovy")
    (haml-mode . "haml")
    (sass-mode . "sass")
    ((less-mode less-css-mode) . "less")
    (sh-mode . "shellscript")
    (awk-mode . "awk")
    (rust-mode . "rust")
    (dart-mode . "dart/checked")
    (elixir-mode . "elixir")
    (tcl-mode . "tcl")
    (swift-mode . "swift")
    (ats-mode . "ats")
    (ess-mode . "r"))
  "Alist of major-mode and langkey")

基本形M-x quickrun

とりあえず基本は M-x quickrun
メジャーモードでプログラミング言語を自動判別し、
適切なコマンドで実行してくれます。

実行に使うコマンドは「#!」がついていればそれを使い、
登録されているデフォルトのコマンドで実行します。

ruby-modeの場合、デフォルトでrubyコマンドが使われますが、
「#!/usr/local/bin/ruby18」と書いてあればそれを使います。

quickrunでの実行結果はポップアップしますが、
qを押せば元のウィンドウ構成に戻してくれる親切設計です。

実行に10秒(変数 quickrun-timeout-seconds で設定可能)以上かかったときは、
時間がかかりすぎる場合とみなして自動的にプロセスを殺します。

C-u M-x quickrun: 別なインタプリタを選択

C-u M-x quickrun では、どれで実行するのか選べます。

Rubyの場合、デフォルトのruby/ruby以外にもruby/mrubyが用意されていて、
それを選択すれば mrbcmruby で実行してくれます。

C-u C-u M-x quickrunでコンパイルのみ

C-u C-u M-x quickrun ではコンパイルのみを実行します。

インタプリタ言語の場合は文法チェックをします。

Rubyの場合は ruby -c を実行します。

M-x quickrun-with-argで引数をつける

プログラムで引数をつけたいときは M-x quickrun-with-arg を使います。

あるいはバッファローカルな quickrun-option-args 変数に設定します。

スクリーンショットのように1行目のS式を評価してからM-x quickrunを
実行する方法もあります。

20141106135812.png
Fig1: 引数を指定する

入力の自動化

入力を求めてくる対話的プログラムの自動実行もサポートしています。

ファイル名に「.qrinput」というサフィックスをつけたファイルを用意し、
そこに入力する内容を書けば、実行時にその内容を入力してくれます。

入力のパターンが複数ある場合は、
quickrun-input-file-extension で他のサフィックスを指定します。

20141106140319.png
Fig2: .qrinputファイルで入力を指定

もう一つの方法として M-x quickrun-shell
eshell を使って実行させることもできます。

20141106140545.png
Fig3: M-x quickrun-shell

helm/anythingインターフェース

現時点でなにができるかを知りたければ、
helm をインストールして
M-x helm-quickrun を実行してください。

anything ならば M-x anything-quickrun です。

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


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