gedit - 显示最近打开文件的文件路径

Tho*_*ues 5 gedit files

Gedit 显示最近打开的文件。

如何gedit不仅显示文件名,还显示最近打开的文件的文件路径?

我在一个index.tcl / index.adb在很多地方都有的网站上工作。所以我有例如 3 次index.tcl。但我想知道是哪一个。

Jac*_*ijm 1

最干净的解决方案当然是编辑gedit. 由于这似乎遥不可及,因此下面的解决方案是一种解决方法。


如果最近使用的 gedit 文件的路径信息对您很重要,则该解决方案可以用作 gedit 自己的“最近使用”概述的替代品。gedit它为您提供最近十个使用的文件的信息,与窗口标题栏上显示的信息完全相同。

在此输入图像描述

它存在于:

  1. 一个(非常轻的)后台脚本,跟踪可能打开的gedit文件
  2. 用于调用最近使用的文件列表的脚本。

[1]只需在后台运行脚本,将脚本放在[2]快捷键下或将其添加为gedit启动器快速列表的快捷方式。

结果:

如何设置

wmctrl需要安装安装程序:

sudo apt-get wmctrl
Run Code Online (Sandbox Code Playgroud)

然后:

  1. 将下面的脚本([1])复制到一个空文件中,另存为get_latestgedit.py

    sudo apt-get wmctrl
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将以下脚本复制到一个空文件中,另存为get_geditlist.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
    
    Run Code Online (Sandbox Code Playgroud)
  3. [1]打开终端窗口,使用以下命令测试驱动脚本:

    python3 /path/to/get_latestgedit.py
    
    Run Code Online (Sandbox Code Playgroud)

    脚本运行时,打开一些现有gedit文件,并保持它们打开至少 5-10 秒(循环中断时间)。[2]现在使用以下命令(从另一个终端)测试运行脚本:

    python3 /path/to/get_geditlist.py
    
    Run Code Online (Sandbox Code Playgroud)

    应显示最新的gedit文件,如图所示。

  4. 如果一切正常,请将脚本添加[1]到启动应用程序:Dash > 启动应用程序 > 添加。添加命令:

    python3 /path/to/get_latestgedit.py
    
    Run Code Online (Sandbox Code Playgroud)

    并将脚本添加[2]到快捷键:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加命令:

    /bin/bash -c "sleep 10&&python3 /path/to/get_geditlist.py"
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    将其作为快速列表项添加到gedit启动器中,如图所示:

    在此输入图像描述

    将其更改为:

        Actions=Window;Document;Recently used;
    
    Run Code Online (Sandbox Code Playgroud)

    当然,替换python3 /path/to/get_geditlist.py成脚本的真实路径[2]

解释

脚本[1]检查(每五秒一次):

  • 如果gedit窗口打开,则检查是否pidof gedit有有效的输出。那么,如果是这样的话:
  • gedit它检查的 pid是否出现在 的输出中的一行或多行中wmctrl -lp。如果是这样,它会过滤掉包含“(”和“)”之间的有效路径的行,因为这些窗口不是来自保存的文件。
  • 剩余的窗口将添加到最近使用的窗口列表中。如果窗口(文件)已出现在列表中,则更新其时间顺序位置。此外,当列表长度超过十个(窗口)时,脚本将删除所有(最旧的)窗口。

如果最近使用的窗口列表发生更改,该列表将写入home目录中的隐藏文件中。

脚本[2]读取由 scrip1 创建和更新的隐藏文件[1]。被调用时:

  • 该脚本读取隐藏文件中的行,其中包含窗口的标题。
  • 从标题中解析出路径Zenity,并且窗口标题出现在列表中。
  • 如果用户从列表中选择一个窗口,则文件的路径对于路径或文件名中可能出现的空格是“固定的”,随后文件将使用gedit.