Как открыть каталог Nautilus в текущем Терминале?

Мне не нравится открывать десятки терминалов. Существует ли способ добавить Открытый в текущем Терминале вместо Открытого в Терминале при использовании Наутилуса?

13
задан 3 November 2016 в 18:45

4 ответа

Грязный или нет, решение ниже обработанного отлично за эти 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. Потребности сценария wmctrl, xdotool и xclip:

    sudo apt-get install wmctrl xdotool xclip
    
  2. Скопируйте сценарий в пустой файл, сохраните его как open_in_terminal (никакое расширение) в ~/.local/share/nautilus/scripts. Создайте каталог в случае необходимости. Сделайте исполняемый файл сценария

Именно. Выйдите из системы и въезжайте задним ходом, и Вы будете иметь сценарий в наличии как в изображении (2).

Объяснение

  • Щелкая правой кнопкой по файлу, мы можем получить путь с помощью наутилуса "NAUTILUS_SCRIPT_CURRENT_URI".
  • В сценарии мы можем затем загрузить этот путь к буферу обмена (использование xclip)
  • Впоследствии, сценарий повышает (сначала найденный) gnome-terminal окно и вставки путь, которому предшествуют cd команда. Так как мы использовали echo для загрузки целой строки в буфер обмена Возврат включен.

Примечания

  1. Должно быть ясно, что не должно быть ничего работающего в терминале, и это работает лучше всего, если существует только одно открытое окно терминала. В случае, если существуют несколько, сценарий выбирает самое старое gnome-terminal окно.
  2. Сценарий должен быть протестирован полностью на практике. В то время как я выполнил его, синхронизация не была никакой проблемой даже единственное время, даже когда Рабочий стол должен был "переместиться" через четыре или пять областей просмотра для получения до окна терминала. ЕСЛИ ошибки произошли бы однако, с несколькими строками больше мы могли бы заставить его на самом деле ожидать умным (er) способом к окну терминала, которое будет повышено. Давайте посмотрим то, что происходит. Это не кажется необходимым.
  3. Так как сценарий использует realpath, также связанные каталоги будут работать правильно.

Больше информации о сценариях наутилуса здесь.


С другой стороны, выберите свое собственное окно терминала, если у Вас есть несколько

Если бы Вы хотите смочь выбрать, в котором окне терминала Вы открыли бы ток (наутилус) каталог, использовать сценарий ниже.

Как это работает на практике

  1. Щелкните правой кнопкой по (любому) файлу в каталоге (в этом случае мой рабочий стол) как ниже:

    enter image description here

  2. Нажмите (или повысьте иначе), окно терминала, которое требуется использовать, и оно будет CD к каталогу:

    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)

Установка

Точно похож на первый сценарий.

Объяснение

Сценарий имеет одно различие от первого: вместо того, чтобы автоматически повысить первое найденное окно терминала, это ожидает первого окна терминала, чтобы сфокусироваться. Затем это CD к каталогу в том окне.

13
ответ дан 23 November 2019 в 03:13

Самый простой путь - это:

  1. От наутилуса, нажмите Ctrl + L , это откроет строку поиска для редактирования. Нажмите Ctrl + Переключатель C
  2. к терминалу и типу в cd, пространство, затем Сдвиг + Вставляют (или INS) для вставки пути. Хит Входит .

Никакая потребность в сценариях или дополнительной работе.

8
ответ дан 23 November 2019 в 03:13

По-моему, единственный изящный способ решить это без Фудина вокруг состоит в том, чтобы использовать оконечный мультиплексор как 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
ответ дан 23 November 2019 в 03:13

Я вполне уверен нет никакого способа сделать это, однако у меня есть обходное решение для Вас, которые могли бы помочь.

Можно всегда перетаскивать каталог от Наутилуса в окно терминала, и Наутилус передаст тот каталог и вставит его в командную строку, таким образом, Вы могли сделать cd и затем перетащите папку на терминал и совершите нападки, входят.

8
ответ дан 23 November 2019 в 03:13

Другие вопросы по тегам:

Похожие вопросы: