電話帳編集ソフトを買えば何とかなる部分だけど、いちいちケーブル繋ぐのはなんだかねぇ。 せっかくBlueToothがあるのに。というわけでいろいろ試してみると、Leopardで追加された機能を使って何かできそう。
まずは携帯→Mac。このスクリプトを動かしておくと、携帯から電話帳データをMacに送信すると、余計なフィールドを削除してアドレスブックに追加(マージ)。vcfファイルをアドレスブックに放り込んでいるだけだけど。
このスクリプトは、各人の責任においてご自由にお使いください。使用した際に発生したいかなる問題にも、作者はいっさいの責任を負いません。
#!/usr/bin/ruby
# $Id:$
require 'osx/foundation'
OSX.require_framework '/System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework'
include OSX
path = ENV["HOME"] +"/Downloads/telecom"
bt2pb = path + "/pb.vcf"
File.delete(bt2pb) if File.exist?(bt2pb)
def fbt2pb(filename)
tmpfile = File.dirname(filename)+"/pb.tmp.vcf"
File.open(tmpfile, 'w') do |fw|
File.open(filename, 'r') do |fr|
fr.each_line do |line|
fw.puts line if !((/:.$/ =~ line) || (/X-(GNO|SH-.*):/ =~ line))
end
end
end
system("open #{tmpfile}")
end
# Watch directory and call functions
fsevents_cb = proc do |stream, ctx, numEvents, paths, marks, eventIDs|
paths.regard_as('*')
numEvents.times do |n|
# launch event handler
if File.exist?(bt2pb) then
fbt2pb(bt2pb)
File.delete(bt2pb)
end
end
end
stream = FSEventStreamCreate(
KCFAllocatorDefault,
fsevents_cb,
nil,
[path],
KFSEventStreamEventIdSinceNow,
1.0,
0)
$stderr.puts "Faild to create watch event" unless stream
FSEventStreamScheduleWithRunLoop(
stream,
CFRunLoopGetCurrent(),
KCFRunLoopDefaultMode)
ok = FSEventStreamStart(stream)
$stderr.puts "Failed to add event loop" unless ok
begin
CFRunLoopRun()
rescue Interrupt
FSEventStreamStop(stream)
FSEventStreamInvalidate(stream)
FSEventStreamRelease(stream)
end
Mac→携帯はBlueToothのファイル送信機能を使いたいのだけど、どうすればいいかな?