keyhacでクリップボード内のJavaScriptコードを整形/圧縮(JSBeautifier/SlimIt)
JavaScriptをさわってる人ならご存知の人も結構いそうなOnline JavaScript beautifier。JavaScriptコードを見やすく整形してくれるWebサービスです。
僕はブックマークレットを作る際など便利でよく使っているのですが、サイトを見てるとコマンドラインバージョンということでPythonコードでも公開されていました。探したらSlimItという圧縮する方も発見。
keyhac*1でクリップボード内のテキストに対して直接実行できたら便利だろうなと書いたのが ↓ のコード。
Win+Jで整形、Win+Sift+Jで高圧縮、Win+Ctrl+Jで低圧縮、というキー配置にしています。
from keyhac import * ## 関数を返す関数にするデコレータ def ret_func(func): import functools @functools.wraps(func) def _ret_func(*args, **kw): @functools.wraps(func) def __ret_func(): return func(*args, **kw) return __ret_func return _ret_func ## JobQueue/JobItem でサブスレッド処理にするデコレータ def job_queue(func): import functools @functools.wraps(func) def _job_queue(*args, **kw): num_items = JobQueue.defaultQueue().numItems() if num_items: # 処理待ちアイテムがある場合は、その数を表示 print u"JobQueue.defaultQueue().numItems() :", num_items def __job_queue_1(job_item): return func(*args, **kw) def __job_queue_2(job_item): # print "job_queue : ", func.__name__, args, kw pass job_item = JobItem(__job_queue_1, __job_queue_2) JobQueue.defaultQueue().enqueue(job_item) return _job_queue ## JavaScriptコードを整形 # JSBeautifier : http://jsbeautifier.org/ @job_queue def jsbeautifier(): import jsbeautifier clipboard_text = getClipboardText() if clipboard_text: js_options = jsbeautifier.default_options() js_options.jslint_happy = True new_code = jsbeautifier.beautify(clipboard_text, js_options) setClipboardText(new_code) print print "/* jsbeautifier */" print "// before --------------------" print clipboard_text print "// after --------------------" print new_code ## JavaScriptコードを圧縮 # SlimIt : http://slimit.org/ # PLY : http://www.dabeaz.com/ply/ @ret_func @job_queue def jsminify(mangle=False): import slimit clipboard_text = getClipboardText() if clipboard_text: new_code = slimit.minify(clipboard_text, mangle) setClipboardText(new_code) print print "/* SlimIt (mangle=%s) */" % mangle print "// before --------------------", len(clipboard_text), "byte" print clipboard_text print "// after --------------------", len(new_code), "byte" print new_code def configure(keymap): keymap_global = keymap.defineWindowKeymap() # JavaScriptコードを整形 keymap_global["W-j"] = jsbeautifier # JavaScriptコードを圧縮(高圧縮) keymap_global["W-S-j"] = jsminify(mangle=True) # JavaScriptコードを圧縮(低圧縮) keymap_global["W-C-j"] = jsminify(mangle=False)
■ ライブラリのインストール
・JSBeautifier
https://github.com/einars/js-beautify/raw/master/python/jsbeautifier.py
↑ のファイルをkeyhacのextensionフォルダへコピーする。
・SlimItとPLY(コード解析)
https://github.com/rspivak/slimit
圧縮ファイルをダウンロードし、圧縮ファイルのsrcフォルダ下にslimitをフォルダごとkeyhacのextensionフォルダへコピーする。
http://www.dabeaz.com/ply/
圧縮ファイルをダウンロードし、圧縮ファイルのplyをフォルダごとkeyhacのextensionフォルダへコピーする。
■ さいごに
ブックマークレットをよく書くという方は特に便利だと思うので、よかったら使ってみてください。
■ 参考リンク
*1:Autohotkeyみたいなフリーソフトで、Pythonコードで色んなソフトのショートカットキーを設定できる