web-dev-qa-db-ja.com

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

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

13
Vitor Abella

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

1。

enter image description here

2。

enter image description here

3。

enter image description here

ノーチラススクリプト

#!/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ウィンドウを表示し、pastesをパスします。その前にcdコマンドを付けます。 echoを使用して行全体をクリップボードにロードしたため、 Return 含まれています。

ノート

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

Nautilusスクリプトの詳細 here


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

whichターミナルウィンドウで現在の(nautilus)ディレクトリを開くことを選択できるようにするには、以下のスクリプトを使用します。

実際の仕組み

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

    enter image description here

  2. 使用するターミナルウィンドウをクリック(または別の方法で上げる)すると、ディレクトリに移動します。

    enter image description here

スクリプト

#!/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します

13
Jacob Vlijm

これを行う方法はないと確信していますが、役立つ可能性のある回避策があります。

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

8
Jorge Castro

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

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

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

8

私の意見では、これを回避することなくこれを解決するための唯一のエレガントな方法は、 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が指すもののデフォルトが気に入らない場合)と、エミュレーター内で実行するコマンドのコマンドラインオプションを保持します。

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

1
David Foerster