dmenu_path
در مطلب قبلی اشاره کردم که عملکرد اصلی dmenu به عنوان یک منوی پویا نشون دادن لیستی از برنامههای نصب شده روی سیستم (فایلهای اجرایی) و اجرا کردنشون هست.
با نصب dmenu یک برنامهی دیگه هم به سیستمتون اضافه میشه به نام dmenu_path که خروجیش یه لیست بلند بالا از برنامههایی هست که در تمام مسیرهای سیستم (pathها) قرار دارن.
دستور dmenu_run از همین لیست استفاده میکنه و برنامهای که از لیست انتخاب میکنیم رو برامون اجرا میکنه.
حالا برای آشنایی بیشتر با نحوهی عملکرد dmenu سعی میکنم از همین لیست خروجی dmenu_path استفاده کنم و یه اسکریپت شبیه dmenu_run بنویسم.
$ $(dmenu_path | head -30 | dmenu -p "Which program to run? ")
دستور بالا لیستی از اسامی ۳۰ برنامهی اول خروجی dmenu_path رو بهمون نشون میده که هربرنامهای رو که انتخاب کنیم اجرا میشه.
تفاوتی که این اسکریپت با dmenu_run داره گزینهی p- هست. این گزینه باعث میشه که در کنار منویی که dmenu نمایش میده یک جمله هم نشون داده شه.
برای انجام اعمال پیچیدهتر و راحت شدن کارمون دستور بالا رو به یه اسکریپت بش تبدیل میکنیم.
#!/bin/bash
declare programs=$(dmenu_path | head -30)
choice=$(echo -e "${programs[@]}" | dmenu -p 'Which program to run? ' -fn 'NotoMonoRegular:bold:pixelsize=30' )
echo $choice
$choice
جایی که dmenu جذاب میشه
کم کم زیبایی و ظرافت dmenu داره نمایان میشه. جذابیت dmenu وقتی مشخص میشه که ازش در کنار دیگر ابزار سیستمهمون استفاده کنیم.
مثلا منویی از یه سری اسکریپت که ازشون استفاده میکنیم درست کنیم و براش یه کلید میانبر تعریف کنیم و با انتخاب یک گزینه از منو اسکریپت مربوط بهش رو اجرا کنیم.
یا لیستی از پلیلیستهای آهنگهامون رو بهمون نشون بده و بعد از انتخاب برامون پخشش کنه. بیاید همین دومی رو بسازیم.
برای ساختن این برنامه یه لیست از پلی لیستامون نیاز داریم که بتونیم اون و به dmenu بدیم و پلیلیستی که انتخاب میشه رو با مثلا vlc اجرا کنیم.
از اجزای همون اسکریپت بش بالا استفاده میکنم.
#!/bin/bash
MusicDir="$HOME/Music"
declare playlistsNames=$(find $HOME/Music -maxdepth 1 -type f -name "*.xspf" -printf "%f\n" )
choice=$(echo -e "${playlistsNames[@]}" | dmenu -l 10 -p "what's your mood? " -fn 'NotoMonoRegular:bold:pixelsize=30')
if (printf '%s\n' "${playlistsNames[@]}" | grep -xq $choice); then
vlc $MusicDir/$choice
fi
برای دیدن نمونهها و توضیحات بیشترویدیوهای زیر رو میتونید ببینید.
از کانال Luke Smith :
از کانال DistroTube :