نوشته‌های ترمینالی
2.62K subscribers
424 photos
12 videos
32 files
2.25K links
Download Telegram
یه برنامه زیبا که پیدا کردم fromscratch بود.
در واقع بی‌امکانات ترین ادیتوریه که میشه پیدا کد (از notepad هم کمتر)
فقط یه صفحه دارید که ادیت می‌کنید توش و خودش فایل رو سیو میکنه.
هربار باز کنید برنامه رو همین فایل رو بهتون نشون میده و خودکار هم سیو میکنه.
در واقع مثل sticky note یا چنین چیزی کار میکنه.
خوبی بزرگش اینه که ساده و سریعه
فارسی می‌تونین توش بنویسین اما rtl نیست.

نکته جالبش اینه که -> و => و اینا رو تبدیل به فلش های قشنگ میکنه.


https://fromscratch.rocks/
گزینه معقولی که پیدا کردم joplin بود.
یه ادیتور با قابلیت notebook و todo و اینا.
اما نتیجه مارک‌داون رو سمت راست می‌دیدین (برخلاف تایپورا که همونجا نشون میده)

فارسی رو خیلی خوب ساپورت میکرد (در واقع BiDi بود، مثل تلگرام و توییتر و ...)
با گوگل درایو و دراپ باکس و اینا هم میتونست سینک بشه.

مشکل بزرگش برای من این بود که خودش یه دیتابیس sqllite داشت و محتوا رو اونجا می‌ریخت. شما نمی‌تونستی فایلت رو هرجا خواستی سیو کنی. همچنین تصاویر مورد استفاده رو هم توی یه پوشه resource کنار همون دیتابسیه می‌ریخت.
عملا قابلیت کنترلی نداشتی.
مثلا نمیشه readme پروژه ت رو باهاش ادیت کنی.
البته قابلیت import و export داشت ولی خیلی سردرد بود.
گزینه‌ی کاربردی بعدی QOwnNote بود.
این هم مثل joplin می‌تونست متن فارسی رو خوب هندل کنه (BiDi)
البته موقعی که pdf میکنه متن رو خراب میکنه.
مشکلی که داره اول اینه که زشته!
دوم اینکه باز هم متن ها رو یه جای خاص سیو میکنه و باید import export کنید هی.

در کل با وجود joplin توصیه‌ش نمیکنم. هرچند سبک تره.
گزینه مطرح و مهم بعدیمون onenoteئه،
به شکل انلاین میشه ازش استفاده کرد، حالا تیم p3x اومده همین onenoteوب رو در قالب یه برنامه الکترونی منتشر کرده.
خب onenote که تکلیفش مشخصه، اطلاعاتتون توی سرور مایکروسافت قرار میگیره و فقط می‌تونین pdf اکسپورت کنید.
البته با توجه به اینکه امکانات نقاشی و اینا که میده توی متن خام جا نمیشه قابل قبوله.
امکان rtl هم داره اما برای هر تیکه متنی که می‌نویسید باید بزنید RTL
در کل قابل قبوله. مخصوصا اگر قلم و اینا دارید واقعا زیباست.

https://www.corifeus.com/onenote
برنامه laverna و encryptic بودن که خیلی اصرار داشتن روی کلود ذخیره کنن و امن باشن، در حالی که نیاز من نبود.
ضمن اینکه هیچکدومشون دیگه توسعه هم داده نمی‌شدن، کلا توصیه نمیشن



retext
امکان ادیت markdown رو داشت
باز هم فارسی رو خوب می‌نوشت اما موقع pdf کردن خرابش می‌کرد.
ظاهرشم تعریفی نداره هرچند قابل تحمله.



remarkable
ادیت فارسی داشت اما RTL نبود.
کلا ه مبرنامه ساده و بی امکاناتی بود. با همون notepad میتونه جایگزین بشه!



ghostwrtier
تنها گزینه‌ای که توی پکیج های رسمی arch بود.
اما با فارسی اصلا دوست نبود.

zettlr
برنامه زیبا و پر امکاناتی بود.
فارسی رو ساپورت نمیکرد.
برای export به pdf هم pandoc می‌خواست.
برای انگلیسی توصیه ش میکنم.


marktext
بسیار زیباست. گزینه هاشم پنهانه که تمرکز رو به هم نزنه اما فارسی رو پشتیبانی نمیکنه.

haroopad
یه ابزار نسبتا ساده، بدون پشتیبانی فارسی.
توصیه ش نمیکنم.

mark my words
بسیار ساده، بدون امکانات خاصی و پشتیبانی از فارسی خوب نیست

eme
ادعا داره خیلی خوب و خوش ساخته ولی اینطوری نیست.
کاملا معمولی بدون پشتیبانی از فارسی

