Vic*_*Dev 3 gedit command-line bash scripts clipboard
我正在尝试在 Gedit 中编写一个自定义命令,它将当前打开和活动文档的路径(包括父目录和文件)复制到剪贴板,因为我找不到任何可以执行此操作的 gedit 插件或工具。
我还不知道从哪里开始,也没有任何好的参考资料,但我知道我必须在 bash 脚本中编写脚本。
我搜索了外部命令以将任何字符串从终端复制到剪贴板(因为它也运行 bash 脚本)但答案建议使用“xclip”工具,我已经尝试过并且很失望,因为使用 xclip 复制的任何字符串只能粘贴使用“xclip -o”命令。我需要复制的字符串可以用 Ctrl-V 粘贴,这样我就可以在文件管理器(鹦鹉螺)中打开路径。
任何帮助/建议表示赞赏。
gedit
gedit 窗口在前面,下面的小脚本从 ( gedit
) 窗口的名称派生路径,并将其复制到剪贴板。
该脚本有两个选项:
只复制文件目录的路径,运行带有选项的脚本
-path
Run Code Online (Sandbox Code Playgroud)
或者
复制包含文件名的路径,使用选项运行脚本
-file
Run Code Online (Sandbox Code Playgroud)-path
Run Code Online (Sandbox Code Playgroud)
安装xdotool
和xclip
:
sudo apt-get install xdotool xclip
Run Code Online (Sandbox Code Playgroud)将脚本复制到一个空文件中,另存为 get_path.py
测试运行脚本:
gedit
文件打开终端窗口,运行命令:
sleep 5 && python3 /path/to/get_path.py -file
Run Code Online (Sandbox Code Playgroud)
立即切换到gedit
窗口,使 tyhe 命令的最后一部分与gedit
前面的窗口一起运行。
如果一切正常,您可以通过两种方式使选项可用:
在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)
如您所见,空格已得到处理:)。