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

Vic*_*Dev 3 gedit command-line bash scripts clipboard

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

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

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

任何帮助/建议表示赞赏。

Jac*_*ijm 5

复制文件路径的脚本,在 gedit

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

该脚本有两个选项:

  1. 只复制文件目录的路径,运行带有选项的脚本

    -path
    
    Run Code Online (Sandbox Code Playgroud)

    或者

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

    -file
    
    Run Code Online (Sandbox Code Playgroud)

剧本

-path
Run Code Online (Sandbox Code Playgroud)

如何使用

  1. 安装xdotoolxclip

    sudo apt-get install xdotool xclip
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将脚本复制到一个空文件中,另存为 get_path.py

  3. 测试运行脚本:

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

      sleep 5 && python3 /path/to/get_path.py -file
      
      Run Code Online (Sandbox Code Playgroud)

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

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

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

      在此处输入图片说明

      下面的内容复制到一个空文件,将其保存为gedit.desktop~/.local/share/applications

      -file
      
      Run Code Online (Sandbox Code Playgroud)

    在两行中:

    Exec=python3 /path/to/get_path.py -path
    
    Run Code Online (Sandbox Code Playgroud)

    Exec=python3 /path/to/get_path.py -file
    
    Run Code Online (Sandbox Code Playgroud)

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

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

解释

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

笔记

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

例子

前面有以下窗口:

在此处输入图片说明

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

#!/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])
Run Code Online (Sandbox Code Playgroud)

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

sudo apt-get install xdotool xclip
Run Code Online (Sandbox Code Playgroud)

如您所见,空格已得到处理:)。