mindforger
ظاهرش تعریفی نیست اما خیلیم بد نیست.
هم امکان ادیت مستقیم markdown داره هم فاز notebook و اینا رو داره.
فارسی که ساپورت نمی‌کنه و کلا هم نپسندیدم.
اگه تا اینجا ناامید شدید، تنها نیستین!

تنها چیزی که فارسی رو خوب ساپورت میکنه پروژه‌های انلاین هست مثل rtlmd و minimalist

https://minimalist.brothersincode.ir/
https://rtlmd.codecast.ir/

اما مشکل هردو اینه که دیگه کلا راست به چپه و چیز انگلیسی نمیشه توش نوشت.
توی مرورگر کار میکنه و قابلیت export و import هم نداره!
یه آپدیت بدم:
ادیتور apostrophe تا اینجا خوب بود.
هم فارسی رو زیبا پشتیبانی میکرد و هم انگلیسی رو و زیبا و سبکه.
اما مشکل اینه که متن های فارسی رو توی pdf خروجیش نمیاره.
از اونجایی که گزینه های دیگه هم کم و بیش مشکلات مشابهی داشتن تصمیم گرفتم که خودم دست به کار بشم.
تنها کاری که باید انجام بشه تبدیل markdown تولید شده به pdf با pandocئه.

اگه نمی‌دونید، pandoc ابزار بسیار قدرتمندی برای تبدیل هر فایلی مثل word و markdown به هر فرمت دیگه ای مثل pdf و odt و word و latexئه.
تا اونجا که فهمیدم چیزی که از همه راه‌دست تره براش latexئه اما مهم نیست.

حالا pandox برای تبدیل به pdf یه سری engine داره که تا اینجا weasyprint از همشون تمیز تر pdf فارسی ساخته.

مشکلی که وجود داره اینه که همه متن رو ltr در نظر میگیره. با یه متغیر میشه همه متن رو rtl کرد. اما هنوز برام کافی نیست چون متنم ممکنه هم پاراگراف های فارسی داشته باشه هم انگلیسی. به طور خاص کدها میخوام حتما ltr باشن.


تصمیم گرفتم ببینم typora چیکار میکنه که درست میشه. فرض کردم که از همون pandoc استفاده میکنه. با strace اومدم سیستم‌کال هاشو مانیتور کردم، ولی خب گویا حداقل برای pdf نمیاد pandoc رو مستقیم صدا کنه چون چیز به دردبخوری پیدا نکردم (خیلی هم بلد نیستم strace)
بعد اصلا یادم اومد که typora هم به زور یه تم راست به چپش درست شده و اونم فقط rtl یا ltrئه و BiDi نداره.

کار بعدی، filter های pandoc بود. اینطوریه که شما می‌تونی با lua یا هر زبان دیگه (lua سریع تر و پیشفرضشه) براش یه اسکریپت بنویسی.
این اسکریپتت شامل یه سری تابعه که بسته به اسمش توسط pandoc صدا شده میشه. مثلا تابع Str با هر کلمه صدا زده میشه و تابع Block با هر بلاک.
وروذی این تابع هم یه table (همون map) هست که اطلاعات اون المنت رو داره.
مقدار خروجی شما از این تابع به جای المنت قبلی قرار میگیره و میتونین modifyش کنین خلاصه.

اگه لوا بنویسید مستقیم کال میشه (کاری که دارم میکنم) اما با زبون های دیگه هم میشه با کمک json ارتباط برقرار کرد، هنوز نرفتم سراغش.

حالا تغییری که روی المنت Block باید بدم اینه که بگم اگه انگلیسی بود (مثلا با خروجی انگلیسی شروع شده بود، بیا و به جای rtl (که پیشفرض گذاشتمش) شما ltrش کن.

اما خب کار نمیکنه =)
نمیدونم lua بلد نیستم یا چی =)
جمع بندی از lua:
زبان ساده و سریعیه و حتما باید بعد از پایتون و bash بلدش باشیم.
ارایه هاش از ۱ شروع میشه، همه چیز رو با table هندل میکنه که جالب و ساده‌س
میپرسن حالا چرا مارک داون؟

چند تا دلیل برای من داره،
اگه بازم چیزی بود بگین حتما

من اعتقاد به plain text دارم،‌
چیزی که بتونم با هرادیتوری خواستم ادیتش کنم و با چشم ببینمش، مثل docx و onenote مجبور نباشم برای دیدن داکیومنت هام از ابزار خاصی استفاده کنم.
البته فرمت های آزاد مثل odt هم محدود به «یه ابزار حاص» نیستین اما بازم یه ابزار میخوان.
نکته دیگه ای که plain text داره اینه که به راحتی توی git diff تغییراتش مشخص میشه. اما اگه فرمت binary باشه مثل ورد، این اتفاق نمیفته. حجم ریپوزیتوری گیت هم زیاد میشه.

