IIrcv.dmg
http://lab.lowreal.net/test/IIrcv.dmg
IIrcv.app and dmg にしてみた! バージョン番号さえまだつけてない!
svn の自動で Revision つける keyword を毎回忘れる。
Makefile を Rakefile にしたい。
http://lab.lowreal.net/test/IIrcv.dmg
IIrcv.app and dmg にしてみた! バージョン番号さえまだつけてない!
svn の自動で Revision つける keyword を毎回忘れる。
Makefile を Rakefile にしたい。
親モジュールの解析ができてなくて失敗するなぁ。
module = rb_eval_string("OSX");
HotKey = rb_define_class_under(module, "HotKey", rb_cObject);とかやってるせいなんだけど、どうすればいいんだろう。
c_parser のソース読んだけど無理みたいだ。組み込みモジュール以外は認識できないみたい
メニューの意味がわかりにくいよなぁ。隠すと消さないは一個にまとめたい。
みたいな感じなのかな。でも min_alpha 指定してるときは完全に消えるわけじゃないからなぁ
アイコンは http://www.xfce-look.org/content/show.php?content=23517 が public domain だったので gimpshop で文字のっけて shadow った……gimpshop むずかしすぎる。
drawAtPoint はあんまり連続描画するもんじゃないらしいので LayoutManager を使ってみたい。
ざっと眼を通したけど(メソッド名だけ)めんどくさそう
拡張ライブラリ作ったけど、なんかもっと簡単にやるほうほうがある気がしてならない。Carbon の関数をインポートする機能ってないんかなぁ
#include の順番が地味に重要だった。
#include <ruby.h> #include <Carbon/Carbon.h>
だとコンパイルエラー
#include <Carbon/Carbon.h> #include <ruby.h>
すればおk
#!/usr/bin/ruby require 'mkmf' $CFLAGS << " -framework Carbon " $LDFLAGS << " -framework Carbon " create_makefile 'osxhotkey'
とか一応やらないとリンクが通らない
app = NSApplicationWithHotKey.sharedApplication
ref = app.register_hotkey("command+shift+j") do
puts 'hello'
end
app.run学内だとチェックインできねぇ
ってどうやってかくんだ><><
っていうか、学内のネットワークおそぎるんだよおおおおおお
newgem して (Hoe は生成ファイルがよくわからない……) 書いたけど、これでいいのか謎だなぁ。
拡張ライブラリビルドしないと test できないから
Rake::TestTask.new("test") { |t|
sh %{ruby setup.rb config}
sh %{ruby setup.rb setup}
t.libs << "test"
t.libs << "ext"
t.pattern = "test/**/*_test.rb"
t.verbose = true
}みたいにしたけど、setup.rb に引数わたせないよなぁ。今回は渡す必要ないからいいけどどうするんだろ。
他のライブラリの Rakefile 読みまくるか
した。 http://lab.lowreal.net/trac/changeset/472
osxhotkey が必要。rubyforge のアカウントが承認されてないので http://lab.lowreal.net/site-ruby/ においとく。
/Developer/Applications/Utilities/Icon Composer.app で作るみたいだ。
Foo.app/Resouces/bar.icns として、Info.plist に
<key>CFBundleIconFile</key>
<string>bar</string>を加えると .app のアイコンになった。
IRC を表示する DRb クライアント
require 'drb/drb'
require "rice/irc"
require "rice/observer"
class Ircv < RICE::SimpleClient
def initialize(uri, nick, user, username, pass, *channels)
super(nick, user, username, pass, *channels)
@o = DRbObject.new_with_uri(uri)
end
def uped(subject, message)
super
end
def message(subject, message)
_, nick, user, host = */(.*?)!(.*?)@(.*?)/.match(message.prefix)
line = '%s %s' % [nick, message.params.join(" ")]
@o.call(line)
end
def downed(subject, message)
super
end
end
o = Ircv.new("druby://localhost:9876", "ircv", "ircv", "ircv", "password")
c = RICE::Connection.new('irc-gateway-host', 6667)
c.add_observer(o)
begin
c.start
rescue RICE::Connection::Closed
puts 'closed'
sleep 30
retry
endてきとー
そういえば折り返しができてないや
実装してみたけど読みにくかった
やっぱちゃんと消えるようにしたいなぁ。じゃまだよなぁ。ねむい。
10秒たったらフェイドアウトするようにしてみた。
しかしちゃんと本家 Ircv の挙動確認しよう……
インターフェイスビルダー使って実装する方法が未だにわからない。Ruby 側へのコネクションってどうやって張るんだろう。
http://lab.lowreal.net/trac/browser/c/mac/iicv.rb
いろいろ変えた。DRb のフロントオブジェクトである proc は write メソッド共通にしたので
class OutIO < IO
def initialize(write_proc)
@proc = write_proc
end
def write(arg)
@proc.call(arg)
end
end
$stdout = OutIO.new(DRb.new_with_uri(uri))とかもできるはず。あとステータスアイテムを出すようにしたりとか、いろいろ変更した。
DRb クライアント側も
require 'drb/drb'
require "rice/irc"
require "rice/observer"
class Ircv < RICE::SimpleClient
def initialize(uri, nick, user, username, pass, *channels)
super(nick, user, username, pass, *channels)
@o = DRbObject.new_with_uri(uri)
end
def uped(subject, message)
super
end
def message(subject, message)
_, nick, user, host = */(.*?)!(.*?)@(.*?)/.match(message.prefix)
case message
when RICE::Command::PRIVMSG
line = "%s %s %s¥n" % [message.params[0], nick, message.params[1]]
@o.call(line)
when RICE::Command::NOTICE
line = "%s %s %s¥n" % [message.params[0], nick, message.params[1]]
@o.call(line)
else
type = "#{message.class.to_s.sub(/^.*::/o, '').downcase}"
line = "%s %s %s¥n" % [type, nick, message.params.join(' ')]
@o.call(line)
end
end
def downed(subject, message)
super
end
end
o = Ircv.new("druby://localhost:9876", "ircv", "ircv", "ircv", "password")
c = RICE::Connection.new('host', 6667)
c.add_observer(o)
begin
c.start
rescue RICE::Connection::Closed
puts 'closed'
sleep 30
retry
endみたいしてちょっと読みやすいようにした。
なんかときどき唐突に消えちゃうんだよなぁ。なんでだかわからない。fadein fadeout のコードをコメントアウトしてもなるからそのへんではないし……
数時間かかってわかった…… str.split(//) だけでは文字単位の分割にならないんだ。だから不正な文字がまざって Cocoa 側でエラーになる。
$KCODE を設定するか、正規表現にフラグたてないとだめか。ハマりすぎた。split(//u) にして完了