Gedit
显示最近打开的文件。
我如何才能gedit
不仅显示文件名,还显示最近打开的文件的文件路径?
我工作的网站index.tcl / index.adb
在很多地方都有。所以我有例如 3 个时间index.tcl
。但我想知道哪一个。
答案1
最干净的解决方案当然是编辑 的代码gedit
。由于这似乎遥不可及,下面的解决方案是一种解决方法。
如果最近使用的 gedit 文件的路径信息对您来说很重要,则可以使用该解决方案来替代 gedit 自己的“最近使用”概览。它为您提供最近gedit
使用的十个文件的信息,就像窗口标题栏上显示的一样。
它存在:
- 一个(非常轻量的)后台脚本,用于跟踪可能打开的
gedit
文件 - 用于调用最近使用的文件列表的脚本。
[1]
只需在后台运行脚本,将脚本放在[2]
快捷键下或将其作为快捷方式添加到gedit
启动器的快速列表中。
结果:
如何设置
wmctrl
需要安装以下设置:
sudo apt-get wmctrl
然后:
将以下脚本 (
[1]
) 复制到一个空文件中,并将其另存为get_latestgedit.py
#!/usr/bin/env python3 import subprocess import os import time import socket f = os.environ["HOME"]+"/.latest_gedit.txt" n = 10 def get(): try: pid = subprocess.check_output(["pidof", "gedit"]).decode("utf-8").strip() gedit_w =subprocess.check_output(["wmctrl", "-lp"]).decode("utf-8") matches = [l.split(socket.gethostname())[1] for l in gedit_w.splitlines() if all( [pid in l, "~" in l or "/" in l])] return matches except: return [] gedit_windows1 = get() try: latest = open(f).read().splitlines() except FileNotFoundError: latest = [] while True: time.sleep(5) gedit_windows2 = get() new = [w for w in gedit_windows2 if not w in gedit_windows1] if len(new) != 0: for w in [w for w in gedit_windows2 if not w in gedit_windows1]: try: latest.remove(w) except ValueError: pass latest.append(w) if len(latest) > n: latest = latest[(len(latest) - n):] with open(f, "wt") as out: for item in latest: out.write(item+"\n") gedit_windows1 = gedit_windows2
将以下脚本复制到一个空文件中,并将其保存为
get_geditlist.py
:#!/usr/bin/env python3 import subprocess import os import sys f = os.environ["HOME"]+"/.latest_gedit.txt" try: ws = open(f).read().splitlines()[::-1] except FileNotFoundError: open(f, "wt").write("") try: cmd = 'zenity --list --title="Choose"'+ \ ' --text ""'+ \ ' --column="Latest opened" '+\ (" ").join(['"'+s.strip()+'"' for s in ws]) to_open = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").split("|")[0] path = to_open[to_open.find("(")+1: to_open.find(")")].strip()+"/"+to_open[:to_open.find("(")].strip() sections = [s for s in (path.split("/"))] for i, it in enumerate(sections): if it.count(" ") != 0: sections[i] = '"'+it+'"' path = ("/").join(sections) command = "gedit "+path subprocess.Popen(["/bin/bash", "-c", command]) except subprocess.CalledProcessError: pass
[1]
打开终端窗口,使用以下命令测试脚本:python3 /path/to/get_latestgedit.py
在脚本运行时,打开一些现有
gedit
文件,让它们保持打开状态至少 5-10 秒(循环中断时间)。现在[2]
使用以下命令(从另一个终端)测试运行脚本:python3 /path/to/get_geditlist.py
最新的
gedit
文件应该会显示出来,如图所示。如果一切正常,请将脚本添加
[1]
到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:python3 /path/to/get_latestgedit.py
并
[2]
为快捷键添加脚本:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。点击“+”并添加命令:/bin/bash -c "sleep 10&&python3 /path/to/get_geditlist.py"
或者,
将其作为快速列表项添加到
gedit
启动器,如图所示:gedit
从/usr/share/applications to
~/.local/share/applications复制启动器:cp /usr/share/applications/gedit.desktop ~/.local/share/applications
在以下位置打开本地副本
gedit
:gedit ~/.local/share/applications/gedit.desktop
寻找以下行:
Actions=Window;Document;
更改为:
Actions=Window;Document;Recently used;
最后,在文件中添加一个部分:
[Desktop Action Recently used] Name=Recently used Exec=python3 /path/to/get_geditlist.py OnlyShowIn=Unity;
当然,替换
python3 /path/to/get_geditlist.py
为脚本的真实路径[2]
解释
脚本[1]
检查(每五秒一次):
- 如果
gedit
窗口已打开,则检查是否pidof gedit
有有效输出。如果是,则: - 它检查 的
gedit
pid 是否出现在 输出中的一行或多行中wmctrl -lp
。如果是,它会过滤掉以下行:不是包含“(”和“)”之间的有效路径,因为这些窗口不是来自已保存文件。 - 剩余的窗口将添加到最近使用的窗口列表中。如果该窗口(文件)已出现在列表中,则其时间顺序位置将更新。此外,当列表长度超过十个(窗口)时,脚本将删除所有(最旧的)窗口。
如果最近使用的窗口列表发生变化,则该列表将被写入home
目录中的隐藏文件。
脚本[2]
读取由 scrip1 创建并更新的隐藏文件[1]
。调用时:
- 该脚本读取隐藏文件中的行,其中包含窗口的标题。
- 从标题来看,小路被解析出来,并且窗口标题出现在
Zenity
列表中。 - 如果用户从列表中选择了一个窗口,则文件路径将被“修复”,因为路径或文件名中可能出现空格,随后文件将以 打开
gedit
。
答案2
快速破解,只需打开您认为想要的所有文件,然后在右上角的菜单中,您可以找到每个文件的路径,这样您就可以保留您想要的文件并关闭其他文件。
答案3
如果有人仍然想知道,编辑已经原生实现了以多种方式显示文件路径。它肯定已经可用很长时间了,但 v3.36.2 肯定有它。