screenの縦分割版をhomebrewでlionにinstall

teminal+sshでネットワーク切替時に接続がぶつぶつ切れるので、
screenを試してみることにしました。


縦分割をやりたくなったので
ソースからパッチ当ててinstallしようかと思いましたが
どうせやるならhomebrewで入れたかったので
Formulaファイルを作成して、やってみました。

formula

最終的にはコレ。
Library/Formula/screen-vertical-split.rb at master from rochefort/homebrew - GitHub

#screen-vertical-split.rb

require 'formula'

class ScreenVerticalSplit < Formula
  url 'http://ftp.gnu.org/gnu/screen/screen-4.0.3.tar.gz'
  homepage 'http://www.gnu.org/software/screen/'
  md5 '8506fd205028a96c741e4037de6e3c42'

  def patches
    # enable vertical split patch
    [
      "http://vsp4sdl.yuggoth.org/wrp_vertical_split_0.3_4.0.2.diff.bz2",
      "https://raw.github.com/gist/1143577/d351772f91704303d14aa6e654b8fdff90d3d225/pty.c.20110813.diff"
    ]
  end

  def install
    system "./configure", "--enable-colors256",
                          "--prefix=#{prefix}",
                          "--mandir=#{man}",
                          "--infodir=#{info}"
    system "make"
    system "make install"
  end
end

使い方

こいつを、/usr/local/Library/Formula/screen-vertical-split.rb という名前で保存して

brew install screen-vertical-split

macはデフォルトでscreenが入っているので元ファイルをrenameするなり
alias設定するなりして新しくinstallしたやつにパスを通してあげてください。

はまりどころ

make error
pty.c:38:26: error: sys/stropts.h: No such file or directory
make: *** [pty.o] Error 1

そこでpty.cを見てみると、soralis用のコードでエラーとなっている。

pty.c
/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
#ifdef HAVE_SVR4_PTYS
# include <sys/stropts.h>
#endif

ちなみに、こちらで紹介されているようにLion/Leopardはstropts.hをサポートしていない模様。
Leopard で cvs版screen - bokuju とか tabe1hands の日記


なので、そこを削除するpatchをgistにあげて
brew install時にそいつを見るようにしてみました。

format of patches

brewから呼び出されるpatchコマンドは/usr/bin/patch -f -p1 -i という形式のようなので
1階層下に(old/new)生成されるようにpatchを作っています。
あと、最終行に改行を入れていないとエラーになったので、入れています。

$ diff -u old/pty.c new/pty.c
--- old/pty.c	2011-08-13 16:22:42.000000000 +0900
+++ new/pty.c	2011-08-13 16:28:31.000000000 +0900
@@ -33,11 +33,6 @@
 # include <sys/ioctl.h>
 #endif
 
-/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
-#ifdef HAVE_SVR4_PTYS
-# include <sys/stropts.h>
-#endif
-
 #if defined(sun) && defined(LOCKPTY) && !defined(TIOCEXCL)
 # include <sys/ttold.h>
 #endif


screenrcはこれからですが、とりあえず縦分割達成。