我正在尝试在 Gedit 中编写一个自定义命令,将当前打开和活动文档的路径(包括父目录和文件)复制到剪贴板,因为我找不到任何可以执行此操作的 gedit 插件或工具。
我还不知道从哪里开始,也没有任何好的参考,但我知道我必须用 bash 脚本进行脚本编写。
我搜索了外部命令以将任何字符串从终端复制到剪贴板(因为它也运行 bash 脚本),但答案建议使用“xclip”工具,我试过并且很失望,因为使用 xclip 复制的任何字符串只能使用“xclip -o”命令粘贴。我需要复制的字符串可以使用 Ctrl-V 粘贴,这样我才能在文件管理器(nautilus)中打开路径。
任何帮助/建议都将受到感谢。
答案1
复制文件路径的脚本,打开于gedit
在 gedit 窗口前面,下面的小脚本从(gedit
)窗口的名称中获取路径,并将其复制到剪贴板。
该脚本有两个选项:
仅复制小路到文件的目录,使用选项运行脚本
-path
或者
复制路径包括文件名,使用选项运行脚本
-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])
如何使用
安装
xdotool
和xclip
:sudo apt-get install xdotool xclip
将脚本复制到一个空文件中,另存为
get_path.py
测试运行脚本:
- 打开现有
gedit
文件 打开终端窗口,运行命令:
sleep 5 && python3 /path/to/get_path.py -file
立即切换到
gedit
窗口,使命令的最后部分与gedit
前面的窗口一起运行。- 按Ctrl+V某处粘贴刚刚复制的路径。
- 打开现有
如果一切正常,您可以通过两种方式提供选项:
- 为两个选项创建两个快捷键:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并将两个命令添加到两个不同的快捷键中。
使启动器中两个选项都可用
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
您是否尝试过复制文件路径插件?