Я разработчик игр - я часто переношу координаты спрайтов из атласа текстур в код игры. Когда я устал и не могу запомнить 4 числа, я обычно нажимаю alt + tab каждое число, чтобы переключаться между кодом и редактором изображений.

Что, если бы у меня был удобный ярлык, который вызывает небольшое всплывающее окно с текстовым полем, которое идет прямо в буфер обмена, чтобы я мог записывать координаты без переключения между приложениями?

Сначала я покажу вам, что я имею в виду, а затем объясню, как мне удалось сделать это с нуля за пару минут.

Философия Linux

Я могу запустить свою IDE по своему выбору, выбрать любимую библиотеку графического интерфейса и потратить еще час на поиски в Google, как попасть в буфер обмена моей системы.

Или я могу вспомнить это краткое изложение философии Unix:

  • Пишите программы, которые делают одно дело и делают это хорошо.
  • Напишите программы для совместной работы.
  • Напишите программы для обработки текстовых потоков, потому что это универсальный интерфейс.

Это значит то, что он говорит. Вполне возможно, что уже есть объединенные программы, которые могут делать то, что вы хотите. Дело в том, чтобы их найти.

Программа, которая помещает текст в буфер обмена.

Запустите командную строку (терминал) и введите:

> echo "this is going to the clipboard" | xsel --clipboard

Это все, что вам нужно, чтобы поместить текст в буфер обмена. Это не руководство по bash, но в нем буквально говорится, что нужно поместить вывод команды echo «…» в программу xsel. Если вы вернетесь к перечисленным мною принципам Unix, вы поймете, почему кажущийся уродливым bash выглядит именно так и почему он отлично подходит для того, для чего он предназначен - склеивания отдельных программ. Кто-то написал программу, которая заполняет буфер обмена любым текстом, так что мне не нужно. Спасибо доброй душе.

Программа, которая создает графический интерфейс на лету.

Когда я впервые прочитал о Zenity, я был поражен тем, насколько умна и проста эта идея. Это дает вам возможность превратить ваши текстовые сценарии bash в удобные приложения Windows с помощью всего одной строки текста.

Самое простое использование, которое нам нужно, - это отображение поля ввода, которое является синонимом элемента ввода текста.

> zenity --entry

Нажмите Enter, и вы увидите это:

Он вернет все, что вы введете в это поле. Надеюсь, вы понимаете, к чему это идет - давайте поместим вывод zenity во вход xsel, и все готово.

Склейте их.

zenity --entry | xsel --clipboard

Просто гениально. Все, что нам нужно сделать, это сделать его исполняемым скриптом. Я сохранил это в моей папке ~ / bin / и назвал его handy-clipboard (да, расширения нет). Теперь сделайте его исполняемым:

> chmod +x ~/bin/handy-clipboard

И вуаля - мы только что написали еще одну программу, которая вносит свой вклад в философию Unix и заимствует ее. Каждый раз, когда вы вводите handy-clipboard в консоли, вы будете получать всплывающее окно.

Мы не хотим запускать его с консоли.

Конечно, нет. Давайте создадим сочетание клавиш, которое вызовет эту вещь. Моя разновидность Linux - это Ubuntu, и вот как вы назначаете сочетания клавиш в Ubuntu:

Это все, ребята

Дайте мне знать в комментариях, если вы хотите, чтобы я показал вам еще кое-что, что делает Linux для облегчения моего дня - в следующий раз с меньшим количеством мотивационных фраз и большим количеством мяса.

Я настоятельно рекомендую вам попробовать Linux. Это один из секретов того, как мне удается так много делать в студии для одного человека. Используя этот подход, я автоматизировал бесчисленное количество вещей - от управления моими серверами до рендеринга 3D-моделей, превращения их в таблицы спрайтов, настройки палитры и добавления ее в игру одним щелчком мыши. Конечно, консольные программы не предназначены для замены сложных приложений, но они предназначены для того, чтобы избавить вас от значительной части рутинных задач.

TL;DR

Запустите это, чтобы получить текстовый ввод, который помещает его содержимое в буфер обмена.

Дополнительно

Диего написал мне небольшой плагин GIMP, который делает то же самое https://twitter.com/feiss/status/937139364617912322 :)