現在のターミナルでNautilusディレクトリを開く方法は?


13

数十のターミナルを開くのは好きではありません。Nautilusを使用するときに、ターミナル開くのではなく、現在のターミナルで開くを追加する方法はありますか?


私が想像できる限り、汚い解決策だけ。あなたが...それと罰金であれば私は1つを与えることができます
ヤコブVlijmに

回答:


13

汚れているかどうかにかかわらず、以下のソリューションは頻繁にテストした30分で完全に機能しました。このソリューションは、ディレクトリ内のファイル(任意)を右クリックできる限り機能します。

1。

ここに画像の説明を入力してください

2。

ここに画像の説明を入力してください

3。

ここに画像の説明を入力してください

ノーチラススクリプト

#!/usr/bin/env python3
import subprocess
import os
import time

def replace(path):
    for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
              ("file://", ""), ("%20", " ")]:
        path = path.replace(c[0], c[1])
    return path

def get(command):
    try:
        return subprocess.check_output(command).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

t = get(["pgrep", "gnome-terminal"])
if t:
    w = [l.split()[0] for l in get(["wmctrl", "-lp"]).splitlines() if t in l][0]
    # get the current path
    current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
    dr = os.path.realpath(current)
    # raise the found terminal window
    subprocess.call(["wmctrl", "-ia", w])
    time.sleep(0.3)
    # copy the cd command to clipboard
    c1 = "printf 'cd ' | xclip -in -selection c"
    c2 = 'echo "'+"'"+dr+"'"+'"  | xclip -in -selection c'
    # paste & run it
    for c in [c1, c2]:
        subprocess.call(["/bin/bash", "-c", c])
        subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
        time.sleep(0.05)

使い方

  1. スクリプトにはwmctrlxdotoolおよびxclip が必要です。

    sudo apt-get install wmctrl xdotool xclip
    
  2. スクリプトを空のファイルにコピーし、open_in_terminal(拡張子なし)として保存し~/.local/share/nautilus/scriptsます。必要に応じてディレクトリを作成します。スクリプトを実行可能にする

それでおしまい。ログアウトしてから再度ログインすると、画像のようにスクリプトが利用可能になります(2)。

説明

  • ファイルを右クリックすると、nautilus 'を使用してパスを取得できます"NAUTILUS_SCRIPT_CURRENT_URI"
  • スクリプトで、このパスをクリップボードにロードできます(を使用xclip
  • その後、スクリプトは(最初に見つかった)gnome-terminalウィンドウを表示し、コマンドの前にパスを貼り付けますcd。以前echoは行全体をクリップボードにロードしていたため、Return含まれています。

ノート

  1. ターミナルで何も実行してはならないことは明らかであり、ターミナルウィンドウが1つしか開いていない場合に最適です。複数ある場合、スクリプトは最も古いgnome-terminalウィンドウを選択します。
  2. スクリプトは実際に徹底的にテストする必要があります。私がそれを実行している間、タイミングは一度でも問題ではなく、デスクトップがターミナルウィンドウに到達するために4つまたは5つのビューポートを「移動」しなければならなかったときでさえありませんでした。IFエラーが数行で、しかし起こるであろう多くの我々はそれが実際に作ることができます待つターミナルウィンドウを高くするために、スマート(ER)のように。しばらく様子を見てみましょう。必要ないと思われます。
  3. スクリプトはrealpathを使用するため、リンクされたディレクトリも正しく機能します。

nautilusスクリプトの詳細については、こちらをご覧ください


または、複数ある場合は、独自のターミナルウィンドウを選択します

あなたはに選択できるようにしたい場合はどのあなたは、現在の(オウムガイ)ディレクトリを開き、以下のスクリプトを使用するターミナルウィンドウ。

実際の仕組み

  1. 次のようなディレクトリ(この場合はデスクトップ)内の(任意の)ファイルを右クリックします。

    ここに画像の説明を入力してください

  2. 使用したいターミナルウィンドウをクリック(またはレイズ)すると、ディレクトリに移動します:

    ここに画像の説明を入力してください

スクリプト

#!/usr/bin/env python3
import subprocess
import os
import time

def replace(path):
    for c in [("%23", "#"), ("%5D", "]"), ("%5E", "^"),
              ("file://", ""), ("%20", " ")]:
        path = path.replace(c[0], c[1])
    return path

def get(command):
    try:
        return subprocess.check_output(command).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        pass

# check if gnome-terminal runs
pid = get(["pgrep", "gnome-terminal"])

if pid:
    t = 0
    while t < 30:
        # see if the frontmost window is a terminam window
        active = get(["xdotool", "getactivewindow"])
        if pid in get(["xprop", "-id", active]):       
            # get the current path
            current = replace(os.getenv("NAUTILUS_SCRIPT_CURRENT_URI"))
            dr = os.path.realpath(current)
            # copy the cd command to clipboard
            c1 = "printf 'cd ' | xclip -in -selection c"
            c2 = 'echo "'+"'"+dr+"'"+'"  | xclip -in -selection c'
            # paste & run it
            for c in [c1, c2]:
                subprocess.call(["/bin/bash", "-c", c])
                subprocess.call(["xdotool", "key", "Control_L+Shift+v"])
                time.sleep(0.05)
            break
        else:
            t += 1
            time.sleep(0.5)

セットアップ

最初のスクリプトとまったく同じです。

説明

このスクリプトには、最初のスクリプトとは1つの違いがあります。最初に見つかったターミナルウィンドウを自動的に上げるのではなく、最初のターミナルウィンドウがフォーカスされるまで待機します。次に、そのウィンドウ内のディレクトリにcdします。


とにかくスクリプトを起動するためにファイルを使用しているため、sys.argv [1]パスからファイル名を削除するだけです。スクリプトがはるかに短くなります
Sergiy Kolodyazhnyy

1
ディレクトリの作成後にメニューが表示されます@TonyLancer ~/.local/share/nautilus/scripts:)でログアウトとバック
ヤコブVlijmを

