چند وقت پیش، یکی از دوستانم پیامی کوتاه اما موثر به من داد: «آقا شما که خیلی اهل vim هستی حتما qutebrowser رو یه نگاهی بنداز ، پشیمون نمیشی ?»
با یک جست و جو، متوجه شدم که qutebrowser یک مرورگر کامل است که keyهای ویم را دارد. قبلا چند افزونه برای فایرفاکس نصب کرده بودم که میخواستند پشتیبانی از کلیدهای ویم را به مرورگر بیاورند. اما مشکل این بود که در چیزی که وعده میدادند خوب عمل نمیکردند. فکر میکنم ریشه مشکل این باشد که کاربران دوست ندارند به خاطر یک قابلیت مرورگر محبوبشان با همه امکانات، تنظیمات و bookmarkها را رها کنند و سراغ یک مرورگر دیگر بروند، و چه بهتر که با نصب یک افزونه، قابلیت مربوطه را به همان مرورگر اضافه کنند. اما این انگیزه فقط توجیه میکند چرا افزونه های مختلفی برای این کار ساخته شده اما جواب این سوال که «چرا در کارشان موفق نیستند»؟ میتواند این باشد که افزونههای مرورگر کنترل خیلی کمی روی عملکرد مرورگر دارند تا کاربران را با خطر امنیتی کمتری مواجه کنند. در واقع apiهایی که مرورگر به افزونهها میدهد کم و ضعیف اند.
در اینجا میرسیم به ابزارهای قدرتمند تر، اگر یک افزونه برای ما کافی نیست، چرا مرورگر خودمان را نسازیم؟! فلسفه پشت ساخت qutebrowser (مرورگری که در حال معرفی آن هستم) نیز همین است. هیچ کدام از افزونهها (و البته مرورگرهای vim-like کنونی) پاسخگوی نیاز آقای the-compiler نبودند، پس تصمیم گرفت برای خودش مرورگر بنویسد. البته اگر اندکی با سازوکار وب و مرورگرها آشنا باشید میدانید که نوشتن یک مرورگر کامل و قابل استفادهی وب، توسط یک شخص با انگیزهی نهچندان بزرگی مثل این اصلا امکان پذیر نیست. مرورگرها دارای بخشهای بسیار متنوعی هستند (کار با شبکه، پارس کردن html، پردازش css، موتور اجرای javascript، تشکیل dom، امنیت اطلاعات کاربر با تکنیکهایی مثل sandbox و مخافظت کوکیها و ...) که همگی باید به شکل همگام و البته با پرفورمنس خیلی عالی کار کنند.
اما خوشبختانه، جنبش نرمافزار آزاد، به ما کمک میکند که چرخ را از اول توسعه ندهیم. همه مواردی که گفتم پیادهسازی سختی دارند در زیربخش «موتور» مرورگر قرار میگیرند. از شانس خوب ما مرورگرهای کنونی مطرح (کروم و فایرفاکس) موتورشان را به عنوان نرمافزار آزاد منتشر کردهاند و امکان توسعهی مرورگرهای دیگر با موتور آن ها را میدهند. نمونهی این مرورگرها brave و microsoft edge هستند که از موتور کرومیوم استفاده میکنند.
مرورگر qutebrowser ما نیز چرخ را از اول اختراع نکرده، بلکه از QtWebEngine استفاده کرده. امکان QT (که یک کتابخانهی توسعهی برنامههای گرافیکی است) برای ساخت مرورگر. خود QT هم البته چرخ را از اول اختراع نکرده بلکه از موتور کرومیوم استفاده میکند. هر چند ماه یک بار تغییرات آخرین نسخهی کرومیوم را در QtWebEngine مرج میکنند. پس به طور خلاصه مرورگری داریم که از QT استفاده کرده برای گرافیک (در واقع pyqt چون با پایتون است) و موتوری که QT برای توسعه ی مرورگر وب میدهد، کرومیوم است اما نه لزوما آخرین نسخه.
رابط گرافیکی این برنامه را python3 و کتابخانهی pyqt5 نوشته اند، شاید به نظر بیاید که پایتون کند است و برای برنامهای مثل مرورگر مناسب نیست. نکته این است که فقط المانهای گرافیکی مرورگر (که چندان هم زیاد نیستند!) توسط پایتون مدیریت میشود و هستهی آن که کار سختتر را بر عهده دارد با سیپلاسپلاس است. البته نه به این معنی که هیچ مشکل پرفورمنسی ندارد اما کاملا قابل استفاده است.
تا اینجا موتور مرورگر را بررسی کردیم، اما با فرض اینکه موتور به شکل مناسب کار میکند، این مرورگر چه چیز جدیدی ارائه میدهد که بخواهیم با آن کار کنیم؟
در واقع مرورگر ادعا میکند که رابط کاربریای شبیه ویم دارد اما مرورگر را چه به تکستادیتور! در واقع بگذارید اصلاح کنم، این مرورگر با الهام از ویم، محیطی را فراهم میکند که با کمترین استفاده از موس (بدون استفاده از موس؟) بتوانید کارهایی که با مرورگر خود انجام میدادید را انجام دهید. در این مسیر برخی کلیدهای مورد استفاده، کلید های مورد استفاده از ویم است مثلا d برای بستن یک تب یا / برای سرچ یا kj برای اسکرول کردن.
اما انگیزه استفاده نکردن از موس چیست؟ مواردی که مطرح میشود این است که استفاده از موس باعث میشود سرعت شما پایین بیاید چرا که باید مدام دست راستتان را بین کیبورد و موس جا به جا کنید. همچنین استفاده از موس باعث میشود که مچ دست شما دچار ناخوشی بشود، حداقل در طولانی مدت. البته این موضوع جای بحث خودش را دارد ولی اینجا جایش نیست!
کلیدهای پیشفرضی که ارائه شده برای کارهای اصلی خوب هستند، سازنده میگوید که خواسته با dwb که یک مرورگر دیگر با استفاده از کلید های ویم است یکپارچه بماند، شاید خود سازنده از dwb استفاده میکرده قبل از اینکه ناامید شود و یک مرورگر جدید بنویسد!
این مرورگر تقریبا تمام امکاناتی که انتظار میرود را دارد، تبهای متفاوت دارید که به خوبی پشتیبانی میشوند، سرعت قابل قبولی دارد، امکان باز کردن تبهایی که دفعه قبل باز بودند را به شما میدهد، از موس پشتیبانی میکند، بوکمارک و کوکی و جاوااسکریپت و ... دارد و تا حدی هم سریع باز میشود.
طبق تستی که داشتم، این مرورگر برای تنها ۸ تب باز (که برای من خیلی کم محسوب میشوند!) ۸۰۰ مگابایت رم مصرف کرد، اما موتور آن (qt web engine process) نیز حدود ۱.۲ گیگ رم مصرف کرد که جمع این دو عدد بسیار زیادی میشود.
سرعت باز شدن صفحهها بین مرورگرها بالاترین نیست اگرچه قابل قبول است.
جا به جا شدن بین مدهای مختلف و شورتکات ها مخصوص کیبورد انگلیسی هستند و اگر کیبوردتان فارسی باشد اذیت میشوند.
امکان ادیت متنی که نوشتید با استفاده از امکانات ادیت متن ویم را ندارید! یعنی اگر در normal mode باشید d باعث بسته شدن تب میشود و نمیتوانید مثلا یک خط را پاک کنید. (یا حداقل من بلد نیستم!)
همچنین private window هم اگرچه وجود دارد اما چندان بدیهی نیست.
مشکل مهم دیگر که به نظرم اتفاقا تا حدی هم خوب حل شده، این است که کلیک کردن روی یک لینک بدون موس سخت است. قبل اینکه manual مرورگر را کامل بخوانم، با / متن دکمه را سرچ میکردم و سپس اینتر میزدم. اگرچه تا حدی کار می کند اما اصلا بهینه نیست! راهی که خود مرورگر پیشنهاد کرده، استفاده از کلید f است. وقتی f را بزنید روی هر لینک از صفحه یک حرف ظاهر میشود که اگر آن حرف را وارد کنید روی آن لنیک کلید میشود.
به طور مثال این یک تصویر پس از فشردن کلید f است که به من لینک های موجود را نشان میدهد. اما چندان روش بهینهای نیست. چرا که در یک صفحه شلوغ مثل صفحهی سرچ، وارد کردن f و پیدا کدن لینک مورد نظر و حرف مربوطه و تایپ آن به نظر بیشتر از موس زمان میگیرد. هرچند به نظرم این مشکل برای ابزاری که میخواهد یک رابط بدون موس برای وب که این روز ها برای صفحات تاچ بهینه شده ارائه دهد وجود دارد و مختص این ابزار نیست.
در تصویر بالا به حروف زرد و داخل هم رفتن آنها دقت کنید. در حالی که مثلا میشد چند تا از آنها که مربوط به یک لینک واحد هستند را ادغام کرد.
در مجموع ابزار قبل استفادهای است. اگر با صفحات فارسی کار نداشته باشید و بیشتر مشغول گشت و گذار باشید تا تولید محتوا، جوابگو است.
اما به عنوان مرورگر اصلی مخصوصا برای فارسیزبان ها توصیه نمیکنم اما میتواند به عنوان مرورگر دومم جایگزین کرومیوم باشد.