是否可以在脚本中获取特定鹦鹉螺窗口的目录?



我想构建一个 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

有什么方法可以在 Ubuntu 上使用内置或 apt-get/pip 可安装工具做我想做的事情?

使用 @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 首次启动时,这似乎不起作用。 你必须实际导航到某个地方。 换句话说,如果标题栏显示"主页",则表示您位于主文件夹中,并且尚未导航到任何位置。

相关内容

  • 没有找到相关文章

最新更新