1
@Bennyはnautilusの右クリックからのみ機能します。
ジェイコブVlijm

1
@Bennyスクリプトの環境は、親プロセスから継承されます。この場合、Nautilusはスクリプトの親プロセスであり、スクリプトの環境を設定します。pythonインタープリターまたはスクリプトから同じことを行おうとしている場合、異なる親プロセスがあります。そのため、そのNoneような変数がないため(Nautilusの外部)に戻ります。
セルギーコロディアズニー

1
@jacobVlijmすごいね 完全に動作しています!これで、2番目のスクリプトがどのように機能するかがわかりました。トリガーについては正しいです。これは、ubuntuコミュニティにとって本当に素晴らしいガジェットです。もちろん、スクリプトについては多くの改善点を考えることができますが、これは仕事をします。回答の中で、2番目のスクリプトはAltタブで機能することを伝えてください。
ビトーアベラ

8

これを行う方法はないと確信していますが、あなたのための回避策があります。

いつでもディレクトリをNautilusからターミナルウィンドウにドラッグアンドドロップできます。Nautilusはそのディレクトリを渡してコマンドラインに貼り付けるためcd、フォルダをターミナルにドラッグしてEnter キーを押します。


8

最も簡単な方法はこれです:

  1. nautilusからCtrl+を押すLと、編集のためにアドレスバーが開きます。Ctrl+を押すC
  2. ターミナルに切り替えてcd、スペースを入力し、次にShift+ Insert (or INS)を入力してパスを貼り付けます。ヒットEnter

スクリプトや追加の作業は必要ありません。


Ctrl + Shift + Vを使用してパスを貼り付けます。
カツ

1
うん、それは別の方法です。Linuxには実際には2つのクリップボードがあるので、Ctrl + Shift + Vはプライマリ用、Shift + Insertはセカンダリ用ですが、2番目のクリップボードには2つのキーしか必要ないため、ほとんど使用します。ものは二次クリップボードに入っています-あなたが何か強調表示しない限り、彼らは、共有している
Sergiy Kolodyazhnyy

1

私の意見では、これを回避することなくこれを解決する唯一のエレガントな方法は、次のようなターミナルマルチプレクサを使用することです tmuxのて、ファイルマネージャを持っていることです

  • 既存のセッション内で新しいターミナルウィンドウを開く、または
  • 新しいtmuxセッションで新しいターミナルエミュレータを起動します。

次のシェルスクリプトは、まさにそれを実現します。

#!/bin/sh
set -e
TMUX=tmux
#TERMINAL_EMULATOR='gnome-terminal -x'

cd "$1"
if $TMUX has-session; then
  exec $TMUX new-window
else
  exec ${TERMINAL_EMULATOR:-x-terminal-emulator -x} $TMUX
fi

TERMINAL_EMULATOR新しいターミナルウィンドウに必要なターミナルエミュレータを保持します(x-terminal-emulatorポイントのデフォルトが気に入らない場合)。さらに、エミュレータ内で実行するコマンドのコマンドラインオプションを保持します。

ファイルマネージャで他のファイルタイプの関連付けと同様に、ファイルハンドラスクリプトを登録できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.