.TH YTFZF 5 "2021 September" "ytfzf 2.0" .SH "نام (NAME)" ytfzf \- فایل پیکربندی برای \fBytfzf\fR. .SH "خلاصه دستور (SYNOPSIS)" .I ~/.config/ytfzf/conf.sh .SH "توضیحات (DESCRIPTION)" .PP فایل پیکربندی یک فایل \fI.sh\fR است و می‌تواند به همین صورت استفاده شود. این فایل می‌تواند کاملاً خالی باشد و \fBytfzf\fR همچنان با تنظیمات پیش‌فرض کار خواهد کرد. گزینه‌ها باید به عنوان متغیرهای محیطی و توابع تنظیم شوند. .SH "فایل‌های پیکربندی (CONFIGURATION FILES)" .PP فایل‌های پیکربندی در مسیر زیر ذخیره می‌شوند: .IR "$XDG_CONFIG_HOME/ytfzf (یا $HOME/.config/ytfzf)" . .SS conf.sh .PP یک اسکریپت شل که هنگام اجرای ytfzf فراخوانی و بارگذاری (source) می‌شود. .SS subscriptions .PP فایلی شامل فهرستی از پیوندهای صفحه ویدیوهای کانال‌های یوتیوب، مانند: .RS .EX .I https://www.youtube.com/channel/UCtMVHI3AJD4Qk4hcbZnI9ZQ .EE .RE .PP هر پیوند باید در یک خط جداگانه قرار گیرد. .PP اگر کانالی شبیه به "https://www.youtube.com/c/SomeOrdinaryGamers" باشد، قبل از افزودن آن به فایل اشتراک‌های خود، دستور زیر را اجرا کنید: .br ytfzf --channel-link="https://www.youtube.com/c/SomeOrdinaryGamers" .br .PP می‌توان با قرار دادن 'comment#' در یک خط مستقل یا بعد از یک پیوند، یادداشت یا کامنت ایجاد کرد. به عنوان مثال: .RS .EX .I link-to-channel #comment .IR link-to-channel " #best channel" .EE .RE .SS scrapers .PP پوشه‌ای شامل فایل‌های اجرایی که وب‌سایت‌ها را استخراج (scrape) می‌کنند. برای اطلاعات بیشتر بخش اسکرپرهای سفارشی (CUSTOM SCRAPERS) را ببینید. .RE .SH "گزینه‌های پیکربندی (CONFIGURATION OPTIONS)" .SS "متغیرها (VARIABLES)" .PP فایل conf.sh عمدتاً برای تنظیم متغیرها برای \fBytfzf\fR استفاده می‌شود. اگر متغیری مقدار پیش‌فرض نداشته باشد، به این معنی است که روی یک رشته خالی تنظیم شده است. .br برای تنظیم یک متغیر در conf.sh حتماً از ساختار زیر استفاده کنید: .br variable_name="value" .br علامت $ را در ابتدای نام متغیر درج نکنید. .PP فایل‌ها و دایرکتوری‌ها .RS .TP .RB $ cache_dir دایرکتوری ذخیره‌سازی فایل‌های حافظه موقت (کش). .br اکیداً توصیه می‌شود این متغیر را فقط زمانی تغییر دهید که $__is_submenu برابر 0 باشد، در غیر این صورت ممکن است رفتارهای غیرمنتظره‌ای رخ دهد. .br .IR پیش‌فرض: " $XDG_CACHE_HOME/ytfzf (یا $HOME/.cache/ytfzf)" .TP .RB $ hist_file فایلی که تاریخچه تماشا در آن نوشته می‌شود اگر $enable_hist برابر 1 باشد. .br اکیداً توصیه می‌شود این مقدار را فقط زمانی تغییر دهید که $__is_submenu برابر 0 باشد، در غیر این صورت ممکن است رفتارهای غیرمنتظره رخ دهد. .br .IR پیش‌فرض: " $cache_dir/watch_hist" .TP .RB $ search_hist_file فایلی که تاریخچه جستجو در آن نوشته می‌شود اگر $enable_search_hist برابر 1 باشد. .br .IR پیش‌فرض: " $cache_dir/search_hist" .RE .PP نحوه پخش ویدیوهای انتخاب‌شده. .RS .TP .RB $ is_detach تعیین می‌کند که آیا پخش‌کننده ویدیو از ترمینال جدا (detach) شود یا خیر. .br .IR پیش‌فرض: " 0" .TP .RB $ is_audio_only تعیین می‌کند که آیا فقط صدا پخش شود یا خیر. .br .IR پیش‌فرض: " 0" .TP .RB $ url_handler توابع یا برنامه‌هایی برای رسیدگی به ویدیوهای انتخاب‌شده. .br توصیه می‌شود این متغیر را مستقیماً تنظیم نکنید، بلکه از دستور load_url_handler استفاده کنید. .br برای مشاهده فهرست گرداننده‌های توکار نشانی، بخش URL handlers را ببینید. .IR پیش‌فرض: " multimedia_player" .TP .RB $ yt_video_link_domain دامنه‌ای که ویدیوهای یوتیوب از آن پخش می‌شوند (برای odysee و peertube یا لیست‌های پخش یوتیوب اعمال نمی‌شود). .br اگر خالی رها شود، مقدار آن هر نمونه invidious خواهد بود که ytfzf انتخاب کرده است. .br .IR پیش‌فرض: " https://www.youtube.com" .TP .RB $ info_to_print اطلاعاتی که باید به‌جای پخش ویدیو چاپ شوند. گزینه‌های موجود برای این متغیر عبارتند از: .RS .TP .IR L " | " l " | " link چاپ URL ویدیوهای انتخاب‌شده. .TP .IR VJ " | " vj " | " video\-json چاپ ساختار json ویدیوهای انتخاب‌شده. .TP .IR J " | " j " | " json چاپ ساختار json تمام ویدیوها در نتایج جستجو. .TP .IR F " | " f " | " format چاپ فرمت ویدیویی در حال استفاده. .TP .IR R " | " r " | " raw چاپ داده‌های ویدیوهای انتخاب‌شده، همان‌طور که در منو ظاهر می‌شود. .RE .TP .RB $ info_wait_action عملیاتی که هنگام برابر بودن $info_wait با 1 انجام می‌شود. .br عملیات معتبر: .RS .TP .IR q خروج (در صورتی که $is_loop برابر 1 باشد، به منو بازمی‌گردد). .TP .IR Q خروج، صرف‌نظر از اینکه حالت حلقه فعال باشد یا خیر. .TP .IR m بازگشت به منو. .br .IR پیش‌فرض: " q" .RE .TP .BR $ info_wait تعیین می‌کند که آیا پس از چاپ اطلاعات، منتظر ورودی بماند یا خیر. .br .IR پیش‌فرض: " 0" .TP .RB $ video_pref اولیت تصویری مورد استفاده برای youtube-dl در mpv. .br .IR پیش‌فرض: " bestvideo" .TP .RB $ audio_pref اولویت صوتی مورد استفاده برای youtube-dl در mpv. .br .IR پیش‌فرض: " bestaudio" .TP .RB $ ytdl_pref اولویت مورد استفاده برای youtube-dl در mpv. .br .IR پیش‌فرض: " $video_pref+$audio_pref/best/$video_pref/$audio_pref" .TP .RB $ url_handler_opts گزینه‌هایی که به گرداننده آدرس اینترنتی پاس داده می‌شوند؛ به‌طور پیش‌فرض این گزینه‌های اضافی به mpv منتقل می‌شوند. این مقدار را می‌توان در فایل پیکربندی نیز با .BR url_handler_opts تنظیم کرد. .RE .RE .PP گزینه‌های منو .RS .TP .RB $ interface رابط کاربری یا منوی مورد استفاده. .br توصیه می‌شود از این متغیر مستقیماً استفاده نکنید، بلکه از دستور زیر استفاده نمایید: .B load_interface "interface-name" .br گزینه‌های معتبر: .RS .TP .IR ext مشابه \-D .TP .IR scripting هنگامی اعمال می‌شود که از \-a، \-r یا \-A استفاده شود .TP .IR "''" پیش‌فرض .RE .TP .RB $ external_menu_len تعداد ستون‌ها در interface_ext، (\-D) .br .IR پیش‌فرض: " 210" .TP .RB $ fzf_preview_side جهت نمایش پیش‌نمایش در fzf. .br گزینه‌های معتبر: .RS .TP .IR left .TP .IR right .TP .IR up .TP .IR down .TP .IR پیش‌فرض: " left" .RE .TP .RB $ preview_window_width میزان فضای مورد استفاده برای پیش‌نمایش fzf .br .IR پیش‌فرض: " 50%" .TP .RB $ thumbnail_viewer برنامه مورد استفاده برای نمایش تصاویر بندانگشتی پیش‌نمایش .br توصیه می‌شود مستقیماً از این متغیر استفاده نکنید، بلکه از دستور زیر استفاده کنید: .B load_thumbnail_viewer "viewer" .br گزینه‌های معتبر: .RS .TP .IR sixel .TP .IR iterm2 .TP .IR kitty .TP .IR sway .TP .IR wayland .TP .IR ueberzug .TP .IR chafa .TP .IR chafa-16 استفاده از chafa با ۱۶ رنگ .TP .IR chafa-tty استفاده از chafa با ۴ رنگ .TP .IR catimg .TP .IR catimg-256 استفاده از catimg با ۲۵۶ رنگ .TP .IR mpv استفاده از پخش‌کننده mpv برای نمایش تصاویر .br به خوبی با مدیر پنجره‌های کاشی‌کاری (tiling) کار می‌کند. .TP .IR imv مشابه mpv، اما یک نمایش‌دهنده اختصاصی تصویر است .TP .IR swayimg فقط روی کامپوزیتور sway در ویلند کار می‌کند .TP .IR swayimg-hyprland فقط روی کامپوزیتور hyprland کار می‌کند. از swayimg برای رندر تصاویر استفاده می‌کند. .TP .IR پیش‌فرض: " ueberzug" .RE .TP .RB $ show_formats تعیین می‌کند که آیا منوی انتخاب فرمت نمایش داده شود یا خیر. .br .IR پیش‌فرض: " 0" .TP .RB $ format_selection_screen صفحه انتخاب فرمتی که استفاده خواهد شد. انواع: .RS .IR simple .IR normal .br .IR پیش‌فرض: " simple" .RE .TP .RB $ format_selection_sort مقدار \-\-format\-sort مورد استفاده در ytdl. .br .IR پیش‌فرض: " height" .TP .RB $ enable_submenus تعیین می‌کند که آیا زیرمنوها فعال شوند یا خیر. .br زیرمنو منویی است که پس از انتخاب یک لیست پخش یا کانال نمایش داده می‌شود. (در حال حاضر فقط با اسکرپر youtube/invidious پشتیبانی می‌شود) .IR پیش‌فرض: " 1" .TP .RB $ enable_actions تعیین می‌کند که آیا عملیات‌هایی مانند زیرمنوها و دکمه بازگشت فعال شوند یا خیر. .br .IR پیش‌فرض: " 1" .TP .BR $ keep_vars تعیین می‌کند که آیا گزینه‌های ارسال‌شده به ytfzf به زیرمنوها نیز منتقل شوند یا خیر. .TP .RB $ enable_back_button تعیین می‌کند که آیا دکمه بازگشت در زیرمنوها فعال باشد یا خیر. .IR پیش‌فرض: " 1" .TP .RB $ submenu_opts گزینه‌های مورد استفاده در زیرمنوها. .IR پیش‌فرض: "" .TP .RB $ submenu_scraping_opts .B منسوخ‌شده "(به‌جای آن از submenu_opts استفاده کنید)" عملیاتی مشابه $submenu_opts انجام می‌دهد. .IR پیش‌فرض: "" .TP .RB $ is_sort تعیین می‌کند که آیا ویدیوهای استخراج‌شده در منو بر اساس تاریخ مرتب شوند یا خیر. .IR پیش‌فرض: " 0" .TP .RB $ fancy_subs تعیین می‌کند که آیا بین هر اشتراک جداکننده‌ای قرار گیرد یا خیر. .IR پیش‌فرض: " 0" .TP .RB $ fancy_subs_left متنی که هنگام برابر بودن fancy_subs با 1، در سمت چپ نام کانال نمایش داده می‌شود. .IR پیش‌فرض: " -------------" .TP .RB $ fancy_subs_right متنی که هنگام برابر بودن fancy_subs با 1، در سمت راست نام کانال نمایش داده می‌شود. .IR پیش‌فرض: " $fancy_subs_left" .TP .RB $ show_thumbnails تعیین می‌کند که آیا تصاویر بندانگشتی در fzf نمایش داده شوند یا خیر. .br .IR پیش‌فرض: " 0" .BR $ async_thumbnails تعیین می‌کند که آیا تصاویر بندانگشتی به صورت ناهمگام (آسنکرون) بارگیری شوند یا خیر. .br بارگیری ناهمگام باعث می‌شود منو قبل از بارگیری کامل تمام تصاویر بندانگشتی باز شود. .IR پیش‌فرض: " 0" .TP .RB $ skip_thumb_download تعیین می‌کند که آیا از دانلود تصاویر بندانگشتی صرف‌نظر شود یا خیر. .br .IR پیش‌فرض: " 0" .TP .RB $ thumbnail_quality انتخاب کیفیت تصاویر بندانگشتی. در حال حاضر فقط از یوتیوب پشتیبانی می‌کند (از API سرویس invidious استفاده می‌کند). .br این گزینه برای اسکرپر \(aq\fB\-cS\fR\(aq کار نمی‌کند زیرا مستقیماً یوتیوب را اسکرپ می‌کند نه invidious (به‌جای آن از \(aq\fBSI\fR\(aq استفاده کنید). .br برای سرعت‌های پایین‌تر اینترنت، توصیه می‌شود از پیش‌فرض استفاده شود. .br گزینه‌های موجود: .RS .TP .IR maxres .TP .IR maxresdefault .TP .IR sddefault .TP .IR high " (پیش‌فرض)" .TP .IR medium .TP .IR default .TP .IR start فریم اول ویدیو (کیفیت پایین) .TP .IR middle فریم میانی ویدیو (کیفیت پایین) .TP .IR end فریم پایانی ویدیو (کیفیت پایین) .RE .br .TP .RB $ notify_playing تعیین می‌کند که آیا هنگام نزدیک شدن به زمان پخش ویدیو اعلانی ارسال شود یا خیر. .br .IR پیش‌فرض: " 0" .TP .RB $ is_loop تعیین می‌کند که آیا پس از پایان پخش ویدیوهای انتخاب‌شده، منو نمایش داده شود یا خیر. .br .IR پیش‌فرض: " 0" .TP .RB $ search_again تعیین می‌کند که آیا پس از بستن fzf جستجوی دیگری انجام شود یا خیر. .br .IR پیش‌فرض: " 0" .TP .RB $ selection_meta_key کلید متا برای میانبرهایی که یک ویدیو را انتخاب می‌کنند. .br .IR پیش‌فرض: " alt" .TP .RB $ download_shortcut کلید میانبر برای دانلود ویدیوهای انتخاب‌شده. .br .IR پیش‌فرض: " $selection_meta_key-d" .TP .RB $ video_shortcut کلید میانبر برای تماشای ویدیوهای انتخاب‌شده. .br .IR پیش‌فرض: " $selection_meta_key-v" .TP .RB $ audio_shortcut کلید میانبر برای شنیدن ویدیوهای انتخاب‌شده. .br .IR پیش‌فرض: " $selection_meta_key-m" .TP .RB $ detach_shortcut کلید میانبر برای استفاده از پخش‌کننده مجزا (detach). .br .IR پیش‌فرض: " $selection_meta_key-e" .TP .RB $ print_link_shortcut کلید میانبر مورد استفاده برای چاپ پیوند. .br .IR پیش‌فرض: " $selection_meta_key-l" .TP .RB $ show_formats_shortcut کلید میانبر برای نمایش فرمت‌ها پیش از پخش ویدیو. .br .IR پیش‌فرض: " $selection_meta_key-f" .TP .RB $ info_shortcut کلید میانبر برای دریافت تمام اطلاعات درباره ویدیوی انتخاب‌شده. .br .IR پیش‌فرض: " $selection_meta_key-i" .TP .RB $ search_again_shortcut کلید میانبر برای انجام یک جستجوی دیگر. .br .IR پیش‌فرض: " $selection_meta_key-s" .TP .RB $ action_meta_key کلید متا برای میانبرهایی که عملیاتی انجام می‌دهند. .br .IR پیش‌فرض: " ctrl" .TP .RB next_page_action_shortcut کلید میانبر برای استخراج صفحه بعدی. .br .IR پیش‌فرض: " $action_meta_key-p" .TP .RB $ shortcut_binds کلیدهایی که در fzf دریافت و شنود می‌شوند. .br .IR پیش‌فرض: " Enter,double-click,$download_shortcut, $video_shortcut,$detach_shortcut,$print_link_shortcut,$show_formats_shortcut, $info_shortcut,$search_again_shortcut,$custom_shortcut_binds" .TP .RB $ custom_shortcut_binds کلیدهای میانبر سفارشی. به‌طور خودکار به انتهای $shortcut_binds افزوده می‌شوند. .br اگر $shortcut_binds به صورت دستی تنظیم شود، این متغیر نیز باید دستی اضافه شود. .RE .PP انتخاب خودکار .RS .TP .RB $ is_auto_select تعیین می‌کند که آیا \-n ویدیوی اول به طور خودکار انتخاب شوند یا خیر (فقط زمانی عمل می‌کند که $interface=scripting باشد). .br .IR پیش‌فرض: " 0" .TP .RB $ is_random_select تعیین می‌کند که آیا \-n ویدیو به صورت تصادفی انتخاب شوند یا خیر (فقط زمانی عمل می‌کند که $interface=scripting باشد). .br .IR پیش‌فرض: " 0" .TP .RB $ is_specific_select تعیین می‌کند که آیا یک ویدیوی مشخص انتخاب شود یا خیر (از $scripting_video_count برای مشخص کردن آن استفاده کنید) (فقط زمانی عمل می‌کند که $interface=scripting باشد). .br .IR پیش‌فرض: " 0" .TP .RB $ scripting_video_count تعداد ویدیوهایی که باید با \-a یا \-r دریافت شوند. .br .IR پیش‌فرض: " 1" .RE .PP اسکرپرها (استخراج‌کننده‌ها) .RS .TP .RB $ scrape وب‌سایتی که باید به صورت پیش‌فرض استخراج شود. گزینه‌های پشتیبانی‌شده فعلی عبارتند از: .RS .TP .IR youtube , .TP .IR youtube\-trending , .TP .IR youtube\-subscriptions , .TP .IR peertube , .TP .IR odysee / lbry . .TP .IR youtube-playlist , .TP .IR youtube-channel , .TP .IR invidious-channel , .TP .IR video-recommended , .TP .IR playlist/json-file , .PP جستجو به صورت مسیری به یک فایل json خواهد بود که مطابق با ساختار فرمت ویدیویی JSON سازمان‌دهی شده است. .TP .IR history , .TP .IR url/U , .TP .IR u , .TP .IR M / multi , .TP .IR comments .br .IR پیش‌فرض: " youtube" .RE .TP .RB $ multi_search تعیین می‌کند که آیا جستجوی چندگانه فعال باشد یا خیر. .IR پیش‌فرض: " 0" .TP .RB $ search_sort_by ویژگی مورد نظر برای مرتب‌سازی هنگام جستجو. .RS .TP .IR relevance " (پیش‌فرض)" .TP .IR rating " (فقط یوتیوب)" .TP .IR upload_date .TP .IR oldest_first " (فقط odysee)" .TP .IR view_count " (فقط یوتیوب)" .RE .TP .RB $ search_upload_date جستجوی ویدیوها در بازه زمانی: .RS .TP .IR hour یک ساعت گذشته .TP .IR today امروز .TP .IR week هفته گذشته .TP .IR month ماه گذشته .TP .IR year سال گذشته .RE .TP .RB $ search_video_duration تعیین جستجو برای ویدیوهای کوتاه یا بلند. گزینه‌های ممکن: .RS .TP .IR short .TP .IR long .RE .TP .RB $ search_result_type نوع نتایج دریافتی. .RS .TP .IR video " (پیش‌فرض)" .TP .IR playlist .TP .IR channel .TP .IR all " (ممکن است در برخی نمونه‌ها کار نکند)" .RE .TP .RB $ nsfw تعیین جستجو برای ویدیوهای دارای محتوای بزرگسالان (nsfw) در odysee/O. .br .IR پیش‌فرض: " false" .TP .RB $ search_result_features ویژگی‌هایی که ویدیو باید داشته باشد (جداشده با کاما). .RS .TP .IR hd .TP .IR subtitles .TP .IR creative_commons .TP .IR 3d .TP .IR live .TP .IR 4k .TP .IR 360 .TP .IR location .TP .IR hdr .RE .TP .RB $ search_region منطقه جغرافیایی (کد کشور) برای جستجو. .IR پیش‌فرض: " US" .TP .RB $ invidious_instance نمونه invidious مورد استفاده. .br .IR پیش‌فرض: " https://vid.puffyan.us" .TP .RB $ pages_to_scrape تعداد صفحات برای استخراج در یوتیوب/invidious. .br .IR پیش‌فرض: " 1" .TP .RB $ pages_start صفحه آغازین برای استخراج. .br .IR پیش‌فرض: " 1" .TP .RB $ max_thread_count تعداد رشته‌هایی (threads) که می‌توان هنگام استخراج جستجوی یوتیوب، لیست‌های پخش و کانال‌ها استفاده کرد. (این مورد برای اسکرپر اشتراک‌ها اعمال نمی‌شود) .br .IR پیش‌فرض: " 20" .TP .RB $ odysee_video_search_count تعداد ویدیوها برای استخراج در odysee. .br .IR پیش‌فرض: " 30" .TP .RB $ sub_link_count تعداد ویدیوها برای استخراج به ازای هر کانال هنگام دریافت اشتراک‌ها. .br .IR پیش‌فرض: " 2" .RE .PP متفرقه .RS .TP .RB $ gap_space میزان فاصله پس از عنوان در منوی نمایش‌دهنده بندانگشتی. .IR پیش‌فرض: "' '" .TP .RB $ scrape_search_exclude اسکرپرهایی که نباید عبارت جستجو درخواست کنند. .br دقت داشته باشید که در ابتدا و انتهای رشته یک فاصله قرار دهید. .br .IR پیش‌فرض: " youtube-subscriptions S SI T youtube-trending H history " .TP .RB $ custom_scrape_search_exclude اسکرپرهای اضافی که نباید عبارت جستجو درخواست کنند. .br این مقدار به‌طور خودکار به انتهای $scrape_search_exclude اضافه می‌شود. .br علاوه بر این، نیازی به فاصله در ابتدا و انتهای آن نیست، فقط بین نام اسکرپرها فاصله بگذارید. .IR پیش‌فرض: "" .TP .RB $ gap_space تعدادی فاصله معادل نصف عرض ترمینال شما .br .IR پیش‌فرض: " 115 spaces" .TP .RB $ enable_hist تعیین ذخیره و ردیابی تاریخچه تماشا .br .IR پیش‌فرض: " 1" .TP .RB $ enable_search_hist تعیین ذخیره و ردیابی تاریخچه جستجو .br .IR پیش‌فرض: " 1" .TP .RB $ search_source نحوه دریافت عبارت جستجو. مقادیر توکار برای این متغیر عبارتند از: .RS .TP .RB args استفاده از آرگومان‌های خط فرمان به عنوان جستجو (پیش‌فرض) .TP .RB prompt درخواست جستجو از طریق یک اعلان (پرامپت) .TP .RB hist استفاده از تاریخچه جستجو. .TP .RB next استفاده داخلی برای بهره‌گیری از جستجوی بعدی در فهرست هنگامی که \fBmulti_search\fR فعال است. .TP .RB fn-args استفاده داخلی برای بهره‌گیری از آرگومان‌های ارسالی به تابع به عنوان منبع. .RE .TP .RB $ log_level میزان ثبت اطلاعات اشکال‌زدایی (دیباگ). .RS .TP .IR 2 ثبت همه‌چیز .TP .IR 1 ثبت تنها هشدارها و خطاها .TP .IR 0 ثبت تنها خطاها .TP .IR پیش‌فرض: " 2" .RE .TP .RB $ thumbnail_debug_log فایل لاگ برای اطلاعات اشکال‌زدایی بندانگشتی‌ها. .IR پیش‌فرض: "/dev/null" .TP .RB $ useragent رشته useragent مورد استفاده هنگام استخراج وب‌سایت‌ها. .br .IR پیش‌فرض: " \(dqMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.152 Safari/537.36\(dq" .TP .RB $ ytdl_opts گزینه‌های خط فرمان برای ارسال به youtube\-dl هنگام بارگیری. .TP .RB $ ytdl_path مسیر اجرای youtube\-dl یا نسخه‌های فورک‌شده از آن برای دانلود. .br اگر .I yt-dlp نصب باشد، به .I youtube-dl ترجیح داده می‌شود. .br .IR پیش‌فرض: " youtube\-dl" .RE .PP تجزیه گزینه‌ها (Option Parsing) .RS .TP .RB $ long_opt_char نویسه مورد استفاده برای گزینه‌های طولانی. .br .IR پیش‌فرض: " \-" .TP .RB $ optstring رشته گزینه‌های مورد استفاده برای تابع \fBgetopts\fR. .br اکیداً توصیه می‌شود این متغیر را تغییر ندهید، مگر اینکه دقیقاً بدانید چه کاری انجام می‌دهید. .br .IR پیش‌فرض: " ac:de:fhi:lmn:qrstu:xADHI:LS:T:W:\fI$long_opt_char\fR:" .TP .RB $ YTFZF_CHECK_VARS_EXISTS تعیین بررسی وجود قبلی متغیرها در محیط هنگام تنظیم گزینه‌های پیش‌فرض. .br این گزینه را نمی‌توان در فایل پیکربندی تنظیم کرد، بلکه باید در شل راه‌اندازی با دستور export، یا قبل از اجرای ytfzf مشخص شود، مانند: .I YTFZF_CHECK_VARS_EXISTS=0 ytfzf ... .br .IR پیش‌فرض: 1 .RE .PP وضعیت (State) .br مقادیر وضعیت برای تغییر توسط کاربر در نظر گرفته \fBنشده‌اند\fR. .RS .TP .RB $ __is_submenu تعیین می‌کند که آیا اسکریپت در یک زیرمنو قرار دارد یا خیر. .TP .RB $ __is_fzf_preview تعیین می‌کند که آیا اسکریپت برای نمایش پیش‌نمایش fzf در حال اجرا است یا خیر. .TP .RB __scrape_count شمارش استخراج فعلی که از 1 شروع می‌شود. .SS "توابع (FUNCTIONS)" .PP گاهی اوقات یک متغیر کافی نیست و در عوض باید توابعی تعریف شوند. برای یافتن مقدار پیش‌فرض این توابع، کد منبع را با جستجوی عبارت زیر بررسی کنید: .IR "function_exists \(dq\(dq" . .PP توابع مربوط به منو .RS .TP .BR external_menu () هنگامی که $\fBinterface\fR برابر \fIext_menu\fR باشد، این تابع به جای fzf فراخوانی می‌شود. .br این تابع ۱ آرگومان می‌پذیرد که یک رشته اعلان (prompt) است. .TP .BR get_sort_by () این تابع برای دریافت مقداری که باید مرتب‌سازی بر اساس آن انجام شود، فراخوانی می‌شود هنگامی که $\fBis_sort\fR برابر \fI1\fR باشد. .br این تابع خطی به شکل زیر دریافت می‌کند: .IR "\(dqtitle |channel |duration |views |date |id\(dq" . .TP .BR data_sort_fn () این تابع داده‌هایی را که به آن پایپ می‌شوند مرتب می‌کند. .br این تابع هیچ آرگومانی نمی‌پذیرد، تمام داده‌ها به آن پایپ می‌شوند. .TP .BR custom_info_wait_action_ () این تابع زمانی فراخوانی می‌شود که یک مقدار ناشناخته برای $info_wait_action داده یا خوانده شود. .br عبارت باید با متن مورد نظر از $info_wait_action جایگزین شود، به عنوان مثال: \fIcustom_info_wait_e\fR. .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR video_info_text () این تابع متن منوی انتخاب را چاپ می‌کند. .br باید به یک خط جدید ختم شود، .br نشانی url باید آخرین موردی باشد که چاپ می‌شود. .br این تابع هیچ آرگومانی نمی‌پذیرد، متغیرهای مرتبط در اینجا فهرست شده‌اند: .RS .EX .I title .I channel .I duration .I views .I date .I url .EE توصیه می‌شود اسکریپت را بررسی کنید تا ببینید هر مورد چگونه چاپ می‌شود. .RE .TP .BR thumbnail_video_info_text () این تابع متنی را در ناحیه پیش‌نمایش fzf هنگام فعال بودن تصاویر بندانگشتی چاپ می‌کند. .br همه‌چیز را می‌توان به هر شکلی که مایلید چاپ کرد. .br این تابع هیچ آرگومانی نمی‌پذیرد، متغیرهای مرتبط در اینجا فهرست شده‌اند: .RS .EX .I title .I channel .I duration .I views .I date .I url .EE .RE .TP .BR thumbnail_video_info_text_ () این تابع همانند thumbnail_video_info_text() برای اسکرپر مشخص‌شده عمل می‌کند. .TP .BR on_no_thumbnail () این تابع زمانی اجرا می‌شود که هیچ تصویر بندانگشتی یافت نشود .TP .BR get_ueberzug_positioning_left () این تابع متغیرهای $width، $height، $x و $y را تنظیم می‌کند. $x و $y باید نشان‌دهنده ستون‌ها و خطوط باشند نه پیکسل‌ها. .br این متغیرها برای تعیین موقعیت و اندازه تصویر در پیش‌نمایش fzf هنگامی که $fzf_preview_side برابر left باشد استفاده می‌شوند. .br این تابع ۲ آرگومان می‌پذیرد: .RS .EX .I max_width .I max_height .RE .TP .BR get_ueberzug_positioning_right () این تابع متغیرهای $width، $height، $x و $y را تنظیم می‌کند. $x و $y باید نشان‌دهنده ستون‌ها و خطوط باشند نه پیکسل‌ها. .br این متغیرها برای تعیین موقعیت و اندازه تصویر در پیش‌نمایش fzf هنگامی که $fzf_preview_side برابر right باشد استفاده می‌شوند. .br این تابع ۲ آرگومان می‌پذیرد: .RS .EX .I max_width .I max_height .RE .TP .BR get_ueberzug_positioning_up () این تابع متغیرهای $width، $height، $x و $y را تنظیم می‌کند. $x و $y باید نشان‌دهنده ستون‌ها و خطوط باشند نه پیکسل‌ها. .br این متغیرها برای تعیین موقعیت و اندازه تصویر در پیش‌نمایش fzf هنگامی که $fzf_preview_side برابر up باشد استفاده می‌شوند. .br این تابع ۲ آرگومان می‌پذیرد: .RS .EX .I max_width .I max_height .RE .TP .BR get_ueberzug_positioning_down () این تابع متغیرهای $width، $height، $x و $y را تنظیم می‌کند. $x و $y باید نشان‌دهنده ستون‌ها و خطوط باشند نه پیکسل‌ها. .br این متغیرها برای تعیین موقعیت و اندازه تصویر در پیش‌نمایش fzf هنگامی که $fzf_preview_side برابر down باشد استفاده می‌شوند. .br این تابع ۲ آرگومان می‌پذیرد: .RS .EX .I max_width .I max_height .RE .TP .BR get_swayimg_positioning_left () این تابع متغیرهای $x، $y، $img_w و $img_h را تنظیم می‌کند. $x و $y باید بر حسب پیکسل باشند. .br این متغیرها برای تعیین موقعیت و اندازه تصویر در پیش‌نمایش fzf هنگامی که $fzf_preview_side برابر left باشد استفاده می‌شوند. .br این تابع ۸ آرگومان می‌پذیرد: .RS .EX .I img_w .I img_h .I max_width .I max_height .I max_height .I term_x .I term_y .I col_px_width .I line_px_height .RE .TP .BR get_swayimg_positioning_right () این تابع متغیرهای $x، $y، $img_w و $img_h را تنظیم می‌کند. $x و $y باید بر حسب پیکسل باشند. .br این متغیرها برای تعیین موقعیت و اندازه تصویر در پیش‌نمایش fzf هنگامی که $fzf_preview_side برابر right باشد استفاده می‌شوند. .br این تابع ۸ آرگومان می‌پذیرد: .RS .EX .I img_w .I img_h .I max_width .I max_height .I max_height .I term_x .I term_y .I col_px_width .I line_px_height .RE .TP .BR get_swayimg_positioning_up () این تابع متغیرهای $x، $y، $img_w و $img_h را تنظیم می‌کند. $x و $y باید بر حسب پیکسل باشند. .br این متغیرها برای تعیین موقعیت و اندازه تصویر در پیش‌نمایش fzf هنگامی که $fzf_preview_side برابر up باشد استفاده می‌شوند. .br این تابع ۸ آرگومان می‌پذیرد: .RS .EX .I img_w .I img_h .I max_width .I max_height .I max_height .I term_x .I term_y .I col_px_width .I line_px_height .RE .TP .BR get_swayimg_positioning_down () این تابع متغیرهای $x، $y، $img_w و $img_h را تنظیم می‌کند. $x و $y باید بر حسب پیکسل باشند. .br این متغیرها برای تعیین موقعیت و اندازه تصویر در پیش‌نمایش fzf هنگامی که $fzf_preview_side برابر down باشد استفاده می‌شوند. .br این تابع ۸ آرگومان می‌پذیرد: .RS .EX .I img_w .I img_h .I max_width .I max_height .I max_height .I term_x .I term_y .I col_px_width .I line_px_height .RE .TP .BR search_prompt_menu () این تابع از کاربر درخواست می‌کند تا یک عبارت جستجو وارد کند و متغیر $_search را روی آن عبارت تنظیم می‌کند. .br این تابع زمانی فراخوانی می‌شود که ytfzf بدون جستجو اجرا شود (و از رابط پیش‌فرض استفاده کند). .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR search_prompt_ext () این تابع از کاربر درخواست می‌کند تا یک عبارت جستجو وارد کند و متغیر $_search را روی آن عبارت تنظیم می‌کند. .br این تابع زمانی فراخوانی می‌شود که ytfzf بدون جستجو اجرا شود (و از فلگ \-D استفاده کند). .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR quick_menu () این تابع باید ورودی کاربر را دریافت کرده و آن را برگرداند (echo کند) .br این تابع با \-f و \-q فراخوانی می‌شود، یا در هر زمان دیگری که به یک منوی عمومی نیاز باشد (و رابط پیش‌فرض استفاده شود). .br این تابع ۱ آرگومان می‌گیرد و ورودی را از stdin دریافت می‌کند .br 1: اعلانی که باید استفاده شود. .br stdin: مواردی که باید از بین آن‌ها انتخاب شود (جداشده با خطوط جدید) .TP .BR quick_menu_ext () این تابع باید همان کار quick_menu() را انجام دهد .br این تابع در همان شرایط quick_menu() اما هنگامی که \-D فعال باشد فراخوانی می‌شود. .br این تابع ۱ آرگومان می‌گیرد و ورودی را از stdin دریافت می‌کند .br 1: اعلانی که باید استفاده شود. .br stdin: مواردی که باید از بین آن‌ها انتخاب شود (جداشده با خطوط جدید) .TP .BR info_wait_prompt () اعلانی که هنگام فعال بودن \fBinfo_wait\fR استفاده می‌شود. .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR info_wait_prompt_ext () مشابه \fBinfo_wait_prompt()\fR هنگامی که از \-D استفاده شود. .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR info_wait_prompt_wrapper () فراخوانی info_wait_prompt_ .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR display_text () چاپ متن در خروجی استاندارد. .br این تابع تعداد نامحدودی از آرگومان‌ها را برای چاپ می‌پذیرد. .TP .BR display_text_ext () چاپ متن در خروجی استاندارد. .br این تابع تعداد نامحدودی از آرگومان‌ها را برای چاپ می‌پذیرد. .RE .TP .BR display_text_wrapper () فراخوانی display_text_ .br این تابع تعداد نامحدودی از آرگومان‌ها را برای چاپ می‌پذیرد. .RE .PP گرداننده‌های نشانی وب (URL handlers) .RS .PP یک گرداننده URL تابعی است که به آدرس‌های ارائه‌شده رسیدگی می‌کند، .br گرداننده‌های URL باید این مقادیر اصلاح‌کننده را لحاظ کنند: .B $video_pref ", " .B $is_audio_only ", " و .B $is_detach .PP متغیرهای اصلاح‌کننده به درون یک گرداننده URL پایپ می‌شوند تا امکان نوشتن گرداننده‌های URL با هر زبان برنامه‌نویسی فراهم شود. .br آن‌ها به ترتیبی که در بالا نشان داده شد، جداشده با فاصله پایپ خواهند شد. .TP .BR multimedia_player () گرداننده‌ای که به طور پیش‌فرض فراخوانی می‌شود. .br این تابع بسته به اینکه آیا .br $is_audio_only (\-m) فعال است یا خیر، video_player() یا audio_player() را باز می‌کند. .br این تابع تعداد نامحدودی آرگومان می‌پذیرد که هر یک پیوندی به یک ویدیو است. .TP .BR video_player () نشانی‌ها را با یک پخش‌کننده ویدیو پخش می‌کند .br این تابع تعداد نامحدودی آرگومان می‌پذیرد که هر یک پیوندی به یک ویدیو است. .TP .BR audio_player () نشانی‌ها را با یک پخش‌کننده صوتی پخش می‌کند .br این تابع تعداد نامحدودی آرگومان می‌پذیرد که هر یک پیوندی به یک ویدیو است. .TP .BR downloader () نشانی‌ها را بارگیری (دانلود) می‌کند .br این تابع تعداد نامحدودی آرگومان می‌پذیرد که هر یک پیوندی به یک ویدیو است. .TP .BR get_video_format_() صفحه سفارشی انتخاب فرمت .br عبارت باید مقدار مورد نظر از $format_selection_screen باشد .br این تابع باید مقدار ytdl_pref را تنظیم کند .br این تابع تمامی نشانی‌ها را به عنوان آرگومان‌های جداگانه دریافت می‌کند. .TP .BR on_open_url_handler_() این تابع هنگام فراخوانی \fBopen_url_handler\fR، اما قبل از اینکه گرداننده نشانی عملاً باز شود اجرا می‌گردد. .br این تابع تعداد نامحدودی آرگومان می‌پذیرد که هر آرگومان نشانی اینترنتی باز شده است. .TP .BR close_url_handler_ عبارت باید نام گرداننده نشانی باشد در حالی که \- با _ جایگزین شده است. .br تابعی که پس از اتمام پخش توسط گرداننده نشانی اجرا می‌شود. .br هدف این تابع پاکسازی هر تغییری است که گرداننده نشانی انجام داده است. .TP .BR after_close_url_handler_ تابعی که پس از اتمام پخش توسط گرداننده نشانی و پس از اجرای .BR close_url_handler_ اتفاق می‌افتد. .br اگر .BR is_detach برابر با .I 1 باشد، این تابع ممکن است بلافاصله پس از باز شدن .BR url_handler فراخوانی گردد. .RE .PP تاریخچه جستجو (Search History) .RS .TP .BR handle_search_history() این تابع الحاق عبارت جستجو به فایل جستجوی داده‌شده را مدیریت می‌کند. .br این تابع ۲ آرگومان می‌پذیرد: .RS .TP .IR 1 جستجویی که باید نوشته شود .TP .IR 2 فایلی که باید به آن الحاق شود. .RE .TP .BR parse_search_hist_file() این تابع باید فایل تاریخچه جستجو را تجزیه کرده و هر عبارت جستجو را در یک خط جداگانه چاپ کند. .br فایل تاریخچه جستجو از طریق stdin به آن ارسال خواهد شد. .TP .BR get_search_from_() اگر search_source روی تنظیم شده باشد این تابع فراخوانی خواهد شد. انتظار می‌رود این تابع متغیر \fB_search\fR را روی یک عبارت جستجو تنظیم کند. .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR on_search () این تابع هر بار که یک وب‌سایت استخراج می‌شود فراخوانی می‌گردد. .br این تابع ۲ آرگومان می‌پذیرد: .EX .I 1 .ti +4 عبارت جستجو .I 2 .ti +4 استخراج فعلی .EE .TP .BR on_search_ () این تابع در صورت تطابق جستجوی فعلی با ، هر بار که یک وب‌سایت استخراج می‌شود فراخوانی می‌گردد. .br این تابع ۱ آرگومان می‌پذیرد. .RS .TP .I 1 استخراج فعلی .RE .RE .PP متفرقه .RS .TP .BR get_requested_info_() اگر در \fBinfo_to_print\fR وجود داشته باشد، این تابع اجرا خواهد شد. .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR handle_playing_notifications() این تابع برای ویدیوهایی که در شرف پخش هستند یک اعلان ارسال می‌کند. .br این تابع تعداد نامشخصی از نشانی‌ها را به عنوان آرگومان می‌پذیرد. .TP .BR post_scrape() این تابع پس از اتمام کامل تمامی استخراج‌ها اجرا می‌شود .TP .BR post_scrape_() مشابه post_scrape() اما برای هر افزونه .TP .BR on_opt_parse () این تابع پس از تجزیه یک گزینه فراخوانی می‌شود و متغیرها را بر اساس گزینه‌های ارسالی به آن تنظیم می‌کند. کد خروج غیر صفر، رفتار پیش‌فرض یک گزینه خاص را بازنویسی (override) خواهد کرد. .br این تابع ۴ آرگومان می‌پذیرد: .EX .I 1 .ti +4 گزینه فعلی در حال تجزیه .I 2 .ti +4 آرگومان گزینه فعلی در حال تجزیه .I 3 .ti +4 گزینه دست‌نخورده در حال تجزیه. .ti +4 برای گزینه‌ای مانند \-a، این مقدار برابر با $1 خواهد بود. .ti +4 با این حال، برای هر گزینه طولانی \-\-long\-option این مقدار برابر با "\-" خواهد بود. .I 4 .ti +4 آرگومان دست‌نخورده گزینه در حال تجزیه. .ti +4 برای گزینه‌ای مانند \-c S، این مقدار برابر با $2 خواهد بود. .ti +4 اما برای هر \-\-long\-option=value، این مقدار برابر با \-long\-option=value خواهد بود. .EE .TP .BR on_opt_parse_ () این تابع قبل از تجزیه یک گزینه فراخوانی می‌شود. کد خروج غیر صفر، رفتار پیش‌فرض یک گزینه خاص را بازنویسی خواهد کرد. .br این تابع ۳ آرگومان می‌پذیرد: .RS .TP .I 1 آرگومان گزینه (optarg) .TP .I 2 گزینه خام .TP .I 3 آرگومان خام گزینه .RE .TP .BR on_post_set_vars () این تابع پس از تنظیم تمامی متغیرها و تجزیه همه گزینه‌ها فراخوانی می‌شود. .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR on_clean_up () این تابع زمانی فراخوانی می‌شود که اسکریپت در حال پاکسازی فایل‌های به جامانده از جستجو است، یا هنگامی که اسکریپت خارج می‌شود. .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR usage () این تابع print_help_ را به ازای هر افزونه بارگذاری‌شده فراخوانی می‌کند. .br این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR handle_custom_keypresses () این تابع درون تابع داخلی handle_keypress() فراخوانی می‌شود. این تابع باید مقدار 0 را برگرداند تا تابع پیش‌فرض handle_keypress() بازنویسی نشود. .br این تابع ۱ آرگومان می‌پذیرد: .EX .I 1 .ti +4 کلید فشرده‌شده. .EE .TP .BR handle_custom_post_keypresses () این تابع درون تابع داخلی handle_post_keypress() فراخوانی می‌شود، این تابع باید 0 را برگرداند تا تابع پیش‌فرض handle_post_keypress() بازنویسی نشود. .br وظیفه این تابع برگرداندن تغییرات حاصل از آخرین کلید فشرده‌شده است. .br این تابع هیچ آرگومانی نمی‌پذیرد، و باید کلید فشرده‌شده را از $keypress_file بخواند. .TP .BR handle_keypress_* () در نام این تابع باید "*" با نام کلید میانبر جایگزین شود، مثلاً: \fIalt_d\fR .br علاوه بر این هر "\-" را با "_" جایگزین کنید. .br این تابع پس از handle_custom_keypresses() در صورتی که 0 برگردانده باشد و میانبر جزو میانبرهای توکار نباشد فراخوانی می‌گردد. .br این تابع ۰ آرگومان می‌پذیرد. .TP .BR handle_post_keypress_* () در نام این تابع باید "*" با نام کلید میانبر جایگزین شود، مثلاً: \fIalt_d\fR .br علاوه بر این هر "\-" را با "_" جایگزین کنید. .br این تابع پس از handle_custom_post_keypresses() در صورتی که 0 برگردانده باشد و میانبر جزو میانبرهای توکار نباشد فراخوانی می‌گردد. .br این تابع ۰ آرگومان می‌پذیرد. .TP .BR handle_custom_action () این تابع زمانی فراخوانی می‌شود که یک عملیات ناشناخته (مطابق با توضیحات بخش فرمت ویدیویی JSON) ارائه شود. .br این تابع ۱ آرگومان می‌پذیرد: .EX .I .ti +4 عملیات. .EE .br کدهای خروج: .RS .TP .IR 1 بازگشت به منو .TP .IR 2 خروج .RE .RE .SH "بندانگشتی‌های سفارشی (CUSTOM THUMBNAILS)" .PP تصاویر بندانگشتی سفارشی در مسیر $YTFZF_CUSTOM_THUMBNAILS_DIR قرار دارند. نام تصویر باید به شکل زیر باشد: .I .jpg .PP برای مشاهده یک مثال، جستجویی با \fIytfzf\fR انجام دهید و پوشه \fIthumbnails\fR را در مسیر $cache_dir/search بیابید. .PP سیستم تلاش می‌کند تصاویر بندانگشتی سفارشی را قبل از بندانگشتی رسمی بارگذاری کند. .br اگر هم بندانگشتی سفارشی و هم بندانگشتی رسمی وجود نداشته باشند، ytfzf تلاش خواهد کرد از تصویر زیر استفاده کند: .I $YTFZF_CUSTOM_THUMBNAILS_DIR/YTFZF:DEFAULT.jpg . .SH "فرمت ویدیویی جی‌سان (VIDEO JSON FORMAT)" .PP این قالبی است که برای لیست‌های پخش و اسکرپرهای سفارشی استفاده می‌شود. .br ویدیوها باید شیءهایی (objects) درون یک لیست باشند. .PP کلیدهای الزامی شیء: .EX .RE ID (string): یک شناسه یکتا برای ویدیو url (string): نشانی اینترنتی ویدیو title (string): عنوان ویدیو scraper (string): اسکرپری که json را ایجاد کرده است (برای بندانگشتی‌ها استفاده می‌شود) .EE .RE .PP .RS .EX thumbs (string): یک نشانی به تصویر بندانگشتی channel (string): نام کانال duration (string): مدت زمان ویدیو (استاندارد: [HH:]MM:SS) views (string): تعداد بازدیدهای ویدیو date (string): تاریخ بارگذاری (استاندارد: تاریخ به صورت نسبی نسبت به روز جاری، مثلاً: 3 days ago) action (string): یک عملیات در قالب "action [key=value key2=value2...]" .EE .RE .PP نمونه JSON: .EX [ { "ID": "dQw4w9WgXcQ", "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "title": "definitely not never gonna give you up" } ] .EE .SH "لیست‌های پخش (PLAYLISTS)" .PP یک لیست پخش یک فایل json در قالب فرمت ویدیویی JSON است، برای دریافت آسان json فرمت‌بندی‌شده یک ویدیو، دستور زیر را اجرا کنید: .I "ytfzf -I VJ .RS این تابع زمانی فراخوانی می‌شود که اسکرپر بارگذاری (source) شود (یعنی زمانی که کاربر آن را درخواست کند). .PP این تابع هیچ آرگومانی نمی‌پذیرد. .RE .PP .I thumbnail_video_info_text_ .RS این تابع باید اطلاعات را برای رابط کاربری تصاویر بندانگشتی چاپ کند. .PP این تابع عملاً همانند thumbnail_video_info_text() عمل می‌کند. .RE .PP .IR scrape_next_page_ .RS .PP این تابع باید ویدیوهای بیشتری را از استخراج کند. .br برای اینکه این تابع به درستی با alt-p یا ctrl-p فراخوانی شود، صفحه‌ای که در آن متوقف شده است باید در مسیر ${session_cache_dir}/-current-page نوشته شود. .br که در آن scraper نام اسکرپر با جایگزینی _ به جای \- است. .PP عبارت باید همان نامی باشد که در ویژگی "scraper" در فرمت ویدیویی JSON قرار داده شده است. .PP این تابع زمانی اجرا می‌شود که کاربر در fzf کلیدهای alt-p را فشار دهد. .PP این تابع هیچ آرگومانی نمی‌پذیرد. .RE .PP .IR handle_custom_action_ .RS .PP این تابع به یک عملیات سفارشی رسیدگی می‌کند. .PP عبارت باید نام عملیات باشد که در آن هر "\-" با "_" جایگزین شده است. .PP این تابع ۱ آرگومان می‌پذیرد. .RS .TP .IR 1 آرگومان‌های عملیات .RE کدهای خروج: .RS .TP .IR 1 بازگشت به منو .TP .IR 2 خروج .RS .RE .RE .SH "رابط‌های کاربری سفارشی (CUSTOM INTERFACES)" .PP رابط‌های کاربری سفارشی اسکریپت‌های شل هستند که در مسیر $YTFZF_CUSTOM_INTERFACES_DIR قرار دارند. .br یک رابط کاربری مسئول این است که به کاربر اجازه دهد ویدیویی را از "$ytfzf_video_json_file" انتخاب کند، سپس نشانی(های) را در "$ytfzf_selected_urls" بنویسد. .br اسکریپت شل باید با همان پوسته /bin/sh شما باشد. .br علاوه بر این، اسکریپت باید تابع زیر را نیز تعریف کند: .I interface_ .br با جایگزینی _ به جای \-. .br این تابع می‌تواند خودش همه‌چیز را مدیریت کند، یا برنامه دیگری را که به هر زبانی نوشته شده است برای مدیریت آن فراخوانی کند. .RE .PP تابع interface_ مسیر فایل json حاوی تمام اطلاعات ویدیوها را به عنوان آرگومان اول دریافت می‌کند. .br آرگومان دوم مسیری به فایلی خواهد بود که نشانی‌های انتخاب‌شده باید در آن ذخیره شوند (جداشده با خط جدید). .PP سایر توابعی که اسکرپر ممکن است تعریف کند: .TP .BR search_prompt_menu_ () این تابع باید همان کار search_prompt_menu() را انجام دهد. این تابع هیچ آرگومانی نمی‌پذیرد. .br اگر این تابع تعریف نشده باشد، تابع search_prompt_menu_ext() به جای آن فراخوانی خواهد شد. .TP .BR quick_menu_ () این تابع باید همان کار quick_menu() را انجام دهد. این تابع هیچ آرگومانی نمی‌پذیرد. .br اگر این تابع تعریف نشده باشد، تابع quick_menu_ext() به جای آن فراخوانی خواهد شد. .TP .BR display_text_ () این تابع باید متن را به گونه‌ای نمایش دهد که قابل کپی و چسباندن باشد. این تابع تعداد نامحدودی آرگومان می‌پذیرد. .RS .TP .IR ... متن برای نمایش .RE .TP .BR info_wait_prompt_ () این تابع باید از کاربر بخواهد یکی از گزینه‌های \fBinfo_wait_action\fR را انتخاب کند. سپس باید متغیر \fBinfo_wait_action\fR را برابر با انتخاب کاربر قرار دهد. این تابع هیچ آرگومانی نمی‌پذیرد. .SH "نمایش‌دهنده‌های تصویر بندانگشتی (THUMBNAIL VIEWERS)" نمایش‌دهنده‌های سفارشی تصویر بندانگشتی برنامه‌هایی در $YTFZF_THUMBNAIL_VIEWERS_DIR هستند. آرگومان‌ها: .RS .TP .IR 1 یک عملیات، ۴ نوع عملیات وجود دارد: start، stop، view، no-img .TP .IR 2 مسیر فایل تصویر بندانگشتی. .TP .IR 3 موقعیت افقی x (بر حسب ستون‌ها) برای تصویر .TP .IR 4 موقعیت عمودی y (بر حسب خطوط) برای تصویر .TP .IR 5 عرض تصویر (بر حسب ستون‌ها) .TP .IR 6 ارتفاع تصویر (بر حسب خطوط) .TP .IR 7 حداکثر عرض تصویر (بر حسب ستون‌ها) (عرض در حال حاضر این را لحاظ کرده است) .TP .IR 8 حداکثر ارتفاع تصویر (بر حسب خطوط) (ارتفاع در حال حاضر این را لحاظ کرده است) .TP .IR 9 سمتی از ترمینال برای نمایش تصویر (x، y، عرض و ارتفاع از قبل این مورد را محاسبه کرده‌اند) .br این مقدار یکی از حالت‌های \fIup\fR، \fIdown\fR، \fIleft\fR یا \fIright\fR خواهد بود .RE .SH "افزونه‌ها (EXTENSIONS)" .PP افزونه‌ها اساساً فایل‌های پیکربندی اضافه‌ای هستند که می‌توانید آن‌ها را در فایل پیکربندی خود بارگذاری کنید. .PP افزونه‌ها باید در $YTFZF_EXTENSIONS_DIR یا $YTFZF_SYSTEM_ADDON_DIR/extensions قرار گیرند. .PP یک افزونه می‌تواند هر کاری را که یک فایل پیکربندی انجام می‌دهد انجام دهد، این شامل اصلاح توابع کمکی پیش‌فرض در ytfzf نیز می‌شود (که می‌تواند اسکریپت را با مشکل مواجه کند). .PP به افزونه‌ها متغیری به نام \fB$__loaded_path\fR داده می‌شود که مسیر کامل افزونه بارگذاری‌شده است. .br این ویژگی هنگام نیاز به تعیین مسیر اجرای فعلی افزونه بسیار کاربردی است. .PP برای بارگذاری یک افزونه عبارت زیر را به $YTFZF_CONFIG_FILE اضافه کنید: .I "load_extension name-of-extension" .PP دو افزونه به طور خودکار بارگذاری می‌شوند: .I __ytfzf__ و .I __ytfzf_multisearch__ .br افزونه __ytfzf_multisearch__ تنها زمانی بارگذاری می‌شود که .B $multi_search برابر .I 1 باشد. .PP توابع مربوط به افزونه‌ها، که در آن‌ها با نام افزونه جایگزین می‌شود، و همه \- با _ جایگزین می‌گردند: .TP .BR on_clean_up_ () هنگام خروج اسکریپت اجرا می‌شود. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR on_no_thumbnail_ () زمانی که هیچ بندانگشتی یافت نشود اجرا می‌شود. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR after_close_url_handler_ () پس از بسته شدن گرداننده نشانی اجرا می‌شود. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR on_post_set_vars_ () نام ext_name را با نام یک افزونه جایگزین کنید (در حالی که - با _ جایگزین شده است). این تابع مشابه \fBon_post_set_vars\fR است .TP .BR ext_on_search_ () قبل از استخراج وب‌سایت، برای هر عبارت جستجو اجرا می‌شود. این تابع دو آرگومان می‌پذیرد: .RS .TP .IR 1 جستجوی جاری .TP .IR 2 نوع استخراج جاری .RE .TP .BR post_scrape_ () پس از پایان استخراج اجرا می‌شود. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR on_init_search_ () زمانی که جستجو در حال مقداردهی اولیه است اجرا می‌شود. این تابع یک آرگومان می‌پذیرد: .RS .TP .IR 1 عبارت جستجو .RE .SH "توابع کمکی (UTILITY FUNCTIONS)" .PP یک تابع کمکی، هر تابعی است که می‌تواند در موارد زیر استفاده شود: .I فایل‌های پیکربندی، .I افزونه‌ها، .I نمایش‌دهنده‌های تصویر بندانگشتی، .I رابط‌های کاربری، .I نام‌های مرتب‌سازی، .TP .BR refresh_inv_instances () این تابع پاسخ دریافتی از "https://api.invidious.io/instances.json?sort_by=type,health,api" را در مسیر $cache_dir/instances.json می‌نویسد. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR get_invidious_instances () این تابع نمونه‌های invidious دارای api را دریافت کرده و آن‌ها را به صورت خط‌به‌خط چاپ می‌کند. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR create_sorted_video_data () این تابع یک رشته مرتب‌شده jsonl از ویدیوهای استخراج‌شده را چاپ می‌کند که می‌تواند در یک رابط کاربری مورد استفاده قرار گیرد این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR run_interface () تابع \fBinterface_\fR را اجرا کرده و متغیرهای \fB$ytfzf_video_json_file\fR و \fB$ytfzf_selected_urls\fR را به آن پاس می‌دهد این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR download_thumbnails () اگر \fB$skip_thumb_download\fR برابر 0 باشد، این تابع تصاویر بندانگشتی را دانلود می‌کند. این تابع تعداد نامحدودی آرگومان با قالب‌بندی زیر دریافت می‌کند: .EX .I ; .EE این تابع باید را دانلود کرده و آن را با نام .jpg در پوشه \fB$thumb_dir\fR ذخیره کند. .TP .BR prepare_for_set_args () این تابع متغیر \fB$OLD_IFS\fR را برابر با \fB$IFS\fR قرار می‌دهد، سپس \fB$IFS\fR را روی آرگومان اول تنظیم می‌کند، و در پایان دستور \fBset -f\fR را اجرا می‌کند. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 مقدار جدید \fBIFS\fR. .RE .TP .BR end_of_set_args () این تابع مقدار \fBIFS\fR را به \fBOLD_IFS\fR بازمی‌گرداند. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR modify_ifs () این تابع مقدار \fBIFS\fR را روی آرگومان اول تنظیم می‌کند. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 مقداری که باید برای \fBIFS\fR تنظیم شود. .RE .TP .BR end_modify_ifs () این تابع متغیر \fR$IFS\fB را لغو (unset) می‌کند. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR mul_str () این تابع تکرار رشته را انجام می‌دهد، سپس نتیجه را در stdout چاپ می‌کند. این تابع دو آرگومان می‌پذیرد. .RS .TP .I 1 رشته مورد نظر. .TP .I 2 تعداد دفعات تکرار رشته. .RE .TP .BR remove_ansi_escapes () این تابع دنباله‌های گریز ansi را از رشته‌ای که از طریق stdin ارسال شده حذف می‌کند. سپس این تابع رشته نهایی را در stdout چاپ می‌کند. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR do_an_event_function () این تابع در صورت وجود یک رویداد، آن را اجرا می‌کند، سپس event_ را برای تمام افزونه‌های بارگذاری‌شده در \fB$loaded_extensions\fR (در صورت وجود) اجرا می‌کند. این تابع تعداد نامحدودی آرگومان می‌پذیرد. .RS .TP .I 1 نام رویداد. .TP .I ... آرگومان‌هایی که باید به رویداد پاس داده شوند .RE .TP .BR detach_cmd () این تابع یک دستور را از ترمینال جدا (detach) می‌کند. این تابع تعداد نامحدودی آرگومان می‌پذیرد. .RS .TP .I 1 دستوری که باید اجرا شود .TP .I ... آرگومان‌هایی که به دستور ارسال می‌شوند. .RE .TP .BR source_scrapers () این تابع تک‌تک اسکرپرهای موجود در \fB$scrape\fR را بررسی کرده و فایل مربوطه را سورس می‌کند. پس از سورس کردن فایل، در صورتی که \fB$__is_fzf_preview\fR برابر \fI0\fB باشد، تابع \fBon_startup_\fR را اجرا می‌کند. این تابع مسیرهای زیر را برای فایل مورد نظر بررسی می‌کند: .RS .TP .I \fB$YTFZF_CUSTOM_SCRAPERS_DIR\fR .TP .I \fB$YTFZF_SYSTEM_ADDON_DIR/scrapers\fR .TP .I \fB$YTFZF_CUSTOM_SCRAPERS_DIR\fR .TP .I \fB$YTFZF_SYSTEM_ADDON_DIR/scrapers\fR .RE .TP .BR add_commas () این تابع به یک عدد کاما اضافه می‌کند (به شیوه استاندارد تفکیک ارقام). این تابع عدد را از stdin دریافت می‌کند و نتیجه را در stdout چاپ می‌کند. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR command_exists () این تابع بررسی می‌کند که آیا یک دستور وجود دارد یا خیر. این تابع در صورت وجود دستور با کد وضعیت \fI0\fR و در صورت عدم وجود با \fI1\fR خارج می‌شود. این تابع ۱ آرگومان می‌پذیرد. .RS .TP .I 1 دستوری که باید بررسی شود .RE .TP .BR get_key_value () این تابع مقدار یک کلید را در یک رشته کلید-مقدار (key_value) دریافت می‌کند. .br رشته کلید-مقدار به صورت زیر قالب‌بندی شده است: .EX key=value... که در آن آرگومان سوم است، و به صورت پیش‌فرض فاصله می‌باشد. .EE اگر فقط یک جفت کلید-مقدار وجود داشته باشد، همچنان باید در هر دو طرف آن قرار داشته باشد. .br این تابع پس از چاپ مقدار در stdout، متغیر \fB$KEY_VALUE\fR را روی مقدار آن کلید تنظیم می‌کند. .br این تابع در صورتی که مقدار خالی نباشد با کد وضعیت \fI0\fR و اگر خالی باشد با \fI1\fR خارج می‌شود. .br این تابع سه آرگومان می‌پذیرد. .RS .TP .I 1 رشته کلید-مقدار. .TP .I 2 کلیدی که باید مقدار آن پیدا شود. .TP .I 3 (اختیاری) جداکننده‌ای که هر جفت کلید-مقدار را تفکیک می‌کند. به طور پیش‌فرض این مقدار یک فاصله است. .RE .TP .BR title_str () این تابع حرف اول یک رشته را به حرف بزرگ تبدیل کرده و آن را در stdout چاپ می‌کند. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 رشته مورد نظر. .RE .TP .BR shuf () این تابع تنها زمانی ایجاد می‌شود که برنامه \fBshuf\fR نصب نباشد. این تابع باید همانند عملکرد پایه \fBshuf\fR رفتار کند .br .TP .BR print_info () این تابع در صورتی که \fB$log_level\fR بزرگتر یا مساوی \fI2\fR باشد، اطلاعات را در stderr چاپ می‌کند. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 متن برای چاپ .RE .TP .BR print_warning () این تابع در صورتی که \fB$log_level\fR بزرگتر یا مساوی \fI1\fR باشد، یک هشدار را در stderr چاپ می‌کند. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 متن برای چاپ .RE .TP .BR print_error () این تابع در صورتی که \fB$log_level\fR بزرگتر یا مساوی \fI0\fR باشد، پیام خطا را در stderr چاپ می‌کند. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 متن برای چاپ .RE .TP .BR clean_up () این تابع تمام زیرفرآیندهای \fBytfzf(1)\fR را خاتمه می‌دهد، و در صورتی که \fB$session_cache_dir\fR وجود داشته باشد و \fB$keep_cache\fR برابر \fI0\fB باشد، دایرکتوری \fB$session_cache_dir\fR را حذف می‌کند. .br در پایان، رویداد \fBon_clean_up\fR را اجرا می‌کند. این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR is_relative_dir () بررسی می‌کند که آیا یک رشته یک مسیر نسبی است یا خیر. این تابع در صورت نسبی بودن مسیر با کد وضعیت \fI0\fR و در غیر این صورت با \fI1\fR خارج می‌شود. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 مسیری که باید بررسی شود .RE .TP .BR die () این تابع دستور \fBprint_error\fR را با یک رشته اجرا کرده و سپس با یک کد وضعیت خارج می‌شود. این تابع دو آرگومان می‌پذیرد. .RS .TP .I 1 وضعیت خروج .TP .I 2 متنی که باید با \fBprint_error\fR چاپ شود. .RE .TP .BR trim_url () این تابع خطوط را از stdin می‌خواند، و نشانی url را از آن‌ها در stdout چاپ می‌کند. خطوط باید به فرمت زیر قالب‌بندی شده باشند: .EX text....|url .EE این تابع هیچ آرگومانی نمی‌پذیرد. .TP .BR get_search_from_source () این تابع بسته به منبع، مقدار \fB_search\fR را روی یک عبارت جستجو تنظیم می‌کند. این تابع تعداد نامحدودی آرگومان می‌پذیرد. .RS .TP .I 1 منبعی که جستجو باید از آن دریافت شود. .TP .I ... آرگومان‌هایی که در صورت برابر بودن \fB$1\fR با \fIfn-args\fR به عنوان جستجو استفاده می‌شوند، یا اگر \fB1\fR مطابقت نداشته باشد، ... به \fBget_search_from_<1>\fR داده می‌شود. .RE .TP .BR load_extension () این تابع یک افزونه را به متغیر \fB$loaded_extensions\fR اضافه کرده و افزونه را سورس می‌کند. این تابع مکان‌های زیر را برای یافتن افزونه بررسی می‌کند: .EX .B $YTFZF_EXTENSIONS_DIR .B $YTFZF_SYSTEM_ADDON_DIR/extensions .B $PATH .EE این تابع با همان کد خروجی که هنگام بارگذاری افزونه برگردانده شد خارج می‌شود. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 افزونه‌ای که باید بارگذاری شود .RE .TP .BR extension_is_loaded () این تابع بررسی می‌کند که آیا یک افزونه بارگذاری شده است یا خیر. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 افزونه‌ای که باید بررسی شود .RE .TP .BR load_sort_name () این تابع یک sort-name را بارگذاری می‌کند. این تابع مکان‌های زیر را برای یافتن sort-name بررسی می‌کند: .EX .B $YTFZF_SORT_NAMES_DIR .B $YTFZF_SYSTEM_ADDON_DIR/sort-names .EE این تابع در صورتی که sort-name وجود نداشته باشد با کد وضعیت \fI1\fR خارج می‌شود، در غیر این صورت با همان کد وضعیتی که هنگام بارگذاری sort-name حاصل شد خارج خواهد شد. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 نام sort-name برای بارگذاری .RE .TP .BR load_url_handler () این تابع متغیر \fB$url_handler\fR را روی یک url-handler تنظیم می‌کند. این تابع مکان‌های زیر را برای یافتن url-handler بررسی می‌کند: .EX .B $PATH، و توابع موجود در فایل پیکربندی .B $YTFZF_URL_HANDLERS_DIR .B $YTFZF_SYSTEM_ADDON_DIR/url-handlers .EE اگر url-handler وجود نداشته باشد، این تابع \fBdie\fR را اجرا می‌کند. این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 گرداننده url برای بارگذاری .RE .TP .BR load_interface () این تابع متغیر \fB$interface\fR را روی یک رابط کاربری تنظیم می‌کند. اگر \fB$1\fR برابر با \fIext\fR، \fIscripting\fR یا "" باشد، \fB$interface\fR روی \fB1\fR تنظیم می‌شود. این تابع مکان‌های زیر را برای یافتن رابط کاربری بررسی می‌کند: .EX .B $1 .B $YTFZF_CUSTOM_INTERFACES_DIR .B $YTFZF_SYSTEM_ADDON_DIR/interfaces .EE این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 رابط کاربری برای بارگذاری .RE .TP .BR load_thumbnail_viewer () این تابع متغیر \fB$thumbnail_viewer\fR را روی یک thumbnail-viewer تنظیم می‌کند. اگر \fB$i\fR برابر با یک نمایش‌دهنده بندانگشتی توکار باشد، \fB$thumbnail_viewer\fR روی آن تنظیم می‌شود. در غیر این صورت، مکان‌های زیر بررسی می‌شوند: .EX .B $1 .B $YTFZF_THUMBNAIL_VIEWERS_DIR .B $YTFZF_SYSTEM_ADDON_DIR .EE این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 نمایش‌دهنده تصویر بندانگشتی برای بارگذاری .RE .TP .BR _get_request () این تابع درخواستی به سرور ارسال کرده و پاسخ را چاپ می‌کند. این تابع تعداد نامحدودی آرگومان می‌پذیرد. .RS .TP .I 1 نشانی اینترنتی برای ارسال درخواست .TP .I ... آرگومان‌هایی برای ارسال به \fBcurl(1)\fR .RE .TP .BR _get_real_channel_link () این تابع پیوند یک کانال یوتیوب را که در قالب‌های زیر باشد تبدیل می‌کند: .EX .I @user .I https://www.youtube.com/user/ .I https://www.youtube.com/c/ .EE این تابع یک آرگومان می‌پذیرد. .RS .TP .I 1 پیوندی که باید تبدیل شود .RE