icon128
openwith...

機能と使い方

まずは設定画面

openwith01

デフォルトではブラウザとエクスプローラを用意しています
好きに追加できるので、「エディタで開く」を追加したり、ここにはないブラウザを追加したり色々できます

ブラウザの右上のボタンを押すと、Popup にチェックが入ってるのが出てきます

openwith02

アイコンをクリックすると、そのアイコンに設定されたコマンドが実行されます
デフォルトだと Firefox アイコンを押すと Firefox で今の URL が開くようになってます


また、ページ内のリンクや選択した場所を右クリックして openwith を選ぶと、 Selection や Link にチェックしてるリストが出るのでここをクリックするとリンクや選択した文字で Firefox などを起動できます

ローカルのファイルの場所を書いてるページで開くのが面倒だなぁっと思うことありますよね
これがあればエクスプローラを選ぶだけで簡単に開けます

openwith03

設定方法

することはオプション画面での設定だけです

Name に指定したものは、右クリックしたときのメニューリストに表示されます
Command に指定したものは、Powershell で実行されます
各チェックボックスは上記のとおりで、はずすと選択肢に出てこなくなります

アイコンは画像ファイルをドロップすれば変更できます

動かなくなったときは、初期化を押すと初期状態に戻せます
間違って押してしまって、設定が消えてしまわないように注意してください

初期化以外の操作は保存ボタンを押さないと保存されません

command について

諸事情で Powershell での実行になります(気になる人は下の方を読んで下さい)

書いたコマンドがそのまま OS で実行されるので 「C ドライブ全部削除」 なんてコマンドを書いたらホントに消えます
「Powershell ?なにそれおいしいの??」って人は触らないで 「Firefox や IE で開ける拡張機能なんだ」 と思ってもらえればです

Command 中の「{{$}}」 ←が URL や選択した文字に置き換えられます

