現在のスペースに新しいターミナルウィンドウを開くApplescript


14

はい、私はApple Scriptを使った初心者の経験がひどいです。

現在のデスクトップスペースで新しいターミナルウィンドウを開く必要があります。ターミナルを実行している別のスペースに私を移動してから、別のターミナルウィンドウを開きません。

もちろん、ターミナルが実行されていない場合は、新しいターミナルプロセスを開始する必要があります。

回答:


18
tell application "Terminal"  
    do script " "  
    activate  
end tell

奇妙に思えますが、Terminalが着信 "do script"コマンドを処理する方法の奇妙さを利用しています。各ウィンドウに新しいウィンドウが作成されます。必要に応じて、実際に有用なものに置き換えることができます。新しいウィンドウを開いた直後に、必要なものを実行します。


1
これは機能しますが、OSXは、ターミナルウィンドウを開いているスペースにスペースを自動的に移動します。システム環境設定でその機能を無効にすると、修正されますが、他のすべてのアプリケーションは、そのアプリケーションのウィンドウが開いているスペースに移動できなくなりました。私は、ウィンドウが表示されないことを見つけるためだけにアプリを起動するのが嫌いです。上部のメニューバーだけが、アプリケーションにフォーカスがあることを示しています。とても奇妙です。
-Chev

15

doスクリプト ""の間にテキストがない場合は、ターミナルに余分なコマンドプロンプトは表示されません。

tell application "Terminal"  
    do script ""  
    activate  
end tell

1
回答として残しても問題ありません。代わりに@jfmの回答を編集して、さらに改善し、自分のものを削除することもできます。
slhck

8

私はそれをする3つの異なる方法を考えることができます(最初の2つはどこかから盗まれましたが、どこで忘れましたか)。毎回新しいウィンドウを開きたいので、それが最短だったので、私はapplescriptからシェルスクリプトを呼び出す3番目のものを使用します。

少なくとも10.10以降にOS Xに組み込まれたスクリプトとは異なり、これらはすべて、ファインダウィンドウの現在の作業ディレクトリであるディレクトリでターミナルを開きます(つまり、開くためにフォルダを選択する必要はありません)。

Finder>ターミナル> Finderサークルを完了するためのbash関数もいくつか含まれています。

1.既存のタブを再利用するか、新しいターミナルウィンドウを作成します。

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if (exists window 1) and not busy of window 1 then
        do script "cd " & quoted form of myDir in window 1
    else
        do script "cd " & quoted form of myDir
    end if
    activate
end tell

2.既存のタブを再利用するか、新しいターミナルタブを作成します。

tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
    if not (exists window 1) then reopen
        activate
    if busy of window 1 then
        tell application "System Events" to keystroke "t" using command down
    end if
    do script "cd " & quoted form of myDir in window 1
end tell

3.毎回applescriptから呼び出されるシェルスクリプトを介して新しいウィンドウを生成します

tell application "Finder"
    set myDir to POSIX path of (insertion location as alias)
    do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell

4.(ボーナス)ターミナルの現在の作業ディレクトリの新しいファインダーウィンドウを開くためのBashエイリアス

このエイリアスを.bash_profileに追加します。

alias f='open -a Finder ./' 

5.(ボーナス)ターミナルウィンドウのディレクトリをフロントFinderウィンドウのパスに変更します

この関数を.bash_profileに追加します。

cdf() {
      target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
        if [ "$target" != "" ]; then
            cd "$target"; pwd
        else
            echo 'No Finder window found' >&2
        fi
}

0

上記の回答は、ターミナルがすでに実行されている場合にのみ機能します。理由の一つ-それ以外の場合は、一度に2つのターミナルウィンドウを開き、do scriptとの理由1 activate

単純なif ... elseでこれを防ぐことができます:

if application "Terminal" is running then
    tell application "Terminal"
        do script ""
        activate
    end tell
else
    tell application "Terminal"
        activate
    end tell
end if

ボーナス:

コマンドを直接実行したい場合は、キーストロークを介してこれを行うことができます(あまりエレガントではありません-知っています!しかし動作します)

[...]
else
    tell application "Terminal"
        activate
        tell application "System Events" to keystroke "ls -la" 
        tell application "System Events" to key code 36
    end tell
end if
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.