views:

157

answers:

2

How would I go about setting all .rb files or all .py files to open in emacs if I double-click them; say, from the desktop?

I'm on OS X 10.6.2.

I have the script:

on open of finderObjects
    repeat with currFile in finderObjects
        set unixPath to POSIX path of currFile

        set base to do shell script "dirname " & unixPath
        set fname to do shell script "basename " & unixPath
        do shell script "cd '" & base & "';" & " emacs  " & fname

    end repeat
end open

But if I drag a file (text.py - just prints a line) on it, I get: emacs: standard input is not a tty

And I'm unsure of how to solve this.

Thanks!

EDIT: Solved with link: http://www.macosxhints.com/article.php?story=20031027142625782

set filecount to 0

on open filelist
    repeat with i in filelist
        set filecount to 1
        tell application "Terminal"
            set filename to do shell script ¬
                "perl -e \"print quotemeta ('" & POSIX path of i & "');\""
            do script "emacs " & filename & "; exit"
        end tell
    end repeat
end open

if filecount < 1 then
    tell application "Terminal"
        do script "emacs; exit"
    end tell
end if
+3  A: 

For each type, select a file in the Finder, choose Get Info from the File menu. In the Info window that opens, under the Open with section, choose the emacs app you are using (and it must be an app version), and then press Change All.. .

If you are using the traditional curses emacs from the command line, you could build a small AppleScript app in the ScriptEditor or Automator action that would receive the files from the finder and open emacs with them. Then use Get Info to associate the app with .rb and .py files.

EDIT: See this recent answer for one way to create an AppleScript launcher app: just modify the shell command to call emacs instead.

FURTHER EDIT: Your script is almost there but you need to run the script under Terminal.app. Try modifying it like so:

        launch application "Terminal"
        tell application "Terminal"
            do script "cd '" & base & "';" & " emacs  " & fname
        end tell
Ned Deily
The issue here is I'm using the Terminal – if it were that simple, I'd have done it!
Isaac Hodes
@Isaac Copper. In your question you mentioned clicking on a file to open it. How are you doing this in the terminal?
chollida
As I said in the question - I am double-clicking from the desktop.
Isaac Hodes
@Isaac: I've added a link to a recent SO answer that shows what you need to do.
Ned Deily
It almost works! I'll edit my question to show the issue.
Isaac Hodes
@Isaac: A further edit to show running the script via Terminal.app.
Ned Deily
Ah, I see you found it!
Ned Deily
+1  A: 

I'm not an OS X expert, but if emacs there is like it is on Unix and Windows it should have an emacsclient utility for feeding new files into an already running emacs session.

This previous SO question has some details on how to do this on a multitty setup. Perhaps some of that is applicable?

T.E.D.