答案

答案

我在 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

确切目标:键盘快捷键可以:

  1. 将我的鼠标变成颜色选择器(带有放大镜窗口)
  2. 一旦我点击,将选定的颜色复制到剪贴板,然后
  3. 消失了

经过消失了,则可能是下列之一:

  • 理想情况下,程序将退出
  • 在后台运行且不占用太多资源是可以的
  • 显示关闭按钮可能会很烦人,但可以忍受

我尝试过的事情:

  • 配置“单实例”的开启和关闭 - 似乎没有帮助
  • 配置“最小化/关闭到系统托盘” - 似乎没有帮助,并且程序没有出现在托盘中
  • 安装gcolor2kcolorchooser- 这些没有自动拾色命令
  • 使用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

相关内容