حالا خود plain text که ساختار خاصی نداره، برای خیلی کارها خوبه اما لزوما کافی نیست.
یه سری فرمت ها براساس اون ساخته شدن که من markdown و latex رو می‌شناسم.
اول markdown که ساده ترینه، هم برای یادگیری هم برای نوشتن، سربار بسیار کمی داره مثلا برای list کافیه یه + اول هر item بذارید که خب عالیه.
خوبی دیگه ش اینه که بدون هیچ ابزار خاصی فقط با همون notepad میشه نوشتش و خوندش. یعنی اگه یه md به دستمون برسه همین که با notepad یا vi بازش کنیم کامل می‌فهمیم چی به چیه حالا شاید قشنگ نباشه صرفا.
اما latex پیشرفته تره، سربار بیشتری داره و امکانات خیلی بیشتری هم داره، مثلا برای یه title باید بنویسید Title{mohtava}
یاد گرفتنش خب سخت تره و منم خوب بلد نیستمش اما امکاناتی بیشتر از word میده بهتون.
این رو با یه ادیتور ساده می‌شه نوشت اما برای خوندنش بهتره که با یه ابزاری مثلا به pdf کامپایل بشه. مارک‌داون هم میتونه کامپایل بشه اما اونقدر ضروری نیست که برای latex ضروریه.

حالا من کجاها از markdown استفاده میکنم؟
خب readme پروژه ها که هست اما هرجا بخوام متنی بنویسم (غیر از سورس‌کد) ازش استفاده می‌کنم. مثلا داکیومنت های یه پروژه، یا گزارش کار پروژه و آزمایشگاه یا گزارش کارآموری یا صورت سوالی که قراره طرح کنم یا حتی یه برگه تقلب کوچک که برای خودم دارم همه رو با markdown می‌نویسم.
حالا اگه انگلیسی باشه که راحت با neovimم می‌نویسم و مشکلی نیست
اما اگه فارسی باشه با vim سخت میشه و برای همین دنبال یه ادیتورم براش که pdf نتیجه هم خوب باشه.
البته ادیتور md می‌تونه امکاناتی هم داشته باشه مثلا اینکه یه image رو توش drag and drop کنید و خودش آدرس عکسه رو به عنوان عکس قرار بده و کار رو سریع کنه. یا مثلا براتون جدول تولید کنه.
راستی یه کاربرد دیگه که داره اینه که باهاش کتاب می‌نویسن!
ازونجا که راحت تبدیل به pdf میشه (حالا فارسی اونقدر راحت نیست) میشه برای کتابی که به اون صورت فرمول و صفحه بندی نداره ازش استفاده کرد. مثلا کتاب های جادی فکر کنم همشون همینطورین یا مثلا این کتاب تو ذهنمه.
https://quii.gitbook.io/learn-go-with-tests/


یا مثلا محتوای سایت هم میشه باهاش تولید کرد مثلا mdn که محبوب برنامه نویس های فرانته همه ی محتواش به شکل markdownئه. مثلا:
https://github.com/mdn/content/blob/main/files/en-us/learn/accessibility/accessibility_troubleshooting/index.md


ابزار های سایت ساز استاتیک مثل jekyll هم دیدم که محتوا رو markdown می‌گیرن و سایت می‌سازن.
نوشته‌های ترمینالی
یه آپدیت بدم: ادیتور apostrophe تا اینجا خوب بود. هم فارسی رو زیبا پشتیبانی میکرد و هم انگلیسی رو و زیبا و سبکه. اما مشکل اینه که متن های فارسی رو توی pdf خروجیش نمیاره. از اونجایی که گزینه های دیگه هم کم و بیش مشکلات مشابهی داشتن تصمیم گرفتم که خودم دست…
چون پیگیر بودین:
نهایتا متوجه شدم که یه سری از المنت های pandoc توی lua fllter شامل attribute هستن یه سری نیستن.
اونایی که هستن رو راحت میشه RTL و LTR کرد مثل CodeBlock اما Para‌ ( همون پاراگراف که خیلیم پر اسفاده س) رو نمیشه.

برای حلش از یه همچین هکی استفاده شد:
https://github.com/jgm/pandoc/issues/684#issuecomment-793274882

و خلاصه الان اوکیه. به جز نیم فاصله که موقع تبدیل خراب میشه باقیش اوکیه.

