نوشته‌های ترمینالی
2.63K subscribers
424 photos
12 videos
32 files
2.25K links
Download Telegram
جمع بندی از 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 ها عوض بشه مثلا بین اینها میشه انتخاب کرد.
اگه به فونت ها علاقه مند شدین می‌تونین در مورد فونت های true type یا همون ttf این لینک رو بخونید.
https://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=IWS-Chapter08
کارهایی که در insert mode ویم بدون رفتن به normal mode میشه انجام داد.
به هدف اینکه هربار که می‌ریم به insert mode یه ادیت انجام بدیم و بتونیم آندو و ریدو های بهتر و مفید تری داشته باشیم

https://dev.to/iggredible/the-only-vim-insert-mode-cheatsheet-you-ever-needed-nk9
چطر از dig استفاده کنیم تا کوئری dns بزنیم
https://jvns.ca/blog/2021/12/04/how-to-use-dig/
🔶 متن دوسویه؛ چیستی، چرایی، چگونگی

ما فارسی‌زبانان بارها با مشکل عدم نمایش صحیح متن‌های فارسی در محیط‌های دیجیتال مواجه شده‌ایم. یکی از این مشکلات، عدم نمایش متن فارسی در جهت صحیح است. در این مطلب در این باره می‌نویسم.

مطالعه مطلب