
http://www.flickr.com/photos/whitepebble/1381373166/
Sublime Text 2が面白いのでプラグインを作ろうと思い立ち、
API ReferenceとかHow to Create a Sublime Text 2 Pluginとかをチラ見しつつ作成しました。
凄いです。こんな画期的なプラグインが1日もかからず作れました。
プラグインの概要
タイトルにある通り、今回作成した「PrimeCounter」はステータスバーで素数を数えるだけです。
世界中で使われているSublime Text 2ですのでメッセージはもちろん英語。
"Let's calm down and count the prime..."
(素数を数えて落ち着こう・・・)
このメッセージの後に素数が表示されます!
このプラグインは以下の様な様々なシーンでご活用頂けます。
仕組み
Sublimte Text 2ではプラグイン開発のベースとなるクラスとして
EventListener
ApplicationCommand
WindowCommand
TextCommand
を提供しています。
今回はWindowCommandを使いました。機能的には別にWindowCommandじゃなくても良かった気がします。
ファイル構成はこうです

これをSublimte Text 2のパッケージ置き場に適当にディレクトリ作って放り込めば動くんですから凄いですね。
キーバインド
素数のカウントを開始する為のキーバインドを定義しました。
キーバインドは以下のファイルにjson形式で記述する事で実現出来ます。
各プラットフォーム毎に分かれてます
Default (Linux).sublime-keymap
Default (OSX).sublime-keymap
Default (Windows).sublime-keymap
中身はこんな感じです
[
{ "keys": ["ctrl+shift+p"], "command": "prime" }
]
ctrl+shift+pで素数のカウントをスタート・ストップ出来ます。
実装
実装は以下の通り。素数計算は適当です。
重要なのはrunメソッドとdescriptionメソッド。これはWindowCommandクラスのメソッドをオーバーライドしています。
sublime.status_messageメソッドでステータスバーに文字列を表示させています。
sublime.set_timeoutメソッドはjavascriptのsetTimeoutと同じで、指定した関数を指定ミリ秒後に実行します。lambda式で生成したメソッドでincrementメソッドを呼び出してます。これによって1秒毎に素数を数え上げていっています。
今回は利用していないですがスレッドも使えるし、もちろん通信も出来るのでなんでもありですね。
ファイルアクセス系は試してませんが、どこでもアクセス出来るとなるとセキュリティ怖いですね。
そもそもEventListenerで色々取れるし、というか開いている文書の情報には全アクセス出来る気がするので色々お漏らし出来そうな悪寒はありますね。怖い怖い。
# -*- coding: utf-8 -*-
import sublime, sublime_plugin
import thread
#Prime Counter
isStart=False
class PrimeCommand(sublime_plugin.WindowCommand):
prime = 1
def run(self):
global isStart
if isStart:
isStart = False;
self.prime = 1
else:
isStart = True
self.increment()
def description(self, args):
return "prime counter."
def increment(self):
if isStart == True:
self.prime = self.next_prime(self.prime)
sublime.status_message("Let's calm down and count the prime..."+str(self.prime))
sublime.set_timeout(lambda:self.increment(), 1000)
def next_prime(self, now):
p = now
while True:
is_prime = True
p = p+1
div_max = p/2
if div_max < 2:
return p
for i in range(2, div_max+1):
if p%i == 0:
is_prime = False
break
if is_prime==True:
return p
インストールの仕方
PrimeCounterはgithubで公開しています。Sublime Text 2にインストールするにはまずリポジトリを追加します。(Sublime Package Controlがインストールされている事とします)
command+shift+pでCommand Paletteを開き、"add repository"と入れると出てきます。

画面下部にリポジトリ追加のエディットが出てくるので
https://github.com/sys1yagi/PrimeCounter
を入力してEnter
その後またCommand Paletteを開き、次は"install"を入力

インストールするプラグインを絞り込む為に"PrimeCounter"と入れると出てきます。

Enterを押せばPrimeCounterがインストールされます。
実行!
ctrl+shift+pで実行!
素数がカウントされていきます・・・!
終わりに
素数計算部分がしょぼいのでpull request待ってます。
あとこれ並列計算に何か使えないかなーとか。おもた
0 件のコメント:
コメントを投稿