tag:kinderman.net,2005:/tag/osxkinderman.net : Tag osx, everything about osxcode code code2007-11-12T18:23:35-08:00Typotag:kinderman.net,2005:Article/1032007-11-11T22:21:32-08:002007-11-12T18:23:35-08:00ryanAppleScript: Reverse screen colors on a Mac and keep a black background in Terminal<p>Sometimes, it's such a hassle to get up and turn on a light when I'm in the middle of coding. Other times, I don't have control over the lighting, like in a dim pub or cafe. In dim lighting, it's a strain on my eyes to be looking at black text on a white background. I've tried dimming the brightness, but that decreases the contrast, which is also a strain on my eyes. Then, I discovered Control+Option+Command+8, which is a keyboard shortcut to the "Reverse black and white" Universal Access feature. Contrary to it's name, it does more than reverse black and white, it reverses all of the colors on the screen. This, however, is acceptable and requires only a slight mental adjustment for me. Now I use a nice black-on-white color scheme in TextMate for coding, and when I'm in dim lighting, I simply reverse the colors and it's white-on-black, still full-contrast. I'm happy, except for one thing.</p>
<p>I often have a number of Terminal windows open when I'm working, and I open and close them frequently. Although I'm happy with a black-on-white color scheme for TextMate, I can't tolerate anything but white-on-black for my normal Terminal windows. So, what happens when I throw the screen colors in reverse is that all of my lovely white-on-black Terminal windows go to black-on-white. Unacceptable! Thus began my first foray into AppleScript.</p>
<p>After referencing <a href="http://lists.apple.com/archives/Cocoa-dev/2006/Jun/msg01433.html">here</a>, <a href="http://www.oreilly.com/catalog/aplscptian/chapter/ch07.html">here</a>, and <a href="http://developer.apple.com/applescript/">here</a>, along with the Terminal "dictionary", I came up with this:</p>
<pre><code>tell application "System Events"
tell application processes
key code 28 using {command down, option down, control down}
end tell
end tell
tell application "Terminal"
if default settings is equal to settings set "White on Black" then
set settingsSet to "Black on White"
else if default settings is equal to settings set "Black on White" then
set settingsSet to "White on Black"
end if
set default settings to settings set settingsSet
repeat with w in every window
set current settings of w to settings set settingsSet
end repeat
end tell
</code></pre>
<p>This script first invokes the Control+Option+Command+8 keyboard shortcut to reverse the screen colors. It then toggles the default "settings set" for Terminal to one of two pre-defined sets I've created: "White on Black" and "Black on White". Hopefully the names are self-explanatory. Then, the script iterates over all currently-open Terminal windows and changes their current "settings set" to whatever the new default is.</p>
<p>Pretty simple. I named the script "Reverse Screen Colors" and dropped it in /Users/[user account]/Library/Scripts. I invoke it via the keyboard with <a href="http://www.blacktree.com/">QuickSilver</a>.</p>