mikutterの投稿ボックスを強化するプラグイン: mikutter_shell_post
mikutter_shell_postとは
特定の宛先に向けたリプライをコマンドとして解釈し,実行するプラグインです.C++やHaskellのコードをコンパイルして実行したりもできます.また,式展開機能もあるので,気軽に使えるプラグインでもあります.現在存在している中では,おそらく最も気持ち悪い部類のmikutterプラグインの1つでしょう.
インストール方法
下記のコマンドを実行するだけです.
mkdir -p ~/.mikutter/plugin cd ~/.mikutter/plugin git clone git://github.com/penguin2716/mikutter_shell_post.git
機能紹介
mikutterコマンドの実行
@systemに向けたリプライはmikutter内部で実行され,実行結果がシステムメッセージとしてタイムラインに流れてきます.
@system 10.times do |x| Plugin.call(:update, nil, [Message.new(:message => "count#{x}", :system => true)]) end
シェルコマンドの実行
@shellに向けたリプライはシェルコマンドとして認識され,シェルでの実行結果がシステムメッセージとしてタイムラインに流れてきます.
@shell uname -a
@shellに向けたコマンドには自動的にtimeout 10が先頭についているので,pingのようなコマンドをうっかり叩いてしまってもちゃんと終了します.これでは端末を開いたりするときに都合が悪くなるので,@shell_p宛のコマンドはtimeoutしないようになっています.
@shell_p urxvt
Ruby,Python,Perlの実行
@shell_rb,@shell_py,@shell_plに向けたリプライはそれぞれRuby,Python,Perlのコマンドとして解釈されます.
@shell_rb 10.times do |x| puts "count #{x}" end
@shell_py for i in range(10): print "count%d" % i
@shell_pl for ($i = 0; $i < 10; $i++) { print "count$i\n"; }
C,C++のコードの実行
@shell_cと@shell_cppにむけたリプライはC,C++のコードとして解釈され,コンパイル後に実行されます.
@shell_c #include <stdio.h> int main(int argc, char **argv) { printf("Hello, world!\n"); return 0; }
@shell_cpp #include <iostream> using namespace std; int main(int argc, char **argv) { cout << "Hello, world!" << endl; return 0; }
任意のスクリプト言語の実行
@script 実行コマンド コード...
の形式で
@script gnuplot -p v0 = 0 g = 9.8 set yrange [0:10] set xrange [0:2] set xlabel "time [sec]" set ylabel "height [m]" set title "Free Fall" unset key plot v0 * x + 0.5 * (-g) * x **2 + 10 linewidth 2
任意のコンパイル言語の実行
@compile [保存するファイル名] [実行時のコマンド] コンパイルコマンド ソース...
の形式で投稿すると,ソースがファイルに書かれてコンパイルされ,実行されます.実行結果はmikutterのシステムメッセージとしてタイムラインに流れてきます.
@compile [src.cpp] [timeout 10 ./a.out] g++ -O3 -march=native #include <iostream> using namespace std; int main(void) { cout << "Hello, world!" << endl; return 0; }
ちなみに,コンパイルに失敗すると次のようなシステムメッセージがタイムラインに流れます.
src.cpp: In function ‘int main()’: src.cpp:7:1: error: expected ‘;’ before ‘}’ token
@compile [Hello.java] [java Hello] javac import java.awt.*; import java.awt.event.*; import javax.swing.*; class Hello { public static void main(String args[]) { JFrame frame = new JFrame("Java on mikutter"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLayout(new BorderLayout()); frame.setSize(250,100); JButton button = new JButton("Exit"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); frame.add(new JLabel("Java on mikutter"), BorderLayout.NORTH); JPanel panel = new JPanel(); panel.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20)); panel.add(button); frame.add(panel, BorderLayout.CENTER); frame.setVisible(true); } }
Google検索とか
ブラウザとの連携もできます.Googleでmikutterを検索するには
@google mikutter
東京から京都までの電車を調べるには
@maps 東京から京都
特定のURLを開くには
@openurl http://bit.ly/teokure
のように入力して
式展開機能
Rubyでは,文字列中等で#{...}のような括弧の中に式を記述すると,内部の式が先に評価されます.シェルスクリプトでいうバッククォートと似ていますね.このプラグインをインストールすると,式展開機能が使えるようになります.
次のように入力して
2 ** 10 = #{2 ** 10} 2 ** 20 = #{2 ** 20} 2 ** 30 = #{2 ** 30} 2 ** 40 = #{2 ** 40} 2 ** 50 = #{2 ** 50}
すると,#{2 ** 10}が展開され,次のようになります.
2 ** 10 = 1024 2 ** 20 = 1048576 2 ** 30 = 1073741824 2 ** 40 = 1099511627776 2 ** 50 = 1125899906842624