如何将 gedit 中当前打开的文件的路径复制到剪贴板?

如何将 gedit 中当前打开的文件的路径复制到剪贴板?

我正在尝试在 Gedit 中编写一个自定义命令,将当前打开和活动文档的路径(包括父目录和文件)复制到剪贴板,因为我找不到任何可以执行此操作的 gedit 插件或工具。

我还不知道从哪里开始,也没有任何好的参考,但我知道我必须用 bash 脚本进行脚本编写。

我搜索了外部命令以将任何字符串从终端复制到剪贴板(因为它也运行 bash 脚本),但答案建议使用“xclip”工具,我试过并且很失望,因为使用 xclip 复制的任何字符串只能使用“xclip -o”命令粘贴。我需要复制的字符串可以使用 Ctrl-V 粘贴,这样我才能在文件管理器(nautilus)中打开路径。

任何帮助/建议都将受到感谢。

答案1

复制文件路径的脚本,打开于gedit

在 gedit 窗口前面,下面的小脚本从(gedit)窗口的名称中获取路径,并将其复制到剪贴板。

该脚本有两个选项:

  1. 仅复制小路到文件的目录,使用选项运行脚本

    -path
    

    或者

  2. 复制路径包括文件名,使用选项运行脚本

    -file
    

剧本

#!/usr/bin/env python3
import subprocess
import sys

name = subprocess.check_output(["xdotool", "getactivewindow", "getwindowname"]).decode("utf-8").strip()
if all(["(" in name, ")" in name]):
    path = name[name.find("(")+1:name.find(")")]
    if sys.argv[1] == "-file":
        fname = name[:name.find("(")]
    elif sys.argv[1] == "-path":
        fname = ""
    command = "echo "+'"'+path+"/"+fname+'"'+" | xclip -selection clipboard"
    subprocess.Popen(["/bin/bash", "-c", command])

如何使用

  1. 安装xdotoolxclip

    sudo apt-get install xdotool xclip
    
  2. 将脚本复制到一个空文件中,另存为get_path.py

  3. 测试运行脚本:

    • 打开现有gedit文件
    • 打开终端窗口,运行命令:

      sleep 5 && python3 /path/to/get_path.py -file
      

      立即切换到gedit窗口,使命令的最后部分与gedit前面的窗口一起运行。

    • Ctrl+V某处粘贴刚刚复制的路径。
  4. 如果一切正常,您可以通过两种方式提供选项:

    1. 为两个选项创建两个快捷键:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并将两个命令添加到两个不同的快捷键中。
    2. 使启动器中两个选项都可用gedit

      在此处输入图片描述

      将以下内容复制到一个空文件中,保存gedit.desktop~/.local/share/applications

      [Desktop Entry]
      Name=gedit
      GenericName=Text Editor
      Comment=Edit text files
      Exec=gedit %U
      Terminal=false
      Type=Application
      StartupNotify=true
      MimeType=text/plain;
      Icon=accessories-text-editor
      Categories=GNOME;GTK;Utility;TextEditor;
      X-GNOME-DocPath=gedit/gedit.xml
      X-GNOME-FullName=Text Editor
      X-GNOME-Bugzilla-Bugzilla=GNOME
      X-GNOME-Bugzilla-Product=gedit
      X-GNOME-Bugzilla-Component=general
      X-GNOME-Bugzilla-Version=3.10.4
      X-GNOME-Bugzilla-ExtraInfoScript=/usr/share/gedit/gedit-bugreport
      Actions=Window;Document;divider1;Copy current file's directory;Copy path+file name;
      
      Keywords=Text;Editor;Plaintext;Write;
      X-Ubuntu-Gettext-Domain=gedit
      
      [Desktop Action Window]
      Name=Open a New Window
      Exec=gedit --new-window
      OnlyShowIn=Unity;
      
      [Desktop Action Document]
      Name=Open a New Document
      Exec=gedit --new-document
      OnlyShowIn=Unity;
      
      [Desktop Action Copy current file's directory]
      Name=Copy current directory
      Exec=python3 /path/to/get_path.py -path
      OnlyShowIn=Unity;
      
      [Desktop Action divider1]
      Name=.....................................
      OnlyShowIn=Unity;
      
      [Desktop Action Copy path+file name]
      Name=Copy current directory, include file name
      Exec=python3 /path/to/get_path.py -file
      OnlyShowIn=Unity;
      

    在这两行中:

    Exec=python3 /path/to/get_path.py -path
    

    Exec=python3 /path/to/get_path.py -file
    

    /path/to/get_path.py用脚本的真实路径替换。

    注销并重新登录以使 Unity“切换”到新的本地.desktop文件。

解释

在 gedit 窗口名称中,路径显示在(和之间)。脚本只是借助 来查看最前面的窗口xdotool,然后读取这两个字符之间的路径。

笔记

由于路径是以文本方式读取的,如果文件的名称包含其他()字符,脚本将失败。

例子

前面有以下窗口:

在此处输入图片描述

第一个选项将文件路径复制到剪贴板:

~/Bureaublad

而第二个选项包含文件本身:

~/Bureaublad/some test file.txt

正如您所见,空格已被处理:)。

答案2

经过一些文档搜索后,我找到了解决方案,所以我将在这里回答我的问题。

打开 Gedit 并转到“工具”>>“管理外部工具”并创建新工具。

添加以下命令,如下所示:

echo -n $GEDIT_CURRENT_DOCUMENT_URI | xclip -sel clip;exit;

关闭它然后重新启动 Gedit(仅用于确认)。

打开任意文档,然后转到“工具”>>“外部工具”,然后单击刚刚创建的命令标签。路径将位于剪贴板中。

答案3

$GEDIT_CURRENT_DOCUMENT_URI
变量进行比较$GEDIT_CURRENT_DOCUMENT_PATH 对我来说似乎更好:

  • file://前缀
  • 显示多字节字符(非 urlencode)

參考文獻:
https://wiki.gnome.org/Apps/Gedit/Plugins/ExternalTools#Available_Environment_Variables https://wiki.gnome.org/Apps/Gedit/ExternalToolsPluginCommands

答案4

您是否尝试过复制文件路径插件

相关内容