Можно ли получить каталог конкретного окна nautilus в сценарии?
Я хотел бы создать скрипт Python, который проверяет, открыт ли определенный каталог в nautilus.
Пока лучшее решение, которое у меня есть, это использовать wmctrl -lxp
перечислить все окна, которые дают мне вывод следующим образом:
0x0323d584 0 1006 nautilus.Nautilus namek Downloads
0x0325083a 0 1006 nautilus.Nautilus namek test
0x04400003 0 25536 gvim.Gvim namek yolo_voc.py + (~/code/netharn/netharn/examples) - GVIM4
Затем я проверяю, находится ли базовое имя интересующего меня каталога в имени окна nautilus.Nautilus
окна.
Вот код неполного решения, которое я только что описал:
def is_directory_open(dpath):
import ubelt as ub # pip install me! https://github.com/Erotemic/ubelt
import platform
from os.path import basename
import re
computer_name = platform.node()
dname = basename(dpath)
for line in ub.cmd('wmctrl -lxp')['out'].splitlines():
parts = re.split(' *', line)
if len(parts) > 3 and parts[3] == 'nautilus.Nautilus':
if parts[4] == computer_name:
# FIXME: Might be a False positive!
line_dname = ' '.join(parts[5:])
if line_dname == dname:
return True
# Always correctly returns False
return False
Это может определенно определить, если он не открыт, это только доходит до меня, потому что это может вернуть ложные срабатывания. Если я хочу проверить, если /foo/test
открыто, я не могу сказать, относится ли вторая строка к этому каталогу или какому-либо другому пути, где конечный каталог назван test
, Например, я не могу отличить /foo/test
от /bar/test
,
Есть ли способ сделать то, что я хочу, используя встроенные или устанавливаемые apt-get / pip инструменты в Ubuntu?
0 ответов
Используя предложение @SomeGuyOnAComputer:
Во-первых, получите привязки nautilus python:
$ sudo apt install python-nautilus
Создайте каталог для ваших расширений nautilus python:
$ mkdir -p ~/.local/share/nautilus-python/extensions
Очевидно, nautilus python просто читает расширения, которые находятся в этой папке, и использует их автоматически.
Вот простое расширение, которое помещает файл URI в строку заголовка:
from gi.repository import Nautilus, GObject, Gtk
class ColumnExtension(GObject.GObject, Nautilus.LocationWidgetProvider):
def __init__(self):
pass
def get_widget(self, uri, window):
window.set_title(uri)
Поместите это в "extension.py" и поместите его в созданную выше папку. Перезапустите наутилус. Как в случае уничтожения любых процессов наутилуса и перезапуска их. Простой способ сделать это - просто перезагрузить компьютер.
Это помещает файл URI в строку заголовка, что и является текущим сценарием. Другими словами, вы можете просто продолжать делать то, что вы делали, и теперь у вас будет полный путь.
Обратите внимание, что это не работает при первом запуске Nautilus. Вы должны на самом деле куда-то ориентироваться. Другими словами, если в строке заголовка указано "Домашняя страница", вы находитесь в домашней папке и нигде не перемещались.