Как выйти из палитры цветов gpick после выбора с помощью сочетания клавиш?

4

Я назначил ярлык в Ubuntu 14.04 gpick -p, который мгновенно вызывает палитру цветов. GPick настроен на сохранение выбранного цвета в буфер обмена.

Однако после выбора цвета интерфейс gpick исчезает и gpick -pпродолжает работать в фоновом режиме, используя процессор.

От 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. уходит

По уходу , это может быть одним из следующих:

  • в идеале, программа будет выходить
  • в фоновом режиме без значительного использования ресурсов будет в порядке
  • Представить кнопку для закрытия было бы раздражающим, но терпимым

Вещи, которые я пробовал:

  • Настройка "Single Instance" вкл / выкл - вроде не помогло
  • Настройка «Свернуть / закрыть системный трей» вкл. И выкл. - похоже, не помогло, и программа не появляется в трее
  • Установка gcolor2и kcolorchooser- у них нет автоматических команд выбора цвета
  • Использование grabc | xclip -selection clipboard- это работает, но не обеспечивает лупу
Олег
источник

Ответы:

4

gpick имеет следующие проблемы:

  • Он не заканчивается после выбора цвета (вы уже это знаете)
  • Если вы скопируете что-то в буфер обмена, а затем убьете, у вас будет пустой буфер обмена.

Решение 1 (рекомендуется)

(gpick -p &); pid=$(pidof gpick); sleep 5; xclip -se c -o | xclip -i -se c -l 1; kill $pid

Чтобы обойти проблему пустого буфера обмена, идея состоит в том, чтобы запустить gpickподпроцесс и скопировать содержимое буфера обмена перед тем, как убить подпроцесс.

Создайте следующий скрипт bash и используйте if в качестве ярлыка программы:

#!/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процесс остается после команды, но он не потребляет ЦП.

Сильвен Пино
источник
timeout -k 5 5 gpick -pКажется, работает сам по себе, когда работает clipit. Однако, когда clipit не работает, даже timeout -k 5 5 gpick -p ; clipit -c | xsel -bне работает. Я не против запуска клипов, но это то, что вы намеревались? Если нет, мне было бы интересно выяснить, почему команда не работает.
Олег
На самом деле, у меня есть веская причина не запускать clipit постоянно: мой менеджер паролей keepassx очищает буфер обмена после копирования пароля, а clipit предотвращает эту функцию.
Олег
@ Олег Я добавил новое решение без менеджера буфера обмена, пожалуйста, дайте мне знать, если оно работает как положено. Спасибо
Сильвен Пино
Я положил первую команду в сценарии bash. При запуске из терминала скрипт работает как положено. Но когда скрипт вызывается с помощью сочетания клавиш Ubuntu, буфер обмена очищается через 5 секунд. Есть ли где-нибудь файл конфигурации, который мне нужно изменить, чтобы разрешить использование буфера обмена с помощью сочетания клавиш? Запуск env | grep -i 'select\|clip'выводов ничего не дал.
Олег
1
Отлично работает, спасибо. Я также понимаю, как теперь работает буфер обмена в Linux.
Олег