2019/08/29

tmux 2.9a の window 分割線を ascii character にする

2019/05/01 に tmux 2.9a がリリースされていました
残念ながら 2.9 は見逃がしてしまいました。
ということで恒例の分割線を EastAsianAmbiguous から ascii の線に変更するバージョンを作成。
2.8の時とか2.7 の時とかの作業履歴とかもまとめてあります。
そもそもどういう問題なのかはこの記事で。


環境

  • OS: macOS mojave 10.14.6 (18G95)
  • tmux: 2.9a-border-ascii ( f976aed943f322a3652f51846b0fe472534ab6d6 )
  • Homebrew: 2.1.11
  • Homebrew/homebrew-core: (git revision 269c; last commit 2019-08-29)
  • Font: Ricty: 3.2.2(no option)


作業

今回も割とあっさりできました。cherry-pick して tag 更新して終わり。
  • $ git pull upstream
  • $ git checkout 2.9a
  • $ git cherry-pick border-ascii
  • $ git checkout -b 2.9a-border-ascii
make できるかの確認は
  • $ sh autogen.sh
  • $ ./configure 
  • $ make
で。

ちなみに brew edit tmux して本家のビルド手順を参考にしてます。
あと、 dependencies から utf8proc が消えて ncurses が追加。

make すると current directory に tmux command ができるので、動作確認も可能。
  • $ ./tmux -V
    • tmux 2.9a
  • $ ./tmux
    • border-ascii 版の tmux が起動します。
あとは自分用の tap に反映しておしまい。


インストール方法

1からインストールする場合のコマンドは
  • $ brew install --HEAD atton/customs/tmux
でいけます。
必要あらば自動で atton/cusoms を tap してくれるようになってました。便利。

2019/08/20

hub コマンドの user 設定を変更する

hub というコマンドがあります。
GitHub に関連したコマンドが追加された git の wrapper です。
例えば
  • $ hub clone neovim/neovim
とすると
  • $ git clone git@github.com:neovim/neovim.git
相当の事をしてくれます。
git の wrapper になってるので、 hub だけで全てを済ませる派の人がいるかもしれません。


環境

  • OS: macOS Mojave 10.14.6
  • Homebrew: 2.1.10
  • Homebrew/homebrew-core:  (git revision ea34; last commit 2019-08-20)
  • hub: version 2.12.3
  • git: version 2.23.0


設定を変更するきっかけ

  • $ hub browse tmux/tmux
    • とすると tmux/tmux をブラウザで開いてくれます。
  • $ hub browse hoge
  • $ git config --list
    • で git の設定を確認しても 'atton-' は存在しない。
    • むしろ github.user=atton になってるくらい。
    • hub が git の wrapper になってる事のデメリットがちょっとあって
  • $ hub config --list
    • としても git config --list の時と同じ内容が出てくる。
    • つまり hub 経由で config を update しても git の config が変更されそう。
ということで 'atton-' を設定している部分を探してみる。


設定箇所探し + 設定

  • $ hub --help
    • hub と git の help が出る
    • hub 部分に config とか setting とかの項目は無い
  • $ man hub
    • config で search するとありました。 
    • どうやら $HOME/.config/hub に書かれているようです。
    • 編集すると 'user: atton-' になっていたので 'user: atton' に修正。
  • $ hub browse dot_files


おまけ

ちなみに私が良く使うコマンドは
  • $ hub browse
です。
current directory の repository の github ページがブラウザで開きます。
あとは hub clone くらい……?

実際 hub をあまり使わないのは
  • hub が無い環境で作業することもある
  • wrapper が隠してくれているオプションとかに「気付かずに助けられている」のは勘弁
とかの理由があります。

なので、個人的にはなるべく git を使うようにしています。
もちろん hub の方が便利な時は hub を使います。

2019/08/13

nodenv を使って複数のバージョンの Node.js を管理する

プロジェクト毎に指定の Node.js のバージョンがあったり、常に最新の Node.js を使いたかったりすると、Homebrew だけで管理するのは面倒になってきます。

今回は nodenv を使って Node.js の環境を作ろうと思います。
ちなみに私は Ruby では rvm より rbenv 派。
なので nvm よりは nodenv かな、と。

環境

  • OS: macOS Mojave 10.14.6
  • zsh: 5.7.1
  • Homebrew: 2.1.9
  • Homebrew/homebrew-core (git revision 2548c; last commit 2019-08-11)
  • nodenv: 1.3.0
  • node-build: 4.6.3


インストール

  • $ brew install nodenv
  • $ nodenv init
    • eval "$(nodenv init -)"
    • を .zshrc に追加せよ、と言ってきますので追記
  • $ nodenv install 12.8.0
    • とかで好きなバージョンを指定
  • $ nodenv global 12.8.0
    • とかで通常使用するバージョンを指定できます。
  • $ nodenv local 12.7.0
    • とかで特定ディレクトリの下で使用するバージョンを指定します。
    • 具体的には .node-version というファイルが作られて、そこにバージョンが書かれる。


nodenv init をちょっと追ってみる

ちなみに zsh 上で
  • $ nodenv init -
とすると


のような設定がされることが分かります。つまり、
  • executables がある PATH を追加する
  • NODENV_SHELL の設定
  • 補完スクリプトを source
  • nodenv rehash (executables の再配置)
  • nodenv の wrapper
    • rehash と shell の両コマンドは特別扱い(eval する感じ)みたいですね
    • 興味がある人はさらに読んでみても良いかと思います。

nodenv init と shell 指定

rbenv を設定していた時に見つけたのですが、特定の shell であることを指定することもできます。
具体的には $SHELL が zsh の状態でも
  • $ nodenv init - bash
とすると

のような、bash 向けの設定が生成されます。
nodenv init - zsh と具体的に違うのは NODENV_SHELL と補完スクリプトの場所くらい。
zsh で bash の設定を読み込むなんてことはほぼ無いと思うので、 nodenv init - で問題無いと思います。


nodenv rehash

ちなみに zshrc に nodenv init - が記述される訳ですから、シェルを立ち上げる度に nodenv init - が実行されます。
気持ち程度の問題だとは思いますが、 rehash を省略するオプションがあって
  • $ nodenv init - --no-rehash zsh
とすると nodenv rehash が実行されません。

とはいえ普通はこのオプションのある無しで実行時間はほとんど変わらないです。
大量に package を入れたバージョンから新バージョンに上がった直後とかなら rehash にコストがかかるかも? 程度

とりあえず、私は .zprofile には rehash 無しの init script を書いてます。
それで、npm install -g とかしたら手で nodenv rehash を打つ、という運用をしています。