سحرارآمیز



کار با dmenu، اسکریپت‌هایی ابتدایی

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 نمایش میده یک جمله هم نشون داده شه.

dmenu2

برای انجام اعمال پیچیده‌تر و راحت شدن کارمون دستور بالا رو به یه اسکریپت بش تبدیل میکنیم.

#!/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

dj

برای دیدن نمونه‌ها و توضیحات بیشترویدیوهای زیر رو میتونید ببینید.

از کانال Luke Smith :

dmenu: Your own Custom Script Menus!
dmenu tips:Emojis and more
Layin' down Pipes like a Unix Chad

از کانال DistroTube :

Let's Rice Our Dmenu With Patching
جمعه 07 آذر 1399
چرا لینوکس؟