Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Does OS X provide an easy way to bind key combinations to commands which are typically run on the command line?

For example, is there some way to assign ⌘ Cmd+L as a global shortcut for /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine?

share|improve this question

3 Answers 3

up vote 13 down vote accepted

Yes, you can do this with Applescript or Automator.

The way I've done things like this is to use Automator to create a Service that is available in all applications. A service can be made to run a bash/zsh/ruby/whatever script. Then you can bind a key combination to the service in the Keyboard pane of system preferences.

Near the end of this MacBreak podcast this procedure is shown in detail.

Edit: I just noticed you're not using Snow Leopard. I don't think creating a system-wide service is as easy with 10.5.8. I guess you can't upgrade since it's a Powerbook. You might want to look into FastScripts which allows you to assign keyboard shortcuts to applescripts (free to use for up to 10 keyboard shortcuts) and use the following Applescript:

do shell script "/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine"
share|improve this answer

I currently use FastScripts. It includes all scripts in ~/Library/Scripts/, so you don't have to add scripts manually. It also supports application-specific scripts, and it has a few features that are useful with AppleScripts, like it stops a script before a keystroke or key code command until modifier keys are released.

If you have bought the Powerpack for Alfred 2, you can create workflows like this:

Hotkeys have a short delay by default, but you can reduce it by changing the trigger behavior:

KeyRemap4MacBook also supports running shell scripts:

<?xml version="1.0"?>
<root>
  <vkopenurldef>
    <name>KeyCode::VK_OPEN_URL_SHELL_say_a</name>
    <url type="shell">say a</url>
  </vkopenurldef>
  <item>
    <name>test</name>
    <identifier>test</identifier>
    <autogen>__KeyToKey__ KeyCode::A, KeyCode::VK_OPEN_URL_SHELL_say_a</autogen>
  </item>
</root>

Other applications that support assigning shortcuts to scripts:

Another option is to create an Automator service:

  1. Open Automator and choose the Service template.
  2. Check that the input type and application scope are correct, or change "selected text" to "no input" if the service does not receive any input.
  3. Add a Run Shell Script or Run AppleScript action for the script.
  4. Save the service and give it a shortcut from System Preferences.

There has been a bug since 10.7 where the shortcuts for services don't always work until you hover over the services menu from the menu bar. Shortcuts for services don't work when an application that doesn't have a services menu (like Tower) is frontmost. There is also a noticeable delay before services are run.

share|improve this answer
    
Impressive list of tools. –  Daniel Beck Mar 31 '11 at 16:57
    
open -a ScreenSaverEngine is even a tad shorter. –  koiyu Apr 13 '11 at 20:13
    
+1 for the heads-up about the delay bug. –  MarkHu Mar 8 '13 at 19:16

If you are using BetterTouchTool you can assign a shortcut to shell command by selecting a following action: Controlling Other Applications > Execute Terminal Command

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.