برای اینکه بفهمم متن حالا باید rtl باشه یا ltr هم باید از قوانین BiDi پیروی بشه.
مثل همین که تلگرام می‌فهمه متن راست‌چین باشه یا چپ چین.
ساده شده ش اینه که اگه با کلمه فارسی شروع بشه راست چین اگه نه چپ چین.
حالا اگه عدد باشه هم ادامه میده میره جلو تا به یه کارکتر به درد بخور برسه. (دقیق تر و کامل تره، من بلد نیستم خوب)
https://en.wikipedia.org/wiki/Bidirectional_text

خلاصه این رو پیاده سازی کردم تو lua که اصلا بلد نبودمش.
رشته هاش نه تنها اندیس نمی‌گیرن، بلکه اصلا کارکتر هم نداریم! یه وضعیتیه.
خلاصه کدش آماده شد، انشالا تمیز مرتبش کنم می‌ذارمش قابل استفاده باشه برای جهانیان!

تو این مدت کلی این داکیومنت رو بالا و پایین کردم.
https://pandoc.org/lua-filters.html
در واقع تنها منبعم این بود و دو تا ایشوی نامرتبط گیتهاب
با کمک digraphs در ویم میشه کارکترهایی که با کیبورد نمیشه زد رو وارد کرد.
به این شکل که در insert mode باید ctrl k رو بزنید بعدش ترکیبی که میخواین رو وارد کنید مثلا =! تبدیل میشه به ‘≠’.
https://stackoverflow.com/q/688265/10999348

لیست چیزهایی که میشه استفاده کرد رو اینجا ببینین:
https://www.alecjacobson.com/weblog/?p=443
قابلیت conceal ویم به این صورته که مثل سینتکس‌هایلاتش، میای یه regex بهش می‌دی و محتوای شامل اون regex رو یه جور ویژه‌ای نشون میده.

حالا توی سینتکس هایلایت رنگ خاصی نشون میده،
اما توی conceal یه سری کلمه رو می‌تونه جایگزین کنه. مثلا به جای عبارت lambda توی پایتون بذاره λ
یا مثلا به جای math.pi بذاره π
همینطور برای توان و ...
این کارکترها جزو استاندارد unicode هستن و اگه ترمینالتون بتونه نشونشون بده اوکیه و هیچ مشکلی نداره.
نکته قابل توجه اینکه سورس کد رو تغییر نمیده و کد مثلا پایتون هنوز نوشته math.pi اما شما یه شکل دیگه می‌بینینش. درست مثل syntax highlight.
توی emacs البته این قابلیت معروف تر و پر استفاده تره، نمیدونم چرا توی ویم مغفول مونده، شاید چون ترمینال ها خیلی از unicode پشتیبانی نمی‌کردن اون زمان.

یه نمونه مثالش رو می‌تونین اینجا ببینین
https://github.com/khzaw/vim-conceal/blob/master/after/syntax/python.vim

و خود ریپو هم یه پلاگینه که برای پایتون براتون چند تا چیز اولیه رو اضافه میکنه.
نکته اینکه درک خوبی از سینتکس نداره مثلا اگه به جای math.pi بنویسی
from math import pi
دیگه pi رو نمی‌فهمه اما باحاله بازم.

نکته بد ماجرا اینه که (حداقل تو ترمینال من) وقتی میخوام اون متنی که واقعا وجود داره رو ادیت کنم یکم اذیت میکنه. چون لامبدا رو مثلا یه کارکتر نشون میده در حالی که چند کارکتره.


یا
همین فابلیت توی emacs به اسم prettify-symbols-mode
اما ازونجایی که این قابلیت محدود به ویم میشه و خوب توسعه پیدا نکرده، دوستامون دست به کار شدن و یه فونت ساختن به اسم Fira Code
به این شکله که به عنوان یه فونت نصب میشه روی سیستم و می‌تونین فونت ترمینال یا ادیتورتون رو اون تنظیم کنین.
حالا با دانشی که داره یه سری ترکیب حروف مثل ++ یا -> رو با یه شکل دیگه جایگزین میکنه.
اگه براتون سواله که چطوری می‌تونه مگه فونت از حرف بعدی و قبلی خبر داره؟ بله داره. مثل همین فونت فارسی که شکل جدا و چسبیده‌ی کلمات براش فرق داره.

خلاصه می‌تونین نصب کنید و لذت ببرید.
با اکثر ادیتور ها سازگاره ولی ترمینال های مورد پشتیبانیش کمن، بیشتر مدرن ها رو دیدم، مثلا kitty رو خیلی اوکی ساپورت کرد. Konsole هم اوکیه اما gnome terminal و xterm و xfce4 نه.
https://github.com/tonsky/FiraCode
نوشته‌های ترمینالی
برای نمونه
حالا جالب تر اینکه میشه ادیتور رو جوری تنظیم کرد که یه سری ارگومان به فونت بده و یکم style ها عوض بشه مثلا بین اینها میشه انتخاب کرد.