Я хочу создать .desktop
файл, который откроет папку в моем файловом менеджере по умолчанию в новой вкладке. Чтобы проверить, открылось ли оно в правильном месте, я попытался nautilus ~/*folder*
. Это открывает мой файловый менеджер, но он говорит, что что-то пошло не так. То же самое происходит, когда я использую nautilus /home/*username*/*folder*
. Какую команду я могу использовать, чтобы открыть определенную папку в домашней папке на новой вкладке из файла .desktop
?
Моя цель состоит в том, чтобы на доке (планке) был значок, открывающий карту ~ / Загрузки в новая вкладка в Nautilus.
В результате продолжающегося понимания, ниже улучшенной версии сценария.
Вследствие того, что сценарий теперь вставляет путь вместо того, чтобы ввести его (использование 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
.
Установка (при необходимости) оба wmctrl
и xdotool
:
sudo apt-get install xdotool wmctrl
Скопируйте сценарий ниже в пустой файл, сохраните его как nautilus_tab
(никакое расширение) в ~/bin
, и сделайте это исполняемым файлом.
Если каталог ~/bin
еще не существовал, создал его и работал source ~/.profile
составлять каталог "шоу" в $PATH
. (или альтернативно, зарегистрируйтесь/в),
Тестовый прогон это путем выполнения команды:
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
окно. Если никакое 'окно наутилуса не было открыто, новое окно откроется в Вашем корневом каталоге.
(Эти сайты сводят меня с ума со своими странными требованиями - это должно быть комментарием, но я, 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
не может быть найдена. Необходимо назвать его с явным путем.