Setting the default Browser on OSX with Ruby
06 Jul 2007 22:39 - (0) comments
To combat my ADD I want to seperate my work and private browsing. So having two seperate workspaces sounds like a good idea.
I tried Virtue Desktop (and all the other ones) but they were useless to me, because all the virtual desktops show all running applications when switching application with Command+tab. I only want to see the ones in my current desktop.
Creating another user account isn't an option either because I want to access my mail for both work and private use.
So I need a browser switcher I can run from the commandline so I can schedule it with crontab.
The Objective C part
For the Objecive C part I create a SwitchBrowser directory.
In it I create a file called ~/SwitchBrowser/SwitchBrowser.h:
#import
@interface SwitchBrowser : NSObject
{}
- (CFArrayRef) browsers;
- (void)setDefaultBrowser: (CFStringRef) newDefaultStr;
@end
... and a file called ~/SwitchBrowser/SwitchBrowser.m:
(Copied from Giant Mike's FavBrowse)
#import "SwitchBrowser.h"
@implementation SwitchBrowser
- (CFArrayRef) browsers {
return LSCopyAllHandlersForURLScheme(CFSTR("https"));
}- (void)setDefaultBrowser: (CFStringRef) newDefaultStr
{//Set the launch services settings for https:// and http://
LSSetDefaultHandlerForURLScheme(CFSTR("https"), newDefaultStr);
LSSetDefaultHandlerForURLScheme(CFSTR("http"), newDefaultStr);//Set the launch services setting for web sites discovered via Bonjour
LSSetDefaultRoleHandlerForContentType(CFSTR("public.html"), kLSRolesAll, newDefaultStr);FSRef newDefaultBrowserFSRef;
LSFindApplicationForInfo(kLSUnknownCreator, newDefaultStr, NULL, &newDefaultBrowserFSRef, NULL);
_LSSetWeakBindingForType(kLSUnknownType, kLSUnknownCreator, CFSTR("xhtm"), kLSRolesAll, &newDefaultBrowserFSRef);
}@end
void Init_switch_browser(){}
In the SwitchBrowser directory everything is compiled with the following command:
gcc -o switch_browser.bundle -bundle -framework Foundation -framework ApplicationServices -framework AppKit SwitchBrowser.m
The RubyCocoa Part
I use RubyCocoa for the scripting part.
After installing it, create a file called ~/switch_browser.rb:
#!/usr/bin/env ruby
require 'osx/cocoa'
require File.dirname(__FILE__) + '/SwitchBrowser/switch_browser'new_browser = $*[0]
OSX.ns_import :SwitchBrowser
switcher = OSX::SwitchBrowser.alloc.init
browsers = switcher.browsers.collect{|b| b }unless new_browser
puts "Select browser number:"
browsers.each_with_index{|b,i| puts "#{i} #{b}"}
new_browser = browsers[gets.chomp!.to_i]
endraise "#{new_browser} is not a valid browser." unless browsers.include? new_browser
switcher.setDefaultBrowser(new_browser)
puts "Switched to " + new_browser
Now you can do:
~/switch_browser.rb org.mozilla.firefox
I've added this to my crontab together with quiting my work applications on the end of my workday.
It's been a real improvement!
Comments
No comments allowed.