Homebrewのデフォルトscreenと問題点
現在のHomebrewデフォルトでは
1、
screen.rb: https://github.com/Homebrew/homebrew-dupes/blob/master/screen.rb
にあるように、
GNU screenプロジェクトから配布されてるものに対して
utmp関連のwarningを抑える様なパッチを当てています。
ただ、これだけだと日本語が上手く表示できない問題があって、 コレに対しても別のパッチが必要です。
なので、直接Homebrewは使えなかったので手動でコンパイルしてインストールしていたのですが、 そのパッチ付きのformulaを作ってそれで管理することにしました。
screenutf8
名前はscreenutf8としておきました。 GitHubにあります。
homebrew-rcmdnkpac/screenutf8.rb
使い方は
$ brew tap rcmdnk/homebrew-rcmdnkpac
$ brew install screenutf8 --utf8
とすれば上のリンク先で説明しているUTF8用の2つのパッチをあててインストールします。
--utf8を付けなければデフォルトのscreenと全く一緒です。
--HEADと組み合わせて
$ brew install screenutf8 --utf8 --HEAD
とすればHEAD版のものが入ります。
追記: 2015/03/10
Macでの文字化け対策用のGNU screenのインストール
で書いたとおり
http://zuse.jp/misc/screen-utf8-osc.diffが
リンク切れになってたので、それに対応してFormulaも書き直しました。
追記ここまで
Formulaの覚書
今回の追加では、--utf8というオプションを追加して、
パッチをあてる部分を作りました。
オプション
オプションの追加は
option "utf8", "Apply patches for utf8"
の様に、optionの次にオプション名、その後に必要なら説明を,の後に書きます。
これで、--utf8という引数が使える様になります。
Formula内では、
if build.includ? "utf8"
と言う形でチェックが可能。
もしくは、with--XXXという形でオプションを指定すると、
if build.with? "XXX"
または
if build.include? "enable-XXX"
と言うチェックも可能になるようです。
パッチ
パッチファイルをウェブから取ってきてあてる基本的な書き方
パッチの基本的な書き方は
1 2 3 | |
な感じでpatch do~end内にパッチのURLを書いておくだけです。
これでインストール作業前にパッチがあてられる様になります。
パッチファイルをチェックしたい場合はsha1などをチェックしておいて 2
1 2 3 4 | |
と、加えて上げればOK。
また、通常はパッチをrootディレクトリ3
であてる事を想定していますが、
もし、階層が違う場合等、
patchに与える-p2オプションとかが必要な場合は、
1 2 3 4 | |
と、patchのところにオプションを与えてあげればOK。
screenutf8.rbでは(screen.rbでも)
通常はhttp://ftpmirror.gnu.org/screen/screen-4.2.1.tar.gz
をダウンロードして使いますが、
この中身はソースだけで一番上にパッチをあてたいファイルたちも居ます。
一方、--HEADを指定すると、
git://git.savannah.gnu.org/screen.git
からCloneしてきて使うのですが、この時は中にsrcディレクトリがあって
その中にソースコードが入っています。
もともと、パッチはこのGitのレポジトリのトップディレクトリで作られてるので、
--HEADの場合が何もなく(もしくはp1)てそのままパッチをあてられます。
一方、stableな通常インストールの方で階層が1つ浅くなるので1つ階層を消すためにp2を与えないといけません。
パッチを直接書き込む
パッチの中直接パッチを書き込んでしまうことも可能です。
やり方は、Formulaファイルの最後に__END__と書き込み、
その下にパッチの記述を書きます。
__END__と書くと、それより下はFormula用コマンドとしては無視され、
この部分をDATAとして中で呼ぶ事が出来る様になります。
従って、下みたいにすればOK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
DATAを使う時でもp2等のオプションとの併用が可能。
同様にDATAの代わりに
patch :p2, "...patch description..."
の様にパッチの内容を直接書いてしまっても行けるみたいです。
複数まとめてパッチをあてる
また、
patchesという関数を定義することでも
パッチをあてることが出来ます。
patchesの返り値を見て、それらを使ってパッチをあてます。
なので、上の1つ1つのパッチでも
1 2 3 | |
と書き直せます。
複数の場合には配列にして、
1 2 3 4 | |
としてあげればOK。
また、階層を変えるためにp2等のオプションを与えたい場合には
ハッシュにして、
1 2 3 4 5 | |
コレを使うと、上のscreenutf8.rbはこんな感じでも書けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | |
大分スッキリ出来た感じです。 (一応上の方のは元の形残しておこうかな、と思って元のファイルにパッチ部分を加えただけにしてたわけですが。)
まとめ
これでMacでは手動で入れなきゃいけないものが無くなったので stowとかも必要無くなりました。
コレを機に、 Linuxの方とかではオプション情報が残るpacoに戻ろうかな、 とかも考えてます。
問題はCygwinでは使え無いのでやはりそことは別の物になってしまうのがあれですが。
ただ、Linuxで管理者権限持ってなくてローカルに沢山インストールしたい、 となる事は結構あるので 4、 そういった時に、ローカルで使えるパッケージ管理みたいのがあったら 便利だな、とか思うのですが。 (pacoやstowはインストール作業はどうしても手作業なので。。。)
上のパッチ付きのものに関しては、元の部分と競合するわけでもないので
気が向いたら
homebrew-dupes
にPull Requestでも送ってみようかと思っています。
-
デフォルト、と言っても現在はHomebrewをインストールしただけでは screenのFormulaは入っていません。
これはMac自身にすでにscreenが入っているからです。
このような既にインストールされてるソフトについては、
homebrew-dupes: https://github.com/Homebrew/homebrew-dupesというレポジトリの中にFormulaが入っているので、これを$ brew tap homebrew-dupesとしてtapしておく必要があります。 ↩
-
$ shasum -a 1 screen-utf8-nfd.patch アーカイブを取ってきたならそれを展開して一番上のディレクトリ、GitとかからCloneしてきたならそれの一番上のディレクトリ。 ↩
