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

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

Gedit显示最近打开的文件。

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

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

答案1

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


如果最近使用的 gedit 文件的路径信息对您来说很重要,则可以使用该解决方案来替代 gedit 自己的“最近使用”概览。它为您提供最近gedit使用的十个文件的信息,就像窗口标题栏上显示的一样。

在此处输入图片描述

它存在:

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

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

结果:

如何设置

wmctrl需要安装以下设置:

sudo apt-get wmctrl

然后:

  1. 将以下脚本 ( [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
    
  2. 将以下脚本复制到一个空文件中,并将其保存为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
    
  3. [1]打开终端窗口,使用以下命令测试脚本:

    python3 /path/to/get_latestgedit.py
    

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

    python3 /path/to/get_geditlist.py
    

    最新的gedit文件应该会显示出来,如图所示。

  4. 如果一切正常,请将脚本添加[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有有效输出。如果是,则:
  • 它检查 的geditpid 是否出现在 输出中的一行或多行中wmctrl -lp。如果是,它会过滤掉以下行:不是包含“(”和“)”之间的有效路径,因为这些窗口不是来自已保存文件。
  • 剩余的窗口将添加到最近使用的窗口列表中。如果该窗口(文件)已出现在列表中,则其时间顺序位置将更新。此外,当列表长度超过十个(窗口)时,脚本将删除所有(最旧的)窗口。

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

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

  • 该脚本读取隐藏文件中的行,其中包含窗口的标题。
  • 从标题来看,小路被解析出来,并且窗口标题出现在Zenity列表中。
  • 如果用户从列表中选择了一个窗口,则文件路径将被“修复”,因为路径或文件名中可能出现空格,随后文件将以 打开gedit

答案2

快速破解,只需打开您认为想要的所有文件,然后在右上角的菜单中,您可以找到每个文件的路径,这样您就可以保留您想要的文件并关闭其他文件。

在此处输入图片描述

答案3

如果有人仍然想知道,编辑已经原生实现了以多种方式显示文件路径。它肯定已经可用很长时间了,但 v3.36.2 肯定有它。

相关内容