2008年 07月 03日

iTerm つかう!!!

なんか、すでに理由を忘れたんだけど Terminal.app に辟易したので iTerm つかう。今までなんで iTerm を使っていなかったかっていうと

  • タブうざイ☆ (screen のほうがスクリプタブルなのでいい)
  • Cmd+Num は window 切り替えにしたい
    • window サイズをかえていくつか重ねてつかいたいので

ambi-width がどうとかのパッチはさておき、Cmd+Num をタブきりかえじゃなくて window きりかえにするパッチをかいた

diff --git a/PTYWindow.m b/PTYWindow.m
index ce2676f..8207d01 100644
--- a/PTYWindow.m
+++ b/PTYWindow.m
@@ -109,14 +109,33 @@
 - (void)sendEvent:(NSEvent *)event
 {
 	// NSLog(@"%s: 0x%x", __PRETTY_FUNCTION__, self);
-	
+
 	if([event type] == NSMouseEntered)
-	{		
+	{
         //NSLog(@"window mouse entered");
 		if([[PreferencePanel sharedInstance] focusFollowsMouse])
 			[self makeKeyWindow];
 	}
-	
+	if([event type] == NSKeyDown)
+	{
+		if ([event modifierFlags] & NSCommandKeyMask)
+		{
+			NSString* c = [event charactersIgnoringModifiers];
+			NSArray* windows = [[iTermController sharedInstance] terminals];
+
+			NSLog(@"pressed: Command+%s", c);
+			for (int i = 1, len = [windows count]; i <= len; i++)
+			{
+				if ([c isEqualToString: [NSString stringWithFormat: @"%d", i]])
+				{
+					// [[iTermController sharedInstance] terminalWindows]
+					[[[windows objectAtIndex: i - 1] window] makeKeyAndOrderFront: self];
+					break;
+				}
+			}
+		}
+	}
+
 	if (super) [super sendEvent:event];
 }
 
diff --git a/iTermApplicationDelegate.m b/iTermApplicationDelegate.m
index 648f46a..5bb6f4c 100644
--- a/iTermApplicationDelegate.m
+++ b/iTermApplicationDelegate.m
@@ -558,15 +558,16 @@ static BOOL usingAutoLaunchScript = NO;
 	while ((aTabViewItem = [enumerator nextObject])) {
 		aSession = [aTabViewItem identifier];
         NSMenuItem *aMenuItem;
-		
-        if(i < 10)
-        {
-            aMenuItem  = [[NSMenuItem alloc] initWithTitle: [aSession name] action: @selector(selectSessionAtIndexAction:) keyEquivalent: [NSString stringWithFormat: @"%d", i]];
-            [aMenuItem setTag: i-1];
-			
-            [aMenu addItem: aMenuItem];
-            [aMenuItem release];
-        }
+
+		if(i < 10)
+		{
+		//	aMenuItem  = [[NSMenuItem alloc] initWithTitle: [aSession name] action: @selector(selectSessionAtIndexAction:) keyEquivalent: [NSString stringWithFormat: @"%d", i]];
+			aMenuItem  = [[NSMenuItem alloc] initWithTitle: [aSession name] action: @selector(selectSessionAtIndexAction:) keyEquivalent: @""];
+			[aMenuItem setTag: i-1];
+
+			[aMenu addItem: aMenuItem];
+			[aMenuItem release];
+		}
 		i++;
 	}
 

設定は http://f.hatena.ne.jp/cho45/iTerm/ においてみた。一枚ずつのページをすすめながら設定するとべんりっぽい。ふつうに ~/Library/Preferences/net.sourceforge.iTerm.plist (ソースからコンパイルすると iTerm.plist じゃなくなるっぽい) でもいい気がするけど


あと、そもそも cvs head は Xcode 2.5 + Mac OS X 10.4.11 ではビルドできなくて、 iTermSecurityMgr.{m,h} と Shells.{m,h} を iTerm.framework に追加しないとだめだった。

なんか iTerm の window 順がいつのまにか変わることがあって Cmd+num がズレる……

フルスクリーンにするとズレるみたいだ。フルスクリーンにするなら新しいウィンドウつくろう

「はてなTシャツ欲しい!」プレゼントキャンペーン開始【応募締め切り:7/9】 - はてなダイアリー日記 うけたw

そういえば、はてなダイアリーで告白するには、なぞなぞ認証を使えばいいんだと思う。「僕の好きな人の id が入ります☆……↓」とか書いて入力っていう、おおぅ、なんて黒歴史的な告白方法! 気持ち悪さレベルが10ぐらい上りそうだぜ!

screen と vim の憂鬱

screen でいっぱい window つくって vim 立ち上げまくったりしていると、よく「スワップが残ってるよ、既にどっかで vim ひらいてるよ」と怒られるのです。しかしながら僕は C-z でバックグランドに飛ばしまくるので、どこの window でうごいているのか頑張らないとわかりません。僕は頑張りたくありません。とても困りました。だから僕は、それを解決する方法を考えました。

まずは、pid から、そのプロセスがどこの window で動いているかを知るために、以下のようなことをします。

# .zshrc

# window num -> tty の対応ができるように
tty > /tmp/screen-tty-$WINDOW
# pid2screen
#!/usr/bin/env ruby

require "pathname"

pid = ARGV[0]
tty = `/bin/ps -o tty= -p #{pid}`.strip
win = Pathname.glob("/tmp/screen-tty-*").find {|i| i.read[tty] }
if tty.empty? || !win
	exit 1
else
	puts win.to_s[/\d+$/]
	exit 0
end

これで、pid2screen [pid] すると pid から該当のウィンドウ番号が表示されるようになります。(なければ exit 1)

そして、vim のラッパを書きます。すこし長いのでレポジトリに直接リンクをはりますね。

内容的には

  • swp ファイルがあったら、それを読んで pid を抜きだす
  • その pid で pid2screen する。
  • 結果があるならその window にとばす

という感じです。window に飛ばしてさらにそのファイルをアクティブにしたいところですが、いい方法が浮かびませんでした。悲しいです。でも、とても便利になりました。嬉しいです。

prompt にゆのっちを表示する。(挫折)

いよいよ、ひだまりスケッチ×365がはじまるので、プロンプトを、よりゆのっちにしたいと思い、

 / _ / × <

としたかったのですが、挫折しました。

まず、iTerm に ambiwidth を正常に表示するパッチをあててビルドしました。この時点で基本的にちゃんと表示されるようにはなりました。でも screen で画面を切替えてると幅がずれることがあってダメでした。

最初 iTerm の疑ってデバッグをしていたのですが、どうやらエスケープシーケンスの時点でずれた値がくることがわかりました。どうやら screen のせいみたいでした。なので、screen に cjkwidth を認識するパッチをあててビルドしてみたのですが、これがうまくいきませんでした。壮絶に崩れまくったので諦めました。悲しいです。

Mac で screen をつかいつつ、ambiwidth な文字をちゃんと表示できているという人がいたら、ぜひ教えていただきたいです。

ちなみに結局妥協した結果

 / _ / X <

にしました。Osaka の × は綺麗な × なので、やっぱり × にしたいです。

2008年 07月 01日

自分のことを知るために他人をミラーとして利用するのは、悪くはないけど、良くもないと思う。自分でやれることはやったらいいのに

ひどい夢をみた。

かなりボロいアパート、鍵がかからないところに、自分は住んでいて、生活をしている。なんか特別なことがある日に、バスでどこかにでかけて、帰ってきたら、自分の部屋がない。部屋がなくて探しまわっていたら、廊下みたいなところに、自分の持ち物の一部があることに気付く。泥棒に入られたようだ。(部屋がなくなる説明がつかないけど)

お金がないから、大抵のものは取り戻せない。もうなにもないなーと思ってダメだこれ、って思ったところで、これがプログラムだって気付く。適当に終了処理をすると元のプロンプトに戻る。好奇心でなんかそういう疑似体験っぽいプログラムを実行していたっぽい。

夢の中の夢の派生っぽい感じ。説明できない。

2008年 06月 30日

リスクありすぎる気がするよね。でもちょっとやってみたいなと思う。わからんね。結果どうなるか、全然わからんね。

セルフリブログ。なんかやたら「バランス」って使うなーっておもってサイト内検索かけたらひっかかったので読んだりした。なんでこんなこと書こうと思ったんだろうなぁ。わからない。ほんとキモいなー今も昔もキモい。キモイキモイキモイ

自分でその最上級にくだらなくて、つまらなくて、つらい「努力」とやらを望んでやっているのに、「俺はつらい努力をしているから偉い」みたいな考え方をするのはさけたい。意識的/無意識的に関わらず、さけたい。だから時々自分をチェックする必要がある。

http://lowreal.net/blog/2006/12/19/3

人間が生きていることになんて、なんの意味も、価値もない。意味も価値も、見いだしているのは人間/自分そのものだ。だから、「つらい」ことをやっている自分、というのは、自分がそれを望んだからそれをやっているに過ぎないと思う。いくらでも、楽しい方向に考えることはできるはずだ。でもそれは殆どの場合うまくいかない。ちょっと「つらい」ことをしたあとに楽しいことをしたほうが、より楽しいことを知っているからだ。でもって人によって、この「つらい」ことをするのと「楽しい」ことをするのとのバランスが違う。殆どずっと楽しい人もいるし、殆どずっと辛い人もいる。

http://lowreal.net/blog/2006/12/19/3

「辛いふり」をしたり「楽しいふり」をしなければならない。くだらない人間ごっこをしなければならない。みんな楽しいことをしていればいいのにも関わらず、「みんな楽しいこと」をしている状況になるためには、既にみんなが楽しくなければいけない。誰か一人が壊れていると、それが人間ごっこをはじめるせいで周りが巻き込まれる。誰がこのクソマゾゲーを始めたか知らないけど、だいたい今生きている人は巻き込まれてるだけだ。しかも連鎖的に確実に悪化していくので、救いようがなく、そのうち必ず終わってしまう。

http://lowreal.net/blog/2006/12/19/3

そういえば「人間ごっこ」について、この頃と今とではちょっと考えかたが変わっていることに気付いた。2年ぐらいまえ「人間ごっこ」は、生まれたときからやっているものではないと思っていたけど、今は生まれること自体が人間ごっこの始まりだと思ってる。2年前に知っていた、人間ごっこを辞める唯一の方法は、本当に唯一の方法なんだなぁと思う。

いろんなことがとても退屈なことに思えてくる。よくわからない。

再読しない日記に意味はない。それと書き捨てに価値を持たせたいわけじゃない。手が動くように、好きにさせたい。

頭の悪い人の書く文章は一目瞭然すぎてとても憂鬱になる。おれのが全部そうだからだ。

セルフリブログ楽しいなー このキモさがたまらん!!!!!

テンションあがってきたwwww

なんか、ヘタにモテようとしているのはほんと嫌だなー (女の子から、とかに限らず)。もっと心の底から DNBK させるような、グロテクスな感じがいいんじゃないのかなーーー 結局演出してるんだもんなぁ。気付かずうちにってことですか? 結局日記をいくつかに分散させているのもそれなんだろ。エロゲやりたいなー

「あーこの id だと、誰誰さんが読んでるからちょっと自重しよう」みたいな、ね。そういうのがダメなんだよねーーー それがコミュニケーションを円滑にする? ですよねーwww

しかし! おれは! これだけ暗めのことを書いているにも関らず、「しにたい」と書かれたエントリがとてつもなく嫌いなのである!!!! おまえ「しにたい」じゃなくて「にげだしたい」と正確に書けよ!!!! 本当にしにたくないくせに

こうやってぼくは、おれが尊敬するような人物像から、離れていくのだな

とても面白い日記を書く人ほど、プライベートモードとかにせずにそのまま消えていきやがるので、フィードリーダに上ってこなくてそのまま忘れる。

どっかで 1965 の女性ボーカルカバー (コピー?) を拾って mp3 だけ手元にあるんだけど、これいいなー

一週間ぶりにヒゲをそった

今日の環境

こういう写真があると、なんか奇妙な感覚になりませんか。なりませんね。

なんで現実世界の継続はファーストクラスじゃないん?

どこにリンクされているのか、それっぽくわかるようにする

	def title(url)
		uri = URI(url)
		@ua.get(uri)

		text = ""
		case
		when uri.fragment
			fragment =  @ua.page.root.at("//*[@name = '#{uri.fragment}']") || @ua.page.root.at("//*[@id = '#{uri.fragment}']")

			text = fragment.inner_text + fragment.following.text + fragment.parent.following.text
		when uri.to_s =~ %r|^http://h.hatena.ne.jp/[^/]+/\d+|
			text = @ua.page.root.at("#main .entries .entry .list-body div.body").inner_text
		else
			text = @ua.page.root.at("//title").inner_text
		end
		text.gsub!(/\s+/, " ")
		text.strip!
		NKF.nkf("-w", text).split(//)[0..30].join
	rescue Exception => e
		@log.debug ["title:", e.inspect]
		""
	end

はてスタ IRC ストリームつかってて、URL だけだとどこにスターついたのかよくわからないので、こういうのをカマして、リンクされた周辺の文字列をひろっています。結構うまいこといきます。@ua は WWW::Mechanize で @log は Logger です。

ハイクを特別扱いしてるのは、はてスタ IRC ストリームのチャンネルで発言するとハイクに投稿されるようになっているため、ちょっと優遇してる感じです。

.zshrc 再編

.zshrc は単体でどっかのサーバに転送してもいいような感じにして、作業環境では ~/.zsh/mine.zshrc を読むようにした。

でもって作業環境ではないホストに入っているときは prompt 変えるようにした。

下が作業環境で、うえはどっかべつのところ。rprompt にホスト名表示させても全く見ないし、プロンプトの形が同じだととても混乱するので大きく変えた。REMOTE ってついてるのは (リモートの作業環境もあるから変だけど)、単純に強調