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

薇琪·德芙

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

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

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

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

雅各布·弗利姆(Jacob Vlijm)

复制文件路径的脚本,在 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窗口,以使tyhe命令的最后一部分在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

如您所见,空格是:)处理的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将GNU屏幕复制缓冲区复制到剪贴板?

如何将当前路径复制到剪贴板?

如何将变量复制到剪贴板

在Intellij IDEA中,是否可以将当前编辑器选项卡的路径复制到剪贴板?

如何将窗口复制到剪贴板?

在终端缓冲区中工作时如何将文本复制到emacs中的系统剪贴板?

将当前位置复制到剪贴板

如何将预标记代码复制到HTML剪贴板中?

将当前网址复制到剪贴板

如何将tableOutput复制到剪贴板?

如何将文件路径复制到剪贴板?

将在Putty中打开的文件的全部内容复制到剪贴板

当剪贴板中的当前输出太大而无法剪贴板时,如何将“终端”中的所有当前输出复制到文件中?

将图像从剪贴板复制到文件

如何将已编辑文件中的所有文本从PuTTY复制到剪贴板?

如何将文件复制到剪贴板并将其粘贴到其他地方?

无论如何将文件名复制到bash中的剪贴板历史记录?

如何在Windows 10中将当前窗口复制到剪贴板

如何将文本文件中的数据复制到剪贴板?

如何将txt文件中的内容复制到剪贴板?

Outlook VBA-如何将当前选定的文本复制到剪贴板?

将HTM文件的内容复制到剪贴板

autoIT将最新的文件路径复制到剪贴板

设置别名以将当前路径从 shell 复制到剪贴板失败

如何将当前播放的歌曲复制到 ncmpcpp 中的剪贴板?

如何将文本文件的内容复制到剪贴板?

如何将文本复制到剪贴板

如何将顶部 cmd 输出复制到 mac 中的剪贴板?

将链接复制到 jquery 中的剪贴板