我在 Ubuntu 14.04 中为 指定了一个快捷方式gpick -p
,可以立即调出颜色选择器。GPick 配置为将所选颜色保存到剪贴板。
但是,一旦选择了颜色,gpick 界面就会消失并gpick -p
继续在后台运行,并使用 CPU。
从ps ax | grep gpick
:
5255 ? Sl 0:00 gpick -p
从top -p 5255
:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5255 oleg 20 0 702448 18096 12744 S 1.7 0.2 0:01.67 gpick
确切目标:键盘快捷键可以:
- 将我的鼠标变成颜色选择器(带有放大镜窗口)
- 一旦我点击,将选定的颜色复制到剪贴板,然后
- 消失了
经过消失了,则可能是下列之一:
- 理想情况下,程序将退出
- 在后台运行且不占用太多资源是可以的
- 显示关闭按钮可能会很烦人,但可以忍受
我尝试过的事情:
- 配置“单实例”的开启和关闭 - 似乎没有帮助
- 配置“最小化/关闭到系统托盘” - 似乎没有帮助,并且程序没有出现在托盘中
- 安装
gcolor2
和kcolorchooser
- 这些没有自动拾色命令 - 使用
grabc | xclip -selection clipboard
——这有效,但不提供放大镜
答案1
gpick
存在以下问题:
- 选择颜色后它不会自行终止(你已经知道了)
- 如果您将某些内容复制到剪贴板然后将其删除,那么您将得到一个空的剪贴板。
解决方案 1(推荐)
(gpick -p &); pid=$(pidof gpick); sleep 5; xclip -se c -o | xclip -i -se c -l 1; kill $pid
为了解决剪贴板为空的问题,我们可以先gpick
在子进程中启动,然后在终止子进程之前复制剪贴板的内容。
创建以下 bash 脚本并将其用作快捷方式程序:
#!/bin/bash
(gpick -p &);
pid=$(pidof gpick)
sleep 5
xclip -se c -o | xclip -i -se c -l 1
kill $pid
它将允许剪贴板数据的持久保存。
解决方案 2(使用剪贴板管理器)
首先要做的是安装一个剪贴板管理器,它将提供剪贴板持久性,打开终端并输入以下命令:
sudo apt-get install clipit xsel
现在重新启动您的会话clipit
以默认启动。
您可以在快捷方式中使用的命令是将颜色代码保存到剪贴板并退出gpick
:
timeout -k 5 5 gpick -p ; clipit -c | xsel -b
在杀死之前,它会给你5秒的时间来选择颜色gpick
。
笔记:对于这个解决方案,似乎xsel
命令之后仍有一个进程,但它并不消耗 CPU。
答案2
答案
您正在搜索的命令是
gpick -o -s | xclip -sel c
不过,你可以做出一些改进
答案的改进
取消选择时不修改剪贴板
Esc
但是,如果您取消选择(按),这将替换剪贴板
selected_color="$(gpick -o -s)"
[ -z "$selected_color" ] || {
echo "$selected_color" | xclip -sel c
}
选择不同的颜色选择器
selected_color="$(gpick -o -s -c color_css_rgb)"
[ -z "$selected_color" ] || {
echo "$selected_color" | xclip -sel c
}
查找信息
在写这个答案之前,我只知道这个-p
标志。但是,我想知道是否还有其他命令行参数可以帮助我改进我使用的脚本。这就是我决定检查源代码的原因。这就是我决定检查源代码的原因。
下面的部分解释了我如何找到与撰写此答案相关的信息。
查找可用的命令行参数
至于 Gpick 版本 0.2.6rc1,手册页gpick
没有提供命令行参数(见下文)
echo '-'; gpick -v
echo '-'; man -P cat gpick
-
Gpick version 0.2.6rc1
Revision unknown
Date 2020-12-12
-
gpick() gpick()
NAME
gpick - advanced color picker
SYNOPSIS
gpick [FILE]
DESCRIPTION
gpick starts an application and opens FILE if it is specified
AUTHOR
Written by Albertas Vyšniauskas
gpick()
grep
但是,通过执行以下搜索并访问一些结果,我能够找到 file:///home/beep1560/SourceCode/gpick/source/main.cpp 中可用的命令行参数。
grep --color -RHInw 'p' ~/SourceCode/gpick
以下是上述文件的相关部分
...
static GOptionEntry commandline_entries[] =
{
{"geometry", 'g', 0, G_OPTION_ARG_STRING, &commandline_geometry, "Window geometry", "GEOMETRY"},
{"pick", 'p', 0, G_OPTION_ARG_NONE, &pick_color, "Pick a color", nullptr},
{"single", 's', 0, G_OPTION_ARG_NONE, &single_color_pick_mode, "Pick one color and exit", nullptr},
{"output", 'o', 0, G_OPTION_ARG_NONE, &output_picked_color, "Output picked color", nullptr},
{"no-newline", 0, 0, G_OPTION_ARG_NONE, &output_without_newline, "Output picked color without newline", nullptr},
{"no-start", 0, 0, G_OPTION_ARG_NONE, &do_not_start, "Do not start Gpick if it is not already running", nullptr},
{"converter-name", 'c', 0, G_OPTION_ARG_STRING, &converter_name, "Converter name used for floating picker mode", nullptr},
{"version", 'v', 0, G_OPTION_ARG_NONE, &version_information, "Print version information", nullptr},
{G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &commandline_filename, nullptr, "[FILE...]"},
{nullptr}
};
...
查找可用的转换器
可用的转换器有
color_web_hex
color_css_rgb
color_css_hsl
通过执行以下grep
搜索并访问一些结果,在文件 file:///home/beep1560/SourceCode/gpick/source/GlobalState.cpp 中找到了此信息。
grep --color -RHIn 'converters' ~/SourceCode/gpick
答案3
要选择单一颜色并输出,请使用:
gpick --pick --single --output
或者:
gpick -pso