Найти в Дзене
BASH DAYS | Linux Factory

Нативный Pop-Up в Linux консоли

Грузить не буду, всё по делу и быстренько, приключений на 5 минут. Иначе никак.

Решил я упороться и упоролся. Захотелось мне короче прям из консоли вызывать всплывающую подсказку по хоткею.
Нажал хоткей появилась справка-шпаргалка, отпустил и она закрылась.

ДА! Прям из консоли! Так как иксов на серверах нет, нужно было идти другим путем, а путь оказался ну совсем неочевидный. Я до сих пор не понимаю, почему такая больная мысль меня посетила, видимо задачи в бэклоге закончились и стало скучно.

Проштудировав документацию по readline, я ничего не нашел, видимо там нет нужных механизмов позволяющих определять нажата ли клавиша или отпущена.

Readline — библиотека GNU Project, которую Bash и другие программы с CLI-интерфейсом используют для взаимодействия с командной строкой.

Но нет ничего невозможного, раз
readline шлет меня, повесим read на стандартный ввод. Когда клавиша будет отпущена, read вернет ошибку и выполнение скрипта перейдет к следующей инструкции, ну и по итогу скрипт завершится.

Если кто-то тебе говорит — это сделать невозможно! Он либо пиздит врет либо просто не хочет этим заниматься. Всё можно сделать, было бы желание!

Ничего не понял? Забей, это мысли в слух, главное реализация, а не скучная теория. В общем пишем скрипт и кидаем его в
/usr/local/sbin/cheat_shit.sh чмодим chmod +x cheat_shit.sh чтобы он в экзешник превратился.

#!/bin/bash

tput civis
tput smcup
tput cup 0 0

trap 'tput rmcup;tput cvvis' EXIT

echo 'Hello,this is Cheat-Shit'
echo '------------------------'
echo 'а тут можешь написать всё, что захочешь'
echo '------------------------'
echo 'source: @bashdays'

read -srn1 -t 0.7

while read -srn1 -t 0.1
do
:
done
exit


ОЧЕНЬ СТРАШНО! Держу пари мало кто про такое вообще слышал и тем более видел. Но такое в bash вполне реализуемо и в школе такому не научат.

Кратенько:

tput civis = скрываем курсор
tput smcup = переходим на альтернативный экран
tput cup 0 0 = переводим курсор в начало строки
trap 'tput…' = после выхода зачищаем весь мусор

Далее прописываем бинд в
~/.bashrc и вешаем вызов скрипта на CTRL+h

bind -x '"\C-h":"/usr/local/sbin/cheat_shit.sh"'

Перезапускаем сессию. Теперь при нажатии
CTRL+h у меня поверх рабочей консоли открывается попап с нужным мне текстом. В тексте может быть шпаргалка либо котик, либо что-то еще полезное.

Как повторить для
zsh, я не разбирался. Может у тебя будет желание разобраться.

Ну и для гиков, кто хочет покопаться поглубже, можешь зама́нить и захелпить:

man 3 readline
man bash (раздел readline)
man tput
man stty
help trap
help read
help bind
man 5 terminfo


Помимо шпаргалки по хоткею, ты можешь запустить вообще любой скрипт. Тут уже зависит от полета фантазии. Больше не смею тебя отвлекать, спасибо за внимание. Давай пять и погнали дальше отдыхать!

✅ ВИДЕО КАК ЭТО РАБОТАЕТ