Что такое команда для открытия определенного каталога в новой вкладке в nautilus?

Я хочу создать .desktop файл, который откроет папку в моем файловом менеджере по умолчанию в новой вкладке. Чтобы проверить, открылось ли оно в правильном месте, я попытался nautilus ~/*folder*. Это открывает мой файловый менеджер, но он говорит, что что-то пошло не так. То же самое происходит, когда я использую nautilus /home/*username*/*folder*. Какую команду я могу использовать, чтобы открыть определенную папку в домашней папке на новой вкладке из файла .desktop?

Моя цель состоит в том, чтобы на доке (планке) был значок, открывающий карту ~ / Загрузки в новая вкладка в Nautilus.

1
задан 27 March 2016 в 17:24

2 ответа

Править:

В результате продолжающегося понимания, ниже улучшенной версии сценария.

Вследствие того, что сценарий теперь вставляет путь вместо того, чтобы ввести его (использование xdotool), сценарий более надежен. Хотя сценарий не на самом деле быстрее (полагайте, что это - работа вокруг, из-за отсутствия наутилуса cli опций), сценарий "чувствует себя" более "хрустящим". Факт остается однако, что сценарий просто должен ожидать GUI для чтения к каждому следующему шагу, так как он моделирует пользовательские действия. Синхронизация в сценарии находится на стороне сохранения; в более быстрых системах, один смог делать некоторую оптимизацию.

Используйте сценарий точно, как объяснено в исходном ответе; этому (все еще) нужны оба wmctrl и xdotool быть установленным. Эта версия, кроме того, rquires xclip:

sudo apt-get install xclip

Новая версия сценария:

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

arg = sys.argv[1:]
arg = arg[0] if arg else ""

def get(cmd):
    return subprocess.check_output(cmd).decode("utf-8").strip()

try:
    pid = get(["pidof", "nautilus"])
except subprocess.CalledProcessError:
    wlist = []    
else:
    wlist = [l for l in get(["wmctrl", "-lp"]).splitlines() if pid in l\
             and "_NET_WM_WINDOW_TYPE_NORMAL" in get(["xprop", "-id", l.split()[0]])]

if wlist:
    w = wlist[-1].split()[0]
    subprocess.call(["wmctrl", "-ia", w])
    subprocess.call(["/bin/bash", "-c", "printf '"+arg+"' | xclip -selection clipboard"])
    subprocess.Popen(["xdotool", "key", "Control_L+t"])
    time.sleep(0.4)
    subprocess.Popen(["xdotool", "key", "Control_L+l"])
    time.sleep(0.2)
    subprocess.call(["xdotool", "key", "Control_L+v"])
    subprocess.Popen(["xdotool", "key", "Return"])

else:
    subprocess.Popen(["nautilus", arg])



Старый ответ:

Наутилус не имеет параметра командной строки для открытия новой вкладки, однако, можно "фальсифицировать" его с помощью сценария, с помощью xdotool и wmctrl.

Как использовать

  1. Установка (при необходимости) оба wmctrl и xdotool:

    sudo apt-get install xdotool wmctrl
    
  2. Скопируйте сценарий ниже в пустой файл, сохраните его как nautilus_tab (никакое расширение) в ~/bin, и сделайте это исполняемым файлом.
    Если каталог ~/bin еще не существовал, создал его и работал source ~/.profile составлять каталог "шоу" в $PATH. (или альтернативно, зарегистрируйтесь/в),

  3. Тестовый прогон это путем выполнения команды:

    nautilus_tab <directory>
    

    Это должно:

    • если никакое окно наутилуса не открыто, откройте новое окно наутилуса в каталоге
    • если окно открыто, откройте новую вкладку в каталоге

Сценарий

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

get = lambda cmd: subprocess.check_output(cmd).decode("utf-8")
def run(cmd):
    subprocess.call(cmd)

try:
    arg = sys.argv[1]
except:
    arg = ""

try:
    pid = get(["pidof", "nautilus"]).strip()
except subprocess.CalledProcessError:
    run(["nautilus ", arg])
else:
    w = [l.split() for l in get(["wmctrl", "-lp"]).splitlines() if pid in l][-1]
    print(w)
    w_id = w[0]   
    if len([l for l in get(["xprop", "-id", w_id]).splitlines() if all(
        ["_NET_WM_WINDOW_TYPE(ATOM)" in l, "_TYPE_NORMAL" in l])]) != 0:
        run(["wmctrl", "-ia", w[0]]); time.sleep(0.1)
        run(["xdotool", "key", "Control_L+t"])
        if arg != "":
            run(["xdotool", "key", "Control_L+l"])
            time.sleep(0.2)
            run(["xdotool", "type", arg])
            time.sleep(0.02*len(arg))
            run(["xdotool", "key", "Return"])
    else:
        run(["nautilus", arg])

Примечания

  • Сценарий является обходным решением, для моделирования пользовательских действий. В результате синхронизация "в" сценарии важна. Я установил синхронизацию на "безопасные" значения в моей системе и сделал ее "умной", если это возможно. Если это не могло бы работать правильно над Вашей системой, оставить комментарий.
  • Сценарий будет возможно тормозить, если целенаправленное окно (для добавления вкладки к) будет на другой рабочей области
  • В случае каталогов с пробелами используйте кавычки:

    nautilus_tab '</directory/with spaces>'
    

Если никакой аргумент (-каталог) не будет использоваться, то сценарий откроет новую вкладку в том же каталоге как в настоящее время открываемый nautilus окно. Если никакое 'окно наутилуса не было открыто, новое окно откроется в Вашем корневом каталоге.

3
ответ дан 27 March 2016 в 17:24

(Эти сайты сводят меня с ума со своими странными требованиями - это должно быть комментарием, но я, don’t имеют достаточно репутации и этот вид ерунды doesn’t, поощряю меня получать его!)

ответ Jacob’s не работает на пути с пробелами в них. Требуется два изменения...

run("nautilus "+arg)
run('nautilus "'+arg+'"')

run("xdotool type "+arg)
run('xdotool type "'+arg+'"')

я выполняю его с Thunar, хотя и это doesn’t интерпретируют ~ хорошо. Например, thunar-tab.py "~/Documents" произведет ошибку, которая /home/user/~/Documents не может быть найдена. Необходимо назвать его с явным путем.

-1
ответ дан 28 March 2016 в 03:24

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

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