重要な注意ですが
スペースを含むプログラム名を書くときは 「"」 じゃなくて 「'」 を使ってください
(これも気になる人は下の方を(ry)

またコマンド書き換える人向けにログ機能があります
ポップアップの一番上に 「LOG」 というのがあるので押すと、ログウィンドウが開きます
これまでに実行したコマンドと結果が見れます

ダウンロードとインストール

Windows のコマンドを実行できるようにするため、いつもよりちょっとめんどうです

ダウンロードはここから
opth.crx

インストール方法
→ Chromeにcrxファイルのインストール

無効化される場合 
Chromeで無効化されたcrxファイルを動かす


まずは普段と同じで crx を解凍して拡張機能を置くフォルダへ持っていきます

chrome 派生ブラウザだと crx そのままインストールできるので、crx インストール後に crx を解凍して command-runner フォルダだけを好きな別フォルダに持っていって続きをやってください


中の command-runner フォルダにある install.reg ファイルをメモ帳などで開きます
そのままダブルクリックしたらインストールが始まるのでまだダブルクリックはしないでください

「C:\\path\\to\\openwith\\command-runner」 と書いてるところがあるのでここを command-runner フォルダのパスに書き換えます
区切りの円マークは 2 つにします
変なことをしなきゃ大丈夫ですがレジストリに書き込まれる値なので慎重に扱ってください


次は command-runner.json ファイルをメモ帳などで開きます
「"chrome-extension://fgpcdlbdakpakaimgcblphmbbedmpbjp/"」 と書いてるところがあるので ここを拡張機能の ID に置き換えます
私の場合は書いてる通りの ID でしたがみんなが一緒じゃないかもしれません

もうひとつ同じファイルで変更するところがあります
「"C:\\path\\to\\openwith\\command-runner"」 と書いてるところがあるので ここも command-runner フォルダのパスに書き換えます


これで準備完了
install.reg をダブルクリックしてレジストリへ設定をインストールします

Windows なら IE や Firefox が開くことを確認できれば成功です

動かない場合

○ IE や Firefox のインストールされてる場所がデフォルトと違うかもしれません
 32bit の Windows を使っていたり、自分で場所を選んでインストールしていたりすると違ってきます

○ 設定で書き換える文字に間違いがあるかもしれません
 新しくコマンドを作って 、コマンドに 「echo test」 と書いて保存します
 それを実行してみてログの最後に 「test」 とあるか確認してみてください
 あるなら command-runner はちゃんと動いてるのでインストール場所が違うなどの問題です

制作秘話的な?

先週に「タスクバーにいらないソフトを表示させない方法」ということで初めて NativeMessaging 使ってみました

前から NativeMessaging で Windows の操作もできるならやってみたいことに

○ 他のブラウザで今のページやリンクを開きたい
○ ネットに書いてるローカルファイルのパスを開きたい

があったのでまとめてやってみることにしました

NativeMessaging ホストはなにで作ろう

拡張機能は普段から作ってるので、拡張機能部分は簡単に半日くらいでできました

やってることってオプションで設定して、右クリックメニューとポップアップに一覧出して、クリックされたらメッセージを Windows へ送るだけですからね
別ブラウザで開いたりと、できることはけっこうすごいのに、実は拡張機能側はいたってシンプルです


そんなわけで難関は Windows 側のプログラム
例のごとく私みたいな普段ブラウザくらいしか使わないライトユーザにはハードルが高いです

前回は、最初は C++ でやってみてちゃんと動いてくれないし嫌になって、 F# でいい感じに作り直しました
目的のことができててプログラムも見やすくできたというだけで、出来る人からみて良いプログラムかどうかは別問題なので置いておきます

今回も F# にすれば、すごく簡単にできそうでした
入出力部分はあるのでコマンド実行するだけですから
.NET はその辺も簡単にできるようです

しかし

前回はソースコードだけを置いてて exe まで公開してすぐに使えるようになってないです
使いたい人は VisualStudio 入れてコンパイルしてね! っていう無茶振り感

というのも F# で作ったら dll や xml とか一緒に置いておかないといけないファイルがありました
アプリケーション本体は 16KB くらいの小ささなのに dll を含めたら、なんと 数MB もありました!

ライブドアブログのスペースは 500MB なのに 1 ファイルで数MB はちょっとつらい・・・
このサイズが原因で前回はすぐに使えるようになってません


今回はすぐに使えるようにしたいなー
でも C++ は無理だなー

ということで別のプログラミング言語を探索だー


・・・

選ばれたのは Rust でした

PHP や Python ってスクリプトで簡単に使えそうですよね
でも今回は使えません・・・

スクリプトの言語って実行するツールが入ってないと動かせないです
一般的にインストールされてるソフトならともかく、PHP なんかはウェブページ作るよ、って人でもないとわざわざ入れないようなものです
入れてもらったとしても設定が大変だと思いますし

一応 exe にしてしまうこともできるのですが、それをするとプログラムの実行ツールも内蔵するわけなのですっごく重いファイルが出来上がります
F# の数MB どころじゃなくて 20MB や 40MB とか(昔何かの exe にならないものを無理矢理 exe にしたら hello って表示するだけのがこんなサイズになりました)
ファイルサイズが問題なのにこれじゃ使いものにならないです

そもそも拡張機能使うために Python いれてね、はハードル高すぎっと思うのでスクリプト言語は潔く諦めます



次に目をつけたのは Java 系
最近は Scala や Kotlin が短くスッキリかけるんですよね(もちろん聞いただけで使ってない)

Java も exe じゃなくて class ファイルというのがでてきます
実行するのには Java のインストールが必要です

jar と言う形式にすれば Java なくて実行できる?みたいなことを聞いて、kotlin で単純に文字出力するだけのプログラムを作ってみました
jar ファイルを作るときには何を入れるか設定できました
「kotlin-runtime」 というのがあったのでこれがあれば Java のインストールがいらないのかな??

もし必要でも Java なら入ってるパソコン多そうだし PHP などと違って個人的に許せる気もしなくもないです
一般の人にもインストールしてもらうようなので変な設定いらないし
ま、インストール中に10億のデバイスで~、とか書いてるくらいですからね

さーて、できたファイルサイズは・・・・800KB
うーん ちょっと大きいかなぁ
これは固定の文字出力するだけなので、作るものを完成させたら 1MB 超えそう・・・

Chrome 拡張機能は Chrome だから OS に依存しなくて Mac や Linux でも使えます
Java も OS 関係なく使えるからいいかなって思ったけど 1MB かぁ
300KB くらいならよかったのに



とりあえず次にいってみましょう
・・・といってもスクリプトでも .NET や Java 系でもないのって何あるんだろう

Wiki とかみてると

Haskell / Lisp / D / Go / Rust / Swift / Delphi

こんなところかなー

Delphi は古そう、Swift は iPhone アプリ用だから Windows なことするの難しいかも、Lisp はカッコ多すぎ、Haskell は難しそうということで除去しました

残りは

D / Go / Rust

D は軽く使い方見てみて C っぽさが強め

go は Chrome と同じく Google 製で期待したのに情報なさめ
というか Google 公式の使い方に go じゃなくて python 使ってるし・・・
Chrome 拡張に特別なメリットがないならあんなかわいくないねずみに用はありません!

ということで Rust にしてみようと思いました

Rust 新しめだからか go とかみたいにマスコットキャラがいないので名前が似てるティアティアのラスティが私の脳内でのイメージキャラになってます↓

rathty


スペルがかなり違ってますけどね (Rathty)

Rust で文字表示するだけのプログラムを作ってみたら 120 KB でした
思ったよりサイズある・・・けど他に良さそうなのないしこれでいっか

Rust 難しい

F# よりは よくありそうな書き方ができて簡単そうに見えたのですが、思いの外躓くところばかりです

文字列には 2 種類あってコンパイルするときにおかしいっていわれたり
このときの型がどうなってるのか見たくても調べれないからこれでいいのかわからなかったり

IDE がなくてエディタで書いてコンパイルして初めてエラーってわかるからエラーが多すぎてつらいです
F# のときは VisualStudio のおかげで何を渡せば何が返ってくるかわかりましたし、デバッグモードで実行してどんなデータが入ってるかも見えました

そんなサポートがないので謎なエラーばかりですごく時間かかりました


でもコンパイルしたときのメッセージがすごく丁寧でした
VisualStudio よりもわかりやすくて、たぶんこれじゃない?っていってくれたり、この型にしてねっていってくれたり

その分ときどき情報なくてエラーとだけいわれたら、もうどうすればいいんだって状態にもなりました


よくわからないことと言えば、2回連続でコンパイルするとメッセージが違ったり、
直したはずなのに変わってなくてもうどうすればいいの!って思ってダメ元だけどとりあえずソースはそのままでもっかいコンパイルして実行してみたらなぜか動いたり・・・
ほんとに何も変更してないよ・・・?

1回なら自分のミスでコンパイルし忘れかなって思わなくもないけど2、3回もあったから不思議
キャッシュみたいな何かあるの・・・?

Windows がダメなんじゃないの

色々 Rust で困ったのですが、どれも初心者がちゃんと構文とか基本理解せずとりあえず動くものにしたいという作り方をしてるので仕方ないと思います

ただ一番苦労したのは Windows の仕様でした

そうコマンドプロンプト、おまえだよおまえ!

まあ今回は Rust の仕様もちょっと影響あるんですけどね

cmd /C 【ここにコマンド】

こうやってコマンドを実行するのですが、コマンドプロンプトはわけのわからないエスケープがあったりとどう動くのかが全然想像がつきません
しかも、調べてみると Rust ってエスケープをいい感じにしてくれて、引数の文字列の 「"」 が 「\"」 になります
でも Windows の場合はそんなことすると逆効果でちゃんと動いてくれません
エスケープ文字が 「^」 だったり 「`」 だったりするくらいです

どうにか動かす方法で powershell で 「'」 を使う方法を見つけたのでこれを使って対処しています
(自分でみつけた方法なのでもっといい方法がある気もするけどググってでないからここで諦めました)
Rust の自動エスケープなくせれたらいいのに無理みたいです
Rust と Windows は相性悪いのかもですね

C++ のときに苦労したのも Windows API で C++ 自身の機能は複雑すぎますがそこまで苦戦してませんでした
悪いのはプログラミング言語じゃなくて Windows なのかもしれませんねー

できるプログラマーの人達が Mac や Linux を好む気持ちがわかった気がします

NativeMessaging の名前にご注意

これまで記号なかったのですが今回は名前を command-runner って記号ありにしてみました

動いてたところが動かなくて、やったことはちょっとした修正と別パソコンにインストールしたので設定ファイルの変更
プログラムの修正ミスかなと戻してみたけど効果なし
標準出力で確認できないからファイル作成するようにしてみたらファイルが作られてない

そもそもプログラムが起動されてないみたい・・・
別パソコン用に設定したのが間違い???

レジストリと json を見続けること何時間か・・・
たった数行だけど気づきにくいミスもある、っとずっとみてるのにおかしいところがないです
ファイルの場所はコピペでちゃんと開けることまで確認しました

もしやパソコンの問題なのか?と思って再起動とか
全然直らなくてどうすれば良いんだろうと思った頃に、ふと名前に記号あるとダメとかないよね・・・?と頭をよぎったので調べてみたら

name に使えるのは、小文字のアルファベットとアンダーバーとドットだけ!!!

そんな決まりあったなんて・・・
プログラムの実行できなかったときは JavaScript の呼び出す側にエラー出てほしいなぁ

私普通の JavaScripter に戻ります

気づけば 2 週間も連続でなれないプログラミング言語使ってました
せっかくの休日なのにゲームができてません!

ブログ用に JavaScript 書いてて、たまに拡張機能作ってるくらいだったのに慣れないことするからですね
しばらくは休みの日はゆっくりゲームして プログラムはブログ書くのに必要な程度 (JavaScript と CSS)だけに戻ります
(フラグじゃないですよー。来週はこういう系記事ないですからね!)