hogashi.*

日記から何から

crontabのシンタックスハイライトするVSCode拡張機能つくった

 crontab ファイルのシンタックスハイライトをする VSCode 拡張機能をつくった。

marketplace.visualstudio.com

 VSCodeTextMate というエディタの文法を司る部分のエンジン*1を同じように利用していて、 tmLanguage ファイルがあればそのまま拡張機能にしてシンタックスハイライトできる (XML でも JSON でも読み込める)。特に GitHub などにファイルがある場合、それを Yeoman に指定するだけで完成する。した。

CONVERTING AN EXISTING TEXTMATE GRAMMAR

yo code can also help convert an existing TextMate grammar to a VS Code extension. Again, start by running yo code and selecting Language extension. When asked for an existing grammar file, give it the full path to either a .tmLanguage or .json TextMate grammar file:
https://code.visualstudio.com/assets/api/language-extensions/syntax-highlighting/yo-convert.png

Syntax Highlight Guide | Visual Studio Code Extension API

 すべておまかせという感じで、人間が書くのは README くらいだった。今回は事前に cron とかで検索してまだ VSCode の marketplace に存在しないのを確認したけど、気をつけないと拡張機能が乱立していって大変なことになるという気持ちもわかる。

ghq listをpecoしてpushdするbash function

 こういう感じで .bashrc とかで定義しておくと、 ghq list を peco で選んでそのディレクトリへ移動 (v0 の ghq look みたいな) できる(好みで pushd にしてる)。こういうものみんな各々好みがあって各々やっている気がする……。ちなみに↓では glk と打つと出せて、 glk hoge と打つと hoge が入力されて検索された状態から peco を始められる。

function glk() {
  ARG_STR="$1"
  PECO_RESULT=$(ghq list | peco --query "$ARG_STR")

  PECO_RESULT=$(echo -n "$PECO_RESULT" | tr -d '\n' | perl -pe 's/(^ | $)//g')
  if [ ! -n "$PECO_RESULT" ]; then
    return 1
  fi

  pushd "${GHQ_ROOT}/${PECO_RESULT}"
}

 ghq, peco とは↓です。

github.com

github.com

Google EarthとDiscordで色々見て歩く会やった

 この記事を見た友人とやってみるかという話になって、 Discord で画面共有しつつ Google Earth で見たいところを見て歩く会をやった。

chizuchizuko.hatenablog.com

 フィンランドに行きたい気持ちが高まっていて、ヘルシンキに空港があるはずだけど……とか言いながらふらふら見てたら全然違うところに空港があって驚いたり、日本に戻ってお互いのよく知っている土地を話したりしつつ地図をぐりぐり動かしていた。 3D に切り替えると(荒いものの)建物が立体になるので、普段に近い感覚で歩けたり、山みたいになっているとか海岸とかもわかったりして面白かった。

f:id:hogashi:20200505174929p:plain
3Dビューでぐしゃぐしゃになった利根川

 Google Earth 自体めちゃめちゃ久しぶりに見た、というか昔々に見た頃はまだ一般には使えなかった気がする(小学生とかだったと思うので定かではない)。最初に地球自体よりもその背景に星が見えることにちょっと感動し、雲があることに確かにね……となり、普段使っている地図には登場しない(というか必要ないので意図的に登場させていないのだけど)ものが実際にはあるのだなという気分にもなった。時代は進んで Discord で画面共有をしながら通話でき、地図というよりは写真帖みたいな感覚で、風景を眺めながら話をする、紙の地図とはまた違う独特の楽しみ方ができた。

f:id:hogashi:20200506000915p:plain
地球の後ろに星が見える様子

www.google.comdiscord.com

お題「#おうち時間

(追記) フィンランドの様子

 日本ではお互い出生の秘密(秘密ではない)を語り合ったので、フィンランドを見て歩いたときの様子だけ簡単にご紹介:

f:id:hogashi:20200506001145p:plainf:id:hogashi:20200506001203p:plainf:id:hogashi:20200506001219p:plain
ヘルシンキは下の方か〜とズームして空港を見逃した様子

f:id:hogashi:20200506001410p:plainf:id:hogashi:20200506001446p:plain
f:id:hogashi:20200506001428p:plain
空港のそばにはシルボラ貯水池(川のような形の道もあるような?) / ヴァンター川の水ではなく 120km も離れたパイヤンネ湖の水……!(wikipedia参照)

fi.wikipedia.org

f:id:hogashi:20200506001830p:plainf:id:hogashi:20200506001857p:plain
ところで最初に目についたスオメンリンナの要塞も見た様子(教会がある……) / 潜水艦も博物館として遺されている

 CDを数枚取り込み、使えるかと思って部屋に留め置いていたゴミを捨て、あとはサーモンラン(スプラトゥーン2)ばかりやっていた日だった。近年稀に見る何も達成しようとしない姿勢で、なんとも気の長い生活をしている。こういう雰囲気の気の長さが長期的かつ常時もっとある生活を求めている。

