Возможно ли получить каталог конкретного окна nautilus в скрипте? - PullRequest
0 голосов
/ 27 июня 2018

Я хотел бы создать скрипт 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 windows.

Вот код неполного решения, которое я только что описал:

    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?

1 Ответ

0 голосов
/ 21 января 2019

Используя предложение @ 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. Вы должны на самом деле куда-то ориентироваться. Другими словами, если в строке заголовка указано «Домашняя страница», вы находитесь в домашней папке и нигде не перемещались.

...