NERDTreeで起動時にファイルにフォーカスを移す

試験期間中なのでneovim設定ファイルのコミットが増えてます。

NERDTreeを自動的に起動する

自動的に起動するだけならば以下のコマンドで実現できます。

autocmd vimenter * NERDTree

ただこれだと起動時にツリーの方へフォーカスが移り、やや不便です。 そこで起動時にwincmd pでツリーからファイルにフォーカスを移してやります。

autocmd vimenter * NERDTree | wincmd p

引数なしで起動した場合とディレクトリを指定して起動した場合はツリーにフォーカスがあって欲しいのでargcを見て場合分けしてやります。

if argc() == 0 || argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in")
    autocmd vimenter * NERDTree
else
    autocmd vimenter * NERDTree | wincmd p
endif

NERDTree以外のバッファが閉じられるとNERDTreeも閉じる

autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

winnr("$") == 1が現在のウィンドウ数が1、exists("b:NERDTree")でNERDTreeが存在するか確認、b:NERDTree.isTabTree()でNERDTreeの状態を見てqで終了します

まとめ

augroup NERDTreeSetting
    autocmd!
    autocmd StdinReadPre * let s:std_in = 1
    if (argc() == 0 || argc() == 1 && isdirectory(argv()[0]) && !exists("s:std_in"))
        autocmd vimenter * NERDTreeToggle
    else
        autocmd vimenter * NERDTreeToggle | wincmd p
    endif
    autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
augroup END

以上の内容は殆どNERDTreeのREADMEに書いていました。適当にググるよりまずREADMEを読みましょう(自戒)。

#procon29

オタクが好きです

開発

去年まで毎年ホテルで倒れるまで開発をしていたプロ先輩が専攻科を終了してしまったのでGUI担当僕、ソルバ担当 @MackysonIT 、社会担当M田さんの3人で開発をしました。 毎日集まって取り敢えずボドゲかトランプをして大喜利マインスイーパーの合間に開発をしました。 今年は僕がjigインターンに行ったこともありますが、GUIの作り込みと練習が甘く結果を残せなかったので来年は改善したいと思います。 言語は当初Rustでソルバを書きGUIのElectron + Reasonで構成しようとしていましたが @MackysonIT がRust無理になったので無難なD言語に切り替えました。この決定が遅すぎたのも敗因です。GUIもReactとVueに変更しました。Reason分からない太郎

前日

@MakysonIT から仕様変更のissueが飛んできてグェってなりました。実装しました。

1日目

起床失敗して無事一コマ目を干しました。プロコンには無事行けました。徳島なので4コマ目まで出てからの徳島入国です(なぜなら徳島は香川の隣なので)。

会場に到着してPCを開くと見慣れぬWindowsのログイン画面、画面いっぱいのマインスイーパーが出てきて絶望しました。本番機とマインスイーパー専用機を取り違えた事に気付いた瞬間です。僕がマインスイーパーを会場でもやりたいと主張して両方持っていかなかったことが敗因でした。マインスイーパーへの情熱の低さが原因です。

夜は自由部門の人たちと徳島ラーメンを梯子しました。濃厚な醤油に豚バラ肉は賢すぎて自力が上がりました。僕はDDRやってません。 @MackysonIT だけ、マインスイーパー機事件もありDDRをしにラに行きました。 ↓躍動として知られる一般的なテク f:id:namachan10777:20181030003535j:plain f:id:namachan10777:20181030003443j:plain

僕「財布にカードキーを入れると賢い」 @MackysonIT 「(笑)」(ポケットに入れる) ←フラグ

VivaldiでTweetdeck開きながら開発していると @MackysonIT の不穏なツイートが流れてきました。扉を開くとカードキーを紛失した @MackysonIT が居ました。DM気づかなくて済まねえ。 トンネル効果でポケットから脱出したらしいです。店にも聞き地面も見ましたが無かったようでした。仕方ないので取り敢えず大浴場に行ってからチームメンバーに打ち明けました。大浴場はマグネシウム塩が豊富。この時点でホテルには伝えていません。

2日目

いよいよ本番です。はすみさんを観測しました。取り敢えず宇部高専と沖縄高専(D言語erが居る)に挨拶しに行きました。予行練習ではGUIがバグり、それにより @MakysonIT がバグったので僕とM田さんが自律モードになりました(冗長性)。 本戦はGUIのバグとエージェントのバグと @MackysonIT のバグなどによりソルバが無理で手動になり、全敗しました。 この日も大浴場に入れたので神。

3日目

敗者復活戦に出ました。一回戦はソルバを14ターンまで動かして勝てました。2回戦は鯖が落ちて死にましたごめんなさいごめんなさい。結果大分空き時間が出来たので風のラーメンに行きチャーハンを食べました。スープが賢く偏差値を感じました。 f:id:namachan10777:20181030003633j:plain ゆきばらさんやhmdさん、りんわしゅうさんと名刺を交換できました、百合の話を出来たので神。 ちなみにこの日は僕がマウスを紛失しました。先生以外全員やらかしをしていてア。

総評

プロコンはプロコン以外最高でしたね。多分競技部門も人力要素が無ければ最高だったと思います。プログラムのバグで死んでるので僕の言えた話ではないですが...。 インターンのあさしぐれやダイス、わきお、Gちゃんと会って話せたので良かったです。ヤマゲンとは話せなかった(多分)なので名古屋カンファに行きたいですが全ロボと日程被ってるのでつらみです。分身したい。 オタクとオタクするの最高なので一生これになりたかった。

https://mackyson.hatenablog.com/entry/2018/11/01/000509mackyson.hatenablog.com

↑ @MackysonIT

味付いてておいしいです

今日のおやつはこちら。家の前に居たのを捕獲。オスです。 f:id:namachan10777:20180809230242j:plain 昆虫食の基本の素揚げ。 f:id:namachan10777:20180809230225j:plain 尾の方はピーナッツみたいな味がします。 アブラゼミで身が少ないので筋肉の味は分かりづらいです。筋肉の多そうなクマゼミも食べてみたいですね。 小エビに例えられることの多いセミですが、樹液のみを食べる為か臭みは全くなく小エビのから揚げより食べやすいです。 昆虫食はハードル高いと勝手に思っていましたが、脊椎動物と違って虫取り網で簡単に採取出来て、臭みとバトルしなくても良いので完全にビギナー向け食材でした。

今が旬のセミ、四季の味を楽しんでいきましょう。

CircleCIでFirebaseのデプロイ先を分ける

forkした自分のリポジトリ(origin)を開発用のプロジェクト、fork元のorganizationのリポジトリ(upstream)は本番環境と分けてCIでデプロイしたい時のメモです。

方法

CircleCIのBUILD SETTING>Environment VariableでCI_MODE等の適当な環境変数を作り、upstreamは"release"、originは"develop"に設定する。 .circleci/config.yml内でCI_MODEを見てデプロイ先をfirebase use hogehogeで切り替える。

2018.4.8

再版一日坊主日

進捗

f:id:namachan10777:20180408225650p:plain トラックボール付き自作キーボードの設計が殆ど終わった。曲げ加工を多用しているので精度が出せるかかなり不安。実際に曲げるときには曲げる位置に溝を彫れば曲げること自体は出来るだろうけど。

今まではマウスのセンサICが買えないと思っていてトラックボールの自作は半ば諦めていたがAliexpressで安いマイコンを探している時にもしやと思いマウスICを探したらあった。センサにはADNS-9800を使う予定。

TODO

キーボードのプレートを削り出す。キーボード完成する前に次のキーボード設計するな