- quickrun 20170222.1715(in MELPA)
- Run commands quickly
概要
Emacs内で開発中のプログラム実行をカンタンにする quickrun.el ですが、
いつのまにかめっちゃパワーアップしてました。
元々、標準の M-x compile や M-x executable-interpret の
お手軽かつ空気読めるバージョンとして開発されました。
正直、出た当初のころは話題沸騰ながらも、
俺的にはしっくりこなくて放置していました。
MELPAで更新されていたのを機に再び使ってみたら、
なかなかイケてる感じでした。
今や、いろいろな形での実行がサポートされており、
helm や anything インターフェースまで
出来ているではありませんかっ!!
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.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が用意されていて、
それを選択すれば mrbc や mruby で実行してくれます。
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を
実行する方法もあります。
Fig1: 引数を指定する
入力の自動化
入力を求めてくる対話的プログラムの自動実行もサポートしています。
ファイル名に「.qrinput」というサフィックスをつけたファイルを用意し、
そこに入力する内容を書けば、実行時にその内容を入力してくれます。
入力のパターンが複数ある場合は、
quickrun-input-file-extension で他のサフィックスを指定します。
Fig2: .qrinputファイルで入力を指定
もう一つの方法として M-x quickrun-shell で
eshell を使って実行させることもできます。
Fig3: M-x quickrun-shell
helm/anythingインターフェース
現時点でなにができるかを知りたければ、
helm をインストールして
M-x helm-quickrun を実行してください。
anything ならば M-x anything-quickrun です。
本サイト内の関連パッケージ
- helm - Helm is an Emacs incremental and narrowing framework
- anything - open anything / QuickSilver-like candidate-selection framework
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。