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してきたならそれの一番上のディレクトリ。 ↩