tmux 2.2 が何かおかしいので homebrew で tmux 2.1 にダウングレードする


## 最初に

### 2017/10/10 追記
[最新 tmux 2.5 に対応したものを書きました](https://qiita.com/__hage/items/1e18e93dba85fc450cbc)。 __以下の文書はもう古いので参照しないでください__。何かのときのために文書自体は残しておきます。

### tmux 2.2 は何か変
[tmux 2.2 にはいろいろ問題があって](http://qiita.com/river24/items/4d4e4d06cf1b12a2c20d#%E6%97%A2%E7%9F%A5%E3%81%AE%E5%95%8F%E9%A1%8C) しばらくは使わないほうがいいようです。

### パッチが当たらない
UTF8 の日本語を tmux で扱うには `tmux-ambiguous-width-cjk.patch` を当てた tmux がほぼ必須ですが 2.2 になってからこのパッチが当たらなくなってしまいました。何も考えず `brew upgrade` しちゃった私は後悔し深く反省しました。

### パッチが当たった tmux を入れられればいい人

御託は必要なくインストールだけしたい人は以下のようにしてください;

```shell-session:
$ brew uninstall tmux
$ brew update
$ brew tap hage/homebrew-formula
$ brew install tmux21
```

## バージョンダウンの方法

以前は `brew versions <formula>` で古いバージョンのコミットハッシュを得て、Homebrew のディレクトリで `git checkout <commit>` する方法がありましたが、今は使えません。`versions` サブコマンドが削除されましたし、いかにも管理が面倒そうですし、もしできたとしてもやりたくありません。

### バージョン 2.1 の Formula を得る

GitHub にある [homebrew/homebrew-core](https://github.com/Homebrew/homebrew-core) から [tmux の Formula](https://github.com/Homebrew/homebrew-core/blob/master/Formula/tmux.rb) を開き [History] ボタンを…、押してもなんかエラーが出てダメです。こいつの古いのを取り出すには clone するしかないようです。

```shell-session:
$ git clone https://github.com/Homebrew/homebrew-core.git
$ cd homebrew-core
$ git log master -- Formula/tmux.rb
```

これを見ると `78b85` というコミットがどうやらそれっぽいです。

```shell-session:
$ git checkout 78b85
```

これで `Formula/tmux.rb` がバージョン 2.1 のものになりました。


### Formula を編集
まず自分用の Formula を収めるローカルリポジトリを作りましょう。

```shell-session:
$ mkdir -p ~/project/homebrew-formula
$ cd !$
$ cp /path/to/homebrew-core/Formula/tmux.rb tmux21.rb
$ git init . && git add . && git commit -m 'add: tmux 2.1 formula'
```

`tmux21.rb` を編集します。やることは以下のとおりです;

* クラス名の変更 (ファイル名に合わせたクラス名にする必要があります)
* パッチの記述を追加
* bottle の記述を削除 (パッチを当ててコンパイルしなければならないので bottle の記述は邪魔になります)

```diff:
diff --git a/tmux21.rb b/tmux21.rb
index 9922c5c..3b0d4b7 100644
--- a/tmux21.rb
+++ b/tmux21.rb
@@ -1,4 +1,4 @@
-class Tmux < Formula
+class Tmux21 < Formula
   desc "Terminal multiplexer"
   homepage "https://tmux.github.io/"
 
@@ -21,14 +21,6 @@ class Tmux < Formula
     end
   end
 
-  bottle do
-    cellar :any
-    revision 2
-    sha256 "815920cd38a8102360f7d667271d9c724f41087dd79be433db29259390ef8011" => :el_capitan
-    sha256 "93e2156c3c7e1c9f3f4b86dd84617e7519e9bee630f1e8769e00a91aa341d274" => :yosemite
-    sha256 "03c4ca001f72a1623393c0ec9406dfd82b7e449d745762a6e761da6a95d0fbd9" => :mavericks
-  end
-
   head do
     url "https://github.com/tmux/tmux.git"
 
@@ -45,8 +37,8 @@ class Tmux < Formula
 
     ENV.append "LDFLAGS", "-lresolv"
     system "./configure", "--disable-dependency-tracking",
-                          "--prefix=#{prefix}",
-                          "--sysconfdir=#{etc}"
+    "--prefix=#{prefix}",
+    "--sysconfdir=#{etc}"
 
     system "make", "install"
 
@@ -67,4 +59,11 @@ class Tmux < Formula
   test do
     system "#{bin}/tmux", "-V"
   end
+
+  def patches
+    [
+      "https://gist.githubusercontent.com/waltarix/1399751/raw/8c5f0018c901f151d39680ef85de6d22649b687a/tmux-ambiguous-width-cjk.patch",
+      "https://gist.githubusercontent.com/waltarix/1399751/raw/dc11f40266d9371e730eff41c64a70c84d34484a/tmux-pane-border-ascii.patch"
+    ]
+  end
 end
```

これをコミットしましょう。

### GitHub に Push

GitHub に適当なリポジトリを作って先に作ったリポジトリを push しましょう。

### brew tap → brew install

brew で GitHub から取り込むリポジトリを指定し、インストールしましょう

```shell-session:
$ brew tap <Your-GitHub-Name>/<Your-Formula-Repository>
$ brew install tmux21
```

## 参考文献
* [MacPorts で古い tmux をインストールして使う](http://qiita.com/river24/items/426292eb8cc3480c491f) こちらは MacPorts でのやり方でした。Homebrew でのやり方が探してもなかったのでこの記事を起こす気になりました
* [半角 border パッチがあたった tmux 2.2 を MacPorts で入れて使う](http://qiita.com/river24/items/4d4e4d06cf1b12a2c20d) tmux 2.2 の問題点がまとまっています
* [Homebrewでサクッとpatchを当てる](http://qiita.com/macoshita/items/2ee3c15f362103d1e373)