non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

Go言語でコマンドプロンプトに画像を表示するコマンドを作って、Vimの:terminalで表示させた

おはようございます。保育参観後、次男は熱を出し、また、長期化して、実家暮らしかもと冷や冷やしましたが、すぐに回復して、長男の誕生日イベントに奥さんと映画を行ってこれました。kjunichiです。

背景

ANSIエスケープで端末に画像を表示するものは多く出回っていて、自分もmacOS上ではnode.js実装のansi-canvasのexampleのimgcatを 愛用している。

しかし、事前準備なしでWindowsコマンドプロンプトに表示するものはなかなか見つからなかった。コマンドプロンプトにも一部の文字に 色を付けて表示することは可能なので、色数は限定されそうだが、原理的には出来なくなさそうだった。が、 Windowsの直接のAPIだと、Windowsでの開発歴が浅い自分には、難易度が高かった、ANSIエスケープ並みの手軽なAPIで これを実現するものがないものかと、物色していたところ、termbox-goなるライブラリを知った。

試行錯誤

8色しか出せなそう?

16色行けそう

GoのImageの内部のピクセル値は最大65535だった

このツイートのように、termbox-goで任意の場所に色を出せるようになったものの、JPEGファイルをGoで処理して画素値を取得して、 termbox-goでの色に割り当てようとして、なかなか画素値が最大255という思い込みがあり、上手くできないでいた。

インパクトがある画像が功を奏して、湘南新宿ラインの炎上ツイート以来のリツーイト数を獲得できた。

Vimの:terminalは発展中

と、ツイートしてしまい、Vim界の大物であり、ツイートからSIer所属でお子さんもおり、自分と境遇が近く、勝手に親近感もってる@mattn_jpさんから

と返信あり、速攻でGistに張り付け、

返信したところ、すぐに確認して頂き、

とご回答頂き、自分のところのソースが古かったので、最新のVimでは白も無事表示されました。@mattn_jpさんありがとうございました!

成果物

初期公開時ではJPEGファイルのみだったが、今はURLにも対応して、PNGJPEGなら表示出来る ようになった。

f:id:kjw_junichi:20170819094059p:plain

関連記事

Vimに:terminalが実装され、Windowsではコマンドプロンプトが動くと知り試してみた

こんばんは、先日次男が去年あたりから、保育参観に来てほしいという予てからの希望を ようやく実現し、夏休み期間中の為、普段の園児の半数程度でしたが、次男と保育園で過ごすことが 出来、次男は満面の笑みでごきげんでした。kjunichiです。

背景

この記事を読んで、Windowsでもコマンドプロンプトが動くことを知り、自分も手元で試したくなった。

Windows版(MSVC)のビルド

日中不自由な環境に居ることが多く、c9.ioのターミナル越しではemacsのデフォルトのキーバインドが ことごとく、別の機能に割り当てられviを使うことが多く、:terminalに対応したこの機会にチャレンジすることにした。

:terminalに必要なモノ

:terminalするにはwinptyなるものが必要。

からwinpty-0.4.3-msvc2015.zipをダウンロードした。

Vimのビルド

まぁ、

に従えば、そんなに難しくない。 自分はREADME読んで、トライアンドエラーで検索しながら、だったからそこそこ時間が掛った。

VS 2014環境下で作業した。

素のcmd.exeを立ち上げて、

vcvarsall.bat amd64
set SDK_INCLUDE_DIR=c:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
set PATH=%path%;<<winptyのパス>>

:terminalを使えるようにする

:terminalを有効にするには最低限以下の様な指定をすれば、日本語含め扱える

nmake -f Make_mvc.mak GUI=no IME=yes MBYTE=yes TERMINAL=yes

GUI=yesにすればgvim.exeがビルドされた。

出来たVim.exeをパスの通ったフォルダなりに置けば、完成。

vim初心者がハマった操作

viはヤバくなったらescキー連打して、:q!でピンチを切り抜ける程度の知識しかないので、 :terminalして死にそうになった。

:terminalでは:が効かない

:terminalで無事WindowsコマンドプロンプトVimの中に現れ、dirコマンド等実行できることが分かったが、Vimへの操作が 分からずしばらく途方に暮れた。EmacsだとC-x oで別のバッファに移れた気がするが、ここはVim、全くわかない。Vimのウィンドウ分割系のことを扱った ページを漁り、

Ctrl+w wでウィンドウの移動

どうやら、Ctrl+w後:が効くことが後から分かった。

:q!が効かない

:terminalでシェルが動いているとvimの終了が邪魔される模様 exitなりで、シェルを抜けると:q!出来た。

文字化けに気が付く

:set enc=utf-8

で日本語が表示されるようになった。

関連記事

WindowsでソースからビルドしたGimpでPYTHONPATHを指定せずにPython Fuを使うには

おはようございます。7月はほとんど実家で長男、次男が熱を出してましたが、何とか保育園の役員になっての一大イベントの夕涼み会に 子供たちも元気に参加でき、自分も担当だったうちわ係を無事に終えたkjunichiです。

背景

Windows環境でGimpPython Fuを64ビットなPythonを使って動かせた。 しかし、PYTHONPATHを指定しないと動かせない。

一方当然ながら公式の32ビットPythonをつかうGimpではPYTHONPATHの設定はいらない。

この記事では、PYTHONPATHを不要にする方法を調べた。

どうやって調査したか

俺的神コマンドのptを使って、調べ上げることが出来た。

PYTHONPATHを不要にする方法

前述のptコマンドを公式版のGimpフォルダ配下で

pt PYTHONPATH

として「PYTHONPATH」を含むファイルを検索して、 該当するファイル

  • lib\gimp\2.0\environ\default.env

を探した。

lib\gimp\2.0\environ\default.envの編集

ビルドした方のGimpのファイルを以下の様に、

PYTHONPATH=${gimp_installation_dir}\lib\gimp\2.0\plug-ins;${gimp_installation_dir}\lib\gimp\2.0\python

とすることで、64ビットなPythonをPYTHONPATH指定なしで呼び出すことが出来た。

新たな課題

なぜか、公式と同様にPATHをdefault.envで設定するとScript-Fuがクラッシュするようになってしまった。

 関連記事

Windowsでのビルド関連記事