tscreen に移行した

OSX のデフォルトのscreen はpbcopy が動かない問題とかがあり、今までは開発版のscreen を使ってました。ですが、開発版の方はZenTestにくっついているautotest と連携する際にステータスラインの部分がきちんと動かなかったりしてました。
そこで、tscreen に移行したらどちらも解決!「~/.screenrc」もそのまま使えるので便利。縦分割もできます。


インストール

screen のコピーモードでコピーしたものをpbcopy に渡すパッチをあてる

このパッチをあてておけば、screen のコピーモードでコピーしたものをそのままペーストできるので便利。

cd ~/src
wget http://www.steve.org.uk/Software/tscreen/dist/tscreen-0.4.9.tar.gz
tar xzf tscreen-0.4.9.tar.gz
cd tscreen-0.4.9
  • mark.c
--- /tmp/mark.c 2009-07-13 21:37:22.000000000 +0900
+++ ./mark.c    2009-07-13 21:41:13.000000000 +0900
@@ -54,6 +54,8 @@
 static void MarkRedisplayLine __P((int, int, int, int));
 static int  MarkRewrite __P((int, int, int, struct mchar *, int));
 
+void pbcopy(const char *strings);
+
 extern struct layer *flayer;
 extern struct display *display, *displays;
 extern struct win *fore;
@@ -429,6 +431,19 @@
 
 /**********************************************************************/
 
+// http://d.hatena.ne.jp/eagletmt/20090516/1242486472
+void pbcopy(const char *strings)
+{
+  FILE *pipe;
+  pipe = popen("/usr/bin/pbcopy", "w");
+  if (pipe == NULL) {
+    LMsg(0, "pbcopy failed: %s", strerror(errno));
+    return;
+  }
+  fprintf(pipe, "%s", strings);
+  pclose(pipe);
+}
+
 int
 GetHistory()   /* return value 1 if copybuffer changed */
 {
@@ -1040,6 +1055,7 @@
                    newcopylen);
              else
                LMsg(0, "Copied %d characters into buffer", md_user->u_plop.len);
+        pbcopy(md_user->u_plop.buf);
              if (write_buffer)
                WriteFile(md_user, (char *)0, DUMP_EXCHANGE);
              in_mark = 0;
  • pty.c
--- /tmp/pty.c  2009-07-13 21:37:38.000000000 +0900
+++ ./pty.c     2009-07-13 21:40:58.000000000 +0900
@@ -35,7 +35,7 @@
 
 /* for solaris 2.1, Unixware (SVR4.2) and possibly others */
 #ifdef HAVE_STROPTS_H
-# include <sys/stropts.h>
+//# include <sys/stropts.h>
 #endif
 
 #if defined(sun) && defined(LOCKPTY) && !defined(TIOCEXCL)
インストール
./configure --prefix=/usr/local
make
sudo make install
sudo mv /usr/local/bin/screen /usr/local/bin/screen_orig
sudo ln -s /usr/local/bin/tscreen /usr/local/bin/screen
ln -s ~/.screenrc ~/.tscreenrc


screen と比較した時にどんな追加機能があるかとかはまだ調べていないので、その辺り調べつつ使っていこうと思います。