今日の落書き

 今日の落書きは、ソースコードの単語を列挙するシェルスクリプト。作ってる拡張機能ソースコードでやってみたので JavaScript 、つまりキャメルケースと全部大文字な定数がある。罠としては HTMLElement みたいな大文字が続くキャメルケースもある。

 こういう感じになる: 単語のリストも一緒に入れたらめっちゃ長い、ブログの URL をコメント文に入れたりしているので hogashi とか hatenablog とかも入っていて面白い。
gist.github.com

Gitの情報からGitHubのパーマリンクをクリップボードにコピーするVSCode拡張機能

 VSCode拡張機能をつくる練習として、開いているワークスペースの Git の情報から、 GitHubパーマリンククリップボードにコピーする拡張機能を作った。練習なので壊れているかもだけどよければお使いください。

marketplace.visualstudio.com

 remote (origin) の URL 、 HEAD のハッシュ、開いているファイル名、カーソル行の行番号をくっつけた、 https://github.com/hogashi/sketch-20200411-vscode-ext-git/blob/47b96dd6cc7c521d9ab017ce7760d62536cbb4cc/src/extension.ts#L4 みたいな URL をクリップボードに入れる。選択範囲で見ているので、複数行選択しているときはその範囲の URL になる ( https://github.com/hogashi/sketch-20200411-vscode-ext-git/blob/47b96dd6cc7c521d9ab017ce7760d62536cbb4cc/src/extension.ts#L4-L6 みたいな)。

 remote の URL は難しくて、 ssh:// git:// https:// とか git@ とか(末尾の) .git とかがあったりするので、正規表現で雑に頑張って消している。 ssh のときはドメイン名とパス名の間は : になるのでこれをスラッシュにしたりもしている。

つくり方のコーナー

 最初の最初はここを見ながらつくった。 yo code ですべてが登場する。

code.visualstudio.com

 初 VSCode 拡張機能で Git の情報を取るコードを書くのは至難の業で、なんとか行き着いた先で「この .d.ts ファイルをコピーして使ってな」みたいなことが書いてある。実際この src/api/git.d.ts を一緒に置いて import { GitExtention } from './git' とかやると急に型がつく。

API

The Git extension exposes an API, reachable by any other extension.

  1. Copy src/api/git.d.ts to your extension's sources;
  2. Include git.d.ts in your extension's compilation.
  3. Get a hold of the API with the following snippet:
const gitExtension = vscode.extensions.getExtension<GitExtension>('vscode.git').exports;
const git = gitExtension.getAPI(1);
vscode/README.md at 433380c3c16c73c7e711dedf20de12760160bc7b · microsoft/vscode · GitHub

 あとは型のおかげで出るそれっぽい API を眺めたり、 API リファレンスを見たりしつつ、コミットハッシュを取ったり、行番号を取ったり、クリップボードに書き込んだりして完成した。

 ところで公開はまたひと苦労で、公開するドキュメントを見ながらやろうとするけど vsce がどうやっても 401 を返してくる。ちょっと検索すると FAQ が後からできているらしくて、そこでは上で述べられていた内容と真逆なことが書いてあってそんな……となる (token の権限は全部許可してくれみたいなことが書いてある)。

code.visualstudio.com

 部屋の中掃除(整理)、毎回何かしらきっかけがあったときにだけやっていて、今回の動機は在宅勤務にあたって机上を整理したいのとキーボードを置くサイドデスク的なワゴンを動かしたいのと自分の誕生日プレゼントに買った落語の DVD が本棚に収まらなくて床に置いていたのなんとかしたかったのの 3つだった、一回で部屋の全部をやるのは無理なので毎回どこかに的を絞ってやっていて今回は本棚編となった、大体部屋の中の物の量のうち半分くらいが本棚にあるので掃除の規模がめっちゃでかくなってしまって都合 12時間くらい掃除していたので疲れ果てた、それに見合う環境の改善はあったのでよいと思う、ちなみに今まで一度も捨てたことのなかった主に漫画を捨てつつ Kindle で買い直そうということで本棚から頑張って全部出して残すものと捨てるものに分けて残すものを本棚に戻したら捨てるものが 100冊くらい出てすごい、買い直すにも何を買い直すのか確かめるのが大変だったのでいったん Amazon の wishlist に非公開リストをつくってとりあえず全部そこに登録しておいた、後でこれは買い直したいなと思うものを買い直す算段で多分 9割方買い直すことになる。