🐚اجرای دستور شل و تنظیم opener در Yazi
دستور shell، پارامترهای %s، تعریف opener سفارشی و xdg-open.
این فصل جاییه که یازی از یه «فایلمنیجر» تبدیل میشه به یه «پیشخوان فرماندهی». هر فایلی که انتخاب کردی میتونه ورودی هر دستور لینوکسی باشه.
اجرای دستور شل روی فایلها
| کلید | کاربرد |
|---|---|
| ; | اجرای دستور شل (غیرمسدودکننده — خروجی توی پسزمینه) |
| : | اجرای دستور شل بهصورت مسدودکننده (صفحه در اختیار برنامه) |
تفاوت مهمه: ; برای دستورهایی که خروجی تعاملی ندارن (مثل chmod +x)، و : برای برنامههایی که باید صفحه رو بگیرن (مثل nvim، htop، tar با خروجی طولانی).
پارامترهای جادویی
| %s | مسیر همهی فایلهای انتخابشده |
| %S | همون، ولی به شکل URL |
| %s1 و %s2 | مسیر فایل اول، دوم و… |
| %d | مسیر پوشهی هر فایل انتخابشده |
| %h | فایلی که مکاننما روشه (hovered) |
| %% | خود کاراکتر درصد |
مثالهای واقعی که هر روز لازمت میشه
برای دیدن خروجی دستورهایی مثل du و sha256sum از : استفاده کن و آخر دستور; read -r _ بذار تا صفحه با زدن Enter بسته بشه. برنامههایی مثل zip و mpv هم باید جدا نصب شده باشن.
chmod +x %s # اجرایی کردن اسکریپتهای انتخابشده
zip -r archive.zip %s # زیپ کردن انتخابها
tar -czf backup.tar.gz %s # آرشیو tar.gz
7z x %h # استخراج آرشیوی که روش ایستادی
mpv %s # پخش ویدیوهای انتخابشده
gio open %h # باز کردن با برنامهی پیشفرض گنوم
du -sh %s # حجم واقعی انتخابها
sha256sum %s # گرفتن هش
magick %h -resize 50%% small.png # تغییر اندازه با ImageMagick
افتادن توی شل — ترفند کلید !
گاهی میخوای یه شل کامل توی همون پوشه داشته باشی، کارت رو بکنی و برگردی توی یازی. این باینْد رو اضافه کن:
[[mgr.prepend_keymap]]
on = "!"
for = "unix"
run = 'shell "$SHELL" --block'
desc = "باز کردن شل در همین پوشه"
حالا ! بزنی شل پیشفرضت باز میشه، هر کاری خواستی بکن، exit بزنی برمیگردی سر جات. این تنهایی ارزش کل کانفیگ رو داره.
باز کردن فایلها: o، O و Enter
| کلید | کاربرد |
|---|---|
| Enter | باز کردن با اولین opener مطابق |
| o | همون کار Enter |
| O | منوی «باز کردن با…» — لیست همهی openerهای ممکن |
تعریف opener سفارشی
دو بخش داری: [opener] که «چطور» باز بشه رو تعریف میکنه، و [open] که «چه فایلی با کدوم opener» باز بشه. توی این مثال باید nvim، code و mpv نصب باشن؛ فقط openerهای موردنیازت رو نگه دار. در نسخهی 26.9.1 از جاینگهدارهای %s استفاده کن؛ نمونههای قدیمی $@ و $1رو مستقیم با این کانفیگ مخلوط نکن.
# ---------- تعریف روشهای باز کردن ----------
[opener]
edit = [
{ run = 'nvim %s', block = true, desc = "ویرایش در ترمینال", for = "unix" },
]
code = [
{ run = 'code %s', orphan = true, desc = "VS Code", for = "unix" },
]
play = [
{ run = 'mpv %s', orphan = true, desc = "پخش با mpv", for = "unix" },
]
open = [
{ run = 'xdg-open %s1', desc = "برنامهی پیشفرض سیستم", for = "unix" },
]
extract = [
{ run = 'ya pub extract --list %s', desc = "استخراج آرشیو", for = "unix" },
]
reveal = [
{ run = 'nautilus %d1', orphan = true, desc = "نمایش در Nautilus", for = "unix" },
]
# ---------- قواعد: کدوم فایل با کدوم روش ----------
[open]
prepend_rules = [
{ mime = "text/*", use = [ "edit", "code", "open" ] },
{ mime = "image/*", use = [ "open", "code" ] },
{ mime = "video/*", use = [ "play", "open" ] },
{ mime = "audio/*", use = [ "play" ] },
{ mime = "application/pdf", use = [ "open" ] },
{ url = "*.zip", use = [ "extract", "open" ] },
{ url = "*.{tar,gz,xz,7z,rar}", use = [ "extract", "open" ] },
{ url = "*/", use = [ "open", "reveal" ] },
]
- block = true یعنی یازی مخفی میشه و صفحه رو کامل میده به اون برنامه (برای nvim و htop لازمه).
- orphan = true یعنی حتی اگه یازی بسته بشه، برنامه باز بمونه (برای برنامههای گرافیکی مثل VS Code و mpv لازمه).
- desc همون متنیه که توی منوی
Oمیبینی. - اگه
useچندتا opener داشته باشه،Enterاولی رو اجرا میکنه وOهمه رو لیست میکنه.
xdg-open از تنظیمات دسکتاپ تبعیت میکنه. اگه Evince نصب داری و میخوای PDFها با اون باز بشن، این نمونه کاربرد داره. برای برنامهی دیگه باید شناسهی واقعی فایل desktop همون برنامه رو جایگزین کنی:xdg-mime default org.gnome.Evince.desktop application/pdf
xdg-mime query default application/pdf # چک کردن
gio mime application/pdf # جایگزین gnome
xdg-utils نصب باشه: sudo dnf install xdg-utils.%s1 فقط اولین انتخاب رو میفرسته و %d1 پوشهی حاوی همون فایل رو. قبل از اضافه کردن دستورهایی که تنظیمات دسکتاپ یا فایلها رو تغییر میدن، اونها رو روی نمونهی آزمایشی بررسی کن.منبع برای بررسی جزئیات و تغییرات نسخهها: تنظیم opener در مستندات Yazi.