browser.urlbar.autoFill
true にしてみた。ちょっとキモいな。すぐ戻すかも
true にしてみた。ちょっとキモいな。すぐ戻すかも
これやめたいんだけど設定が見つからない……
g Cmd+V Enter ってうつとき、Cmd+Enter ってうってしまってキーワード検索できないのがやだ。
いつのまにか ssh-agent が複数起動していたりするので、たまに killall ssh-agent やったほうがいいみたいだ。ちょっとすると SSHKeyAgent が終了を検知して起動しなおすか聞いてくるのでそれで起動しなおしてあげる。
cpan にあるのかなぁと思ったけどないっぽいのかなぁ。Python::Serialise::Marshal ならあるけど……
ひさしぶりに gerryyyyyyyyyyyyyyy
#!/usr/bin/ruby
require 'rubygems'
require 'scrapi'
require 'time'
links = Scraper.define do
process "a[href]", "urls[]"=>"@href"
result :urls
end.scrape(URI.parse('http://subtech.g.hatena.ne.jp/keyworddiary/gerry'))
links = links.grep(%r[^/.+/¥d{8}$]).map {|link| link.split('/')[1..2]}
links.reverse_each do |username, timestamp|
next unless username == 'cho45'
time = Time.parse(timestamp)
puts %Q|0.0.0.0 - - [#{time.strftime("%d/%b/%Y:00:00:00 +0900")}] "GET /gerry HTTP/1.1" 200 26768 "-" "Gerry"|
end( http://subtech.g.hatena.ne.jp/secondlife/20061024/1161674443 をほぼ完璧にパクっております)
で、Apache 互換のログファイルをつくって、
gerry_to_apachelog.rb > gerry.log visitors gerry.log > gerry.html
すれば完成! 曜日ごとの gerry 率がわかって楽しい。
メニューバーの右のほうのアイコンとかのことをステータスアイテムというらしい。Windows でいうところのタスクトレイ?
require 'osx/cocoa'
include OSX
class Test < NSObject
def applicationDidFinishLaunching(aNotification)
menu = NSMenu.alloc.initWithTitle "TEST"
menu.setDelegate self
menu.setAutoenablesItems false
item = menu.addItemWithTitle "TEST", :action, "menuclicked_", :keyEquivalent, ""
item.setEnabled true
# new image and resize
img = NSWorkspace.sharedWorkspace.iconForFileType "unknown"
size = NSSize.new
size.width = 16
size.height = 16
img.setSize size
# create status item
bar = NSStatusBar.systemStatusBar
item = bar.statusItemWithLength -1
item.setTitle "Test"
item.setToolTip "TESTEST"
item.setImage img
item.setHighlightMode true
item.setMenu menu
end
def menuclicked(sender)
p sender
true
end
end
app = NSApplication.sharedApplication
app.setDelegate(Test.alloc.init)
p app
trap('SIGINT') { exit }
app.runちょーかんたん!!
growlremote で飛んで来たやつに URL があったらメニューに追加していくのを作ろうと思ったんだけど、どうも DRb と app.run を組み合わせると BUS Error で落ちる。
delegate 版の growlremote も不定期に落ちるのでどうしよもないなぁ(Growl.rb に依存しているほう使ってる)。うーん

http://lab.lowreal.net/trac/browser/c/mac/openmenu.rb
仕方ないのでプロセス分離した。なのでこれは単にあるディレクトリ以下のファイルを見てメニューを作り、クリックするとそのファイルを開くというだけのもの。
ただし古いファイルは表示せず、無言でファイルを削除する。こわいね!
でもって
./growlserver.rb -c ~/openmenu
で growlremote を起動しておくと webloc を作りまくるのでいい感じ
ポイントは、setMenu で直接メニューを表示させないで、アイテムのクリックを拾ってから popUpStatusItemMenu でメニューを表示させるところかしら。こうするとメニューを表示するまえに処理を挟めるので動的にメニューを表示させられる。AirMac のメニューみたいな。
--- /Volumes/Creammonkey/Source/CMController.m 2006-07-05 23:28:50.000000000 +0900
+++ CMController.m 2006-11-03 02:49:19.000000000 +0900
@@ -8,6 +8,13 @@
#import "CMUserScript.h"
@implementation CMController
++ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector { return NO; }
+- (NSString*) helloHackWebkit:(NSString*) arg
+{
+ return [@"Hello" stringByAppendingString: arg];
+}
+
+
- (NSArray*) scripts
{
return scripts_;
@@ -233,12 +240,18 @@
[webView stringByEvaluatingJavaScriptFromString: @"document.body.__creammonkeyed__ = true;"];
}
+ if (isDebug) [self reloadUserScripts: nil];
+
+ WebScriptObject* scriptObject= [webView windowScriptObject];
+ [scriptObject setValue:self forKey:@"__creammonkey_obj"];
+
// Eval!
NSArray* ary = [self matchedScripts: url];
int i;
for (i = 0; i < [ary count]; i++) {
[webView stringByEvaluatingJavaScriptFromString: [ary objectAtIndex: i]];
}
+ [scriptObject setValue:nil forKey:@"__creammonkey_obj"];
}
#pragma mark Action
@@ -252,6 +265,13 @@
[self saveScriptsConfig];
}
+- (IBAction) toggleDebug: (id) sender
+{
+ isDebug = !isDebug;
+ [sender setState: isDebug ? NSOnState : NSOffState];
+
+}
+
- (IBAction) uninstallSelected: (id) sender
{
CMUserScript* script = [[scriptsController selectedObjects] objectAtIndex: 0];
@@ -305,6 +325,8 @@
scripts_ = nil;
targetPages_ = [[NSMutableSet alloc] init];
+ isDebug = FALSE;
+
[NSBundle loadNibNamed: @"Menu.nib" owner: self];
return self;
Objctive-C 側のメソッドを JS 側からよんでみる。うえのように書き換えた上で
alert(__creammonkey_obj.helloHackWebkit_("test"));とかやると Hello test が alert される。
GM_xmlhttprequest を作りたくてどうやるか調べ途中。うえの書き換えだと、eval 後に使ったやつは nil をセットしているけど、これでちゃんと消えてくれるのか (サイト側からそれにアクセスできないのか) が気になる。試せよって感じだけど……
あと上のはファイル分けたりするのがめんどうくさいから self を渡しているけど、専用のクラス/インスタンスを作ってそれを渡すべき。例えば __creammonkey_obj.orderFrontAboutPanel_() とかやると確実に落ちる。
Objctive-C と JS とのデータのやりとりはてきとうにやってくれるっぽい。デフォルトのメソッド名変換は Ruby/Cocoa の正式名と同じ感じ。