2015.06.01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

MHI 5.0

この「にっき」には暴力シーンやグロテスクな表現が含まれています。

(2015.06.17) 2247

$ Google Chrome のテキストエリアを任意のエディターで編集する Powered by #golangjp

どういう経緯か忘れたのですが:

という記事を見つけました。概略的には

  • Google Chrome は Firefox とは違い、外部プロセスを起動することは禁止されている
  • そこで Chrome Extension の Edit with Emacs は、Emacs のサービスを 127.0.0.1:9292 に立ち上げて、XMLHttpRequest を使って、テキストエリアの内容を Emacs と交換している。
  • 上記の記事では、Emacs のサーバーのかわりに Perl でサービスを立ち上げて、任意のエディターを Chrome で使えるようにしている

という感じです。記事の方法だと Perl 一式が必要だし、Linux でしか動作が検証されていないようでした(別に Windows で動かないとは言っていないが)。 が、記事のおかげで原理はだいたい分かったので、勉強がてら Go 1.4 for Windows で「だいたい同じもの」を作ってみました。

最初、よー分からんで何故か TCP のレベルからやろうとして挫折したのですが、 net/http で書き直したところ、比較的簡単に出来ました。 「editsrv.exe gvim.exe」を走らせておくと、 テキストエリアの右下に出る 'edit' のマークをクリックした時に gvim.exe が起動するようになります。 (なお、UTF8 対応エディターである必要があります)

ただ、twitter の本家サイトについては、テキストエリアの内容が 何故か HTML で飛んでくるので、このサイトだけは特別扱いして、 HTML ⇔ プレーンテキストの変換を相互にやってます。やりすぎかな。

普通、この手のものは「思いついたのはいいが、なかなかうまいこと作れない」ものなんですが、自分にしては、あっさりできて驚きでした。

ま、多分、似たようなものの Go 版は先人がとっくの昔に作ってそうではありますが…まぁ、手段が目的みたいなもんですから、そこんところは目をつぶってくださいませ。

- 追記(2015.07.05)

起動するエディターが gvim の場合は vimtweak.dll (32bit版64bit版 )を gvim.exe と同じフォルダーに入れて、

   au! BufNewFile,BufRead editsrv* call libcallnr("vimtweak.dll", "EnableTopMost", 1)

という一文を %USERPROFILE%\.gvimrc に入れれば、gvim.exe が Chrome の裏で起動することはなくなる。

しかし、アクティブになっているわけではないので、そのままキーボードをうつと、Chrome の方にキー入力がいってしまう。

道のりは長い

.net(3) C++(3) Cygwin(12) GAME(3) Groovy(1) Linux(2) Lua(39) Mercurial(13) NYAOS(92) OS/2(7) Oracle(3) Perl(4) Python(22) SKK(4) Windows8(1) album(68) ckw(10) coLinux(1) vim(6) wifky(27) 書評(21) (9)

zetamattaのたいじゅー