LinFAQ
313 subscribers
23 photos
4 videos
3 files
54 links
GNU/Linux FAQ

Advertise : @LinAdvertise

By @LinAcademy
Download Telegram
#داستان_های_FOSS

دسته‌بندی: #داستان #آموزشی

پارت 3.1 :
راجب آشناییم با (نئو)ویم (پارت 3: بازنویسی کانفیگم و فیچر های جدید نئوویم)

موقع نوشتن این متن استفاده کردن یا نکردن از پلاگین فرق خاصی روی سرعت ایجاد نمیکنه و پلاگین های جدید امکانات زیادی دارن، تنها دلیلی که هنوز سراغ پلاگین ها نرفتم این هست که

1- کانفیگ کردن نئوویم بدون پلاگین نسبتا متفاوته
2- حتی بدون پلاگین هم میشه امکانات زیادی در حد debugger و completion و ظاهر بهتر statusline و... رو به نئوویم اضافه کرد):
خب تو پارت قبل (2) به اونجایی رسیدیم که کانفیگم رو فرستادم گیت هاب و شروع کردم به بازنویسی کانفیگ نئوویم اما بدون پلاگین، اول فقط در حد ست کردن line number و tabstop و save cursor position بود، بعد کم کم شروع کردم به اضافه کردن فیچر هایی مثل تغییر رنگ استیتوس بار موقع سوییچ بین نرمال مد و اینزرت مد و آشنایی با x mode
(داخل اینزرت مد ctrl x رو بزنید میبینیدش)،

بعد از اون هم شروع کردم به تغییر یه سری highlight ها و تحقیق راجب نحوه کانفیگ statusline
(چند تا مقاله راجبش خوندم)

که در نتیجه یکم کانفیگش کردم و یه سری از مد ها رو داخل استیتوس لاین نمایش میداد.
تقریبا همین موقع ها init.lua و builtin lsp اومده بودن، اما بخاطر عدم آشنایی کافی با نحوه کانفیگ نئوویم با لوا و نبود داکیومنت های زیاد راجبش و تازه بودن builtin lsp
(البته که هنوزم سراغ lsp نرفتم)

سراغشون نرفتم، جدای از اون مهم ترین بخش کانفیگم که استیتوس لاین بود چون کل مد ها (مخصوصا term) رو نمایش نمیداد، اگه به اون مد ها سوییچ میکردم کلا ارور میداد و میرفت استیتوس بار دیفالت، و دیگه حال و حوصله درست کردن و کامل کردن امکانات استیتوس بار
(صرفا mode و path و file type رو نمایش میداد)

رو نداشتم.
کلا کانفیگ نصفه رو گذاشتم کنار، بعد یه مدت که یوتیوبر ها شروع کردن به بازنویسی کانفیگشون به لوا، با دیدن کانفیگ های نمونه یکم از کانفیگ با لوا سر در آوردم و بعد از چند وقت یه کانفیگ نئوویم از صفر با init.lua ردیف کردم، البته خیلی ساده و در حد چند تا set و keybind بود، به همون قانع شدم چون برام کافی بود و دیگه ادامش ندادم.
اول تابستون یه گندی زدم و بعدش توفیق اجباری شد و سوییچ کردم به آرچ، کانفیگ قبلیم رو برگردوندم و برای این که یکم فعالیت علمیم رو بیشتر کنم شروع کردم به کانفیگ دوباره ابزار ها و همینطور گفتن نکاتی که هر روز بدست میارم داخل لینچت
(که #روزی_یک_نکته با دلاتو ایجاد شدن)،

آخرین تغییری که تا موقع نوشتن این متن داخل کانفیگم ایجاد شده بود اضافه کردن دوباره restore-cursor اما این بار داخل init.lua بود که یه نکته هم راجبش نوشتم، اما به 5 روز نکشید که پدرم از دنیا رفت
(تقریبا همین موقع ها، دقیق یادم نیست اما یکی 2 روز قبل یا بعد این ماجرا linux dabbler ویدئویی با اسم pluginless neovim رو داخل یوتیوب قرار داد)،

از خونه خارج شدیم تا حال و هوامون عوض بشه و خب دیگه نرسیدم کانفیگ کنم، اما برای این که بتونم توی لحظه زندگی کنم بعد از چند روز شروع کردم به خوندن مقاله های مختلف و...
فهمیدم امکانات عجیب و زیاد دیگه ای رو نئوویم بدون پلاگین داره که ازش خبر نداشتم، مثل دیباگر که از gdb استفاده میکنه، ctags که برای go to definition و... مناسبه، کامند make که برای کامپایل و سوییچ بین ارور های موقع کامپایل از داخل (نئو)ویم مناسبه و...
(2 مورد آخر رو از ویدئو How to Do 90% of What Plugins Do (With Just Vim) متوجه شدم)،

همینطور بیشتر راجب کانفیگ استیتوس بار با لوا تحقیق کردم
(دقیق تر بگم اون ویدئو linux dabbler بیشتر توضیح رو داد)



🔅@LinFAQ
🔅@LinAcademy
1
LinFAQ
پارت 3.1 :
ادامه پارت قبل

پارت 3.2 :
اما خب هنوز پشت سیستم نرفتم که تستشون کنم تا بتونم نکته ای راجبشون بگم، رسیدیم زمان نوشتن این متن.
این که کسی به ویم سوییچ کنه یا نه، با پلاگین یا بدون پلاگین کانفیگش کنه و... انتخاب خودشه، اینطوری نیست که بتونم بگم "باید همه از ویم یا ایمکس یا... استفاده کنن"، بنظرم هم این که برای یکی دلیل بیارم که چرا باید به (نئو)ویم یا... سوییچ کنه، خیلی کار موثر یا مفید یا جالبی نیست، چون
1- انگار دارم نگاه و دلایل خودم رو که ممکنه برای اون شخص صدق نکنه استفاده میکنم و
2- در نهایت ویم ویرایشگر متن نسبتا متفاوت تری هست و اگه شخص انگیزه ای برای یادگیری و کانفیگش نداشته باشه، با مسائلی که براش پیش میاد (تنها جمله ای که مناسب این موقعیت پیدا کردم:) فقط روی اعصاب خودش و بقیه میره.
پس به جای آوردن دلیل، تجربه خودم و دلیل سوییچم بهش و این که چه پروسه ای رو برای یادگیری و کانفیگ ابزار طی کردم، بهترین توضیحیه که میتونم برای
1- شخص خودش بتونه تشخیص بده که (نئو)ویم مناسبش هست یا نه و 2- ارزش وقتش رو داره یا اصلا چقدر زمان میگیره، ارائه بدم.
در انتها اگه این مطلب براتون مفید بود و دلتون خواست، لطفا برای شادی روح یحیی تجری فرزند حسین یه فاتحه بخونید.

🔅@LinFAQ
🔅@LinAcademy
🙏1
#روزی_یک_نکته با دلاتو
دسته‌بندی: #آموزشی #کاربردی
راجب ctags (پیش زمینه نکته بعدی):

اول چند گام قبل تر رو توضیح بدم: ctags یه ابزاری هست که... ویکی پدیا رو بخونید بهتره، اینجا بخشی که باهاش کار داریم یکی از کاربرد هاشه (بقیه رو نمیدونم، میتونید ویکی پدیا رو چک کنید) برای completion داخل ویرایشگر های متن هست. ctags زبان های مختلفی رو هم ساپورت میکنه.
در کل به عنوان یه نمونه ساده و با نصب راحت جهت completion بهش نگاه کنید که تنها بخش رو مخش ساخت فایل tags هست.
نحوه نصب داخل توزیعات آرچ بیس:
sudo pacman -S ctags
و احتمالا توی توزیعات دیگه هم با اسم مشابه هست.

بعد داخل دایرکتوری ای که پروژه تون هست دستور
ctags -R
رو اجرا میکنید (که اون R برای recursive عه) و فایل tags ساخته میشه.

🔅@LinFAQ
🔅@LinAcademy
👍1
LinFAQ
پیش زمینه نکته بعدی
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی

راجب نمایش template ها موقع completion با ctags داخل (نئو)ویم:

بحث اصلی امروز از اینجاست: حالا داخل (نئو)ویم داخل insert mode با کی بایند

ctrl-x ctrl-j


لیست suggestion هایی که ctags ارائه میده رو ببینید
(اگه رو مخه کی بایندش، راحت میتونید به هر چیزی خواستید map ش کنید:
vim.keymap.set('i', '<C-]>', '<C-X><C-]>')
مثال برای لوا).


بعد آپشن showfulltag رو از طریق
:set showfulltag
فعال کنید.
دوباره از داخل insert mode بیاید suggestion ها رو چک کنید و با حالت قبل مقایسه کنید
(تصاویری که دادم تفاوتشون قبل و بعد ست کردن showfulltag هست).


ظاهرا امروز 2 نکته شد P:

در انتها اگه این مطلب براتون مفید بود و دلتون خواست، لطفا برای شادی روح یحیی تجری فرزند حسین یه فاتحه بخونید.

🔅@LinFAQ
🔅@LinAcademy
👍2
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی #emacs

راجب دووم آوردن داخل ایمکس تو روز اول، پارت اول:
برای اجرا از دستور زیر استفاده کردم:
emacsclient -c -e '(eshell)' -a ''
توضیحش: اون emacsclient برای اجرای ایمکس به صورت daemon/ client هست که خب مزایاش مثل کاهش زمان لود رو میدونید؛ فلگ بعدی برای اجرای برنامه داخل یه پنجره گرافیکی جدا، بعدی برای اجرای دستور داخل quote ها، که میگه eshell رو اجرا کنه
(انگار bash ای هست که lisp رو میفهمه؟ شاید دارم عالی بیانش نمیکنم، سرچ کنید منبع راجب توضیحش زیاده)؛

اون فلگ بعدی که آخرین فلگه برای اینه که اگه emacsclient نتونست اجرا بشه
(مثلا daemon ران نباشه)

چی کار کنه، اگه مقدار بین quote ها رو خالی بذاریم اول میاد سعی میکنه daemon رو اجرا کنه و بعد دوباره تلاش کنه.

خب حالا وارد ایمکس شدید، یه صفحه سفید با یه منویی که هیچی نمیشه ازش فهمید و کی بایند هایی که موفق باشید بفهمیدشون، اما نکته مثبت: با اون دستور طومار وار بالا الان یه شل تو دسترس دارید و راحت میتونید به هر جایی خواستید cd کنید یا...، صرفا 2 دستور رو حضور ذهن داشته باشید:
find-file <filename>
رو هر فایلی بزنید اون رو از داخل emacs باز میکنه، اگه وجود نداشته باشه dired رو باز میکنه.
dired
که ظاهرا فایل منیجر ایمکس هست رو باز میکنه.

🔅@LinFAQ
🔅@LinAcademy
👍2
#روزی_یک_نکته با دلاتو

دسته‌بندی: #کاربردی #آموزشی #emacs

راجب دووم آوردن داخل ایمکس تو روز اول، پارت دوم:
گام بعدی و واجب برای بقا در این محیط خشن، رسیدن به آتش برای تامین غ... منظورم اینه کی بایند هاست، خب لیست از کی بایند هایی که نیازم شد رو سعی میکنم این وسط جا بدم
(M منظور alt و C منظور ctrl هست، پس C-a مثلا یعنی ctrl a):

رفتن به ابتدای لاین: C-a
رفتن به انتهای لاین: C-e
مشابه visual mode برای انتخاب: C-SPC
(منظور از SPC همون space هست).

کات کردن: C-w
کپی کردن: C-W
پیست کردن: C-y
جا به جایی مشابه hjkl داخل متن:
C-b, C-n, C-p, C-f
جا به جایی به یک کلمه بعد یا قبل:
M-b, M-f
سرچ از مکان فعلی کرسر تا انتهای فایل: C-s
سرچ از مکان فعلی کرسر تا ابتدای فایل: C-r
مشابه command mode داخل ویم: M-x
برای help موارد مختلف: C-h
سیو کردن: C-x C-s
خروج: C-x C-c
برای سوییچ بین بافر ها
(همون eshell ای که اول باز کردید یکیشونه):

C-x b
بستن بافر: C-x k
ایجاد split:
C-x 2, C-x 3
برای سوییچ بین split ها: C-x o
بستن سایر split ها: C-x 1
بستن split فعلی: C-x 0
برای undo و redo کردن: C-x u
(برای redo باید undo رو undo کنید P:)
برای تغییر زوم، اول C-x میزنید، بعد با موارد زیر زوم رو کم و زیاد میکنید:
C-=, C--
برای حذف کاراکتر: C-d
برای حذف کلمه: M-d
برای حذف از مکان فعلی کرسر تا انتهای لاین: C-k
برای رفتن به ابتدا و انتهای فایل:
M->, M-<
فکر کنم این کی بایند ها برای دووم آوردن داخل ایمکس برای روز اول کافی باشن.

اضافه کنم: اگه درست یادم باشه
(تست نکردم)

میشه با C-u و بعد عدد کی بایند ها رو تکرار کرد، مثلا:
C-u 3 M-f
3 کلمه کرسر رو به جلو حرکت میده.

در انتها اگه این مطلب براتون مفید بود و دلتون خواست، لطفا برای شادی روح یحیی تجری فرزند حسین یه فاتحه بخونید.

🔅@LinFAQ
🔅@LinAcademy
👍31
#روزی_یک_نکته این قسمت با خودم (رضا)

دسته‌بندی: #کاربردی #آموزشی #wayland

میخواستم یه اسکرین شات بگیرم ولی از اونجایی که لپتاپ به مانیتور وصل بود از جفت صفحه ها اسکرین شات میگرفت
و چون از sway wm استفاده میکنم
(ویلند عه)

و تنها ابزاری که میشناختم اسکرین شات بگیره grim بود

رفتم دنبالش ببینم باید چیکار کنم تا با موس قسمتی که select میکنم اسکرین شات بگیره
که با Slurp آشنا شدم احتمالا خیلی هاتون میدونید چیه و یا کار هم کردید باهاش ولی ،
یه سری آپشن ها داره که منطقه ای که select می‌کنی رو مختصات اون مکان رو میگه و یا به عنوان color picker هم میتونید استفاده کنید و خیلی کارهای دیگه

و خب معلومه باید این ابزار رو داخل grim استفاده کنیم
برای مثال
grim -g "$(slurp)"
و خب میتونیم بیشتر دسترسی کاستوم کردن تو فایل نهایی عکس داشته باشیم
مثلا کامند زیر از مانیتور فوکوس شده میگیره
(همونی که الان آیکون موس روشه و پنجره ها فعال)


grim -o $(swaymsg -t get_outputs | jq -r '.[] | select(.focused) | .name')
یا مثال دیگه با این کامند با استفاده از
image magick
کار
Color picker
انجام میدیم

grim -g "$(slurp -p)" -t ppm - | convert - -format '%[pixel:p{0,0}]' txt:-

Source
نکته: jq رو یادتون نره نصب کنید

🔅@LinFAQ
🔅@LinAcademy
#روزی_یک_نکته با دلاتو

دسته‌بندی: #کاربردی #آموزشی

راجب وارد کردن محتوای چند فایل به stdin:
بعضی مواقع یه اسکریپت یا دستوری دارید (مثل دستور
sudo pacman -Syu --needed - < packages.txt
که داخل یکی از نکات قبلی بیان شد) و نیازه که به جای یه فایل، چند فایل رو به عنوان ورودی بهش بدید
(تو همین مورد بالا به عنوان مثال بخواید لیست پکیج هاتون رو داخل فایل های مختلف قرار بدید و دسته بندی کنید).

اولین چیزی که به ذهن میرسه اینه که شخص کل اون فایل ها رو پشت هم لیست کنه، اما جواب نمیده و فقط یکیشون رو به عنوان ورودی ارائه میکنه (فکر کنم مورد آخر؟). راه حلش هم ساده هست، مثال:
cat < <(cat file.txt file2.txt)
که دستور بالا محتوای هر 2 فایل رو نمایش میده، اما اگه تست کنید
cat < file.txt file2.txt
فقط محتوای فایل دوم نمایش داده میشه و اگه از
cat < cat file.txt file2.txt
استفاده کنید احتمالا
(اگه فایلی به اسم cat تو اون مسیر نداشته باشید P:)

با خطای "no such file or directory" مواجه میشید
(پس بین این 3 مورد فقط مورد اول درست جواب میده).

در نهایت تاکید کنم اون cat ابتدای 3 دستور بالا صرفا جهت بررسی صحت مقدار stdin از طریق پرینتش هست و طبیعتا باید با دستور یا اسکریپت مد نظرتون جایگزین بشه.

منابع بیشتر:
https://stackoverflow.com/questions/33157198/multiple-input-text-files-as-stdin-under-unix

https://unix.stackexchange.com/questions/20285/shorthand-for-feeding-contents-of-multiple-files-to-the-stdin-of-a-script

https://stackoverflow.com/questions/1487319/submitting-multiple-files-from-shell-script-through-standard-input

https://stackoverflow.com/questions/44552188/redirect-multiple-files-to-stdin

🔅@LinFAQ
🔅@LinAcademy
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی #emacs

یه سری منابع برای mu4e
(هنوز سراغش نرفتم، صرفا تحقیقه):


راستی یه کپی از emacswiki راجب mu4e برم:
mu4e is an email client for Emacs. It’s based on the mu email indexer/searcher.

- قبلا یه ویدئو distrotube راجبش داده:

Setting Up The Mu4e Email Client In Doom Emacs

https://youtu.be/LKp3hQP2VxQ

کم و بیش درسته، فقط اون mbsync-git رو تا جایی که میدونم نیاز نیست نصب کنید، isync داخل مخازن رسمی هست.
اگه میخواید راجب isync بیشتر مطالعه کنید
(به صورت کلی چیز جالبیه، بنظرم به چک کردنش میرزه):

https://wiki.archlinux.org/title/isync
منابع بیشتر راجب mu4e:
https://www.emacswiki.org/emacs/mu4e
اسکرین شات ها و منبع رسمی:
https://www.djcbsoftware.nl/code/mu/mu4e.html
میتونید کانفیگ gavin رو هم راجبش چک کنید:
https://github.com/Gavinok/emacs.d/blob/main/lisp/mu4e-config.el

🔅@LinFAQ
🔅@LinAcademy
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی #emacs

راجب hook و فعال کردن لاین نامبر در مد های مورد نیاز داخل ایمکس:
وقتی میخوان یه فانکشن بعد از یه رویدادی
(مثل اجرای یه فانکشن دیگه یا مد خاصی یا...)

اجرا بشه، از hook استفاده میکنن
(یا حداقل برداشت من از hook اینطوری بوده).


یه نمونه هم ازش بخوام بگم این هست:
(add-hook 'prog-mode-hook 'display-line-numbers-mode)

که  در واقع داره میگه اگه major mode بافر جزو prog-mode بود، بیاد لاین نامبر رو هم فعال کنه.
اینطوری داخل چیز هایی مثل dired که مدیر فایل هست یا کلا هر جایی که کد نیست، لاین نامبر رو هم نمیبینیم.

کلا major mode هایی که زبان برنامه نویسی هستن توی این دسته قرار میگیرن (در کل مفهوم major mode مشابه file type داخل (نئو)ویم هست).


حالا کد زیر رو داریم:
(use-package display-line-numbers
  :hook org-mode prog-mode
  )

تو اینجا داریم از use-package استفاده میکنیم، برای همین اسم پکیجی که فانکشن display-line-numbers-mode شامل میشه رو به کار میبریم، بعد بهش میگیم که تو کدوم پکیج ها قراره لاین نامبر نمایش داده بشه، اینطوری ۲ سود داره:
1- به جای اسم فانکشن ها، اسم پکیج ها رو به کار میبریم که عموما کوتاه تره.
2- همونطور که میبینید میتونم با یه بار نوشتن hook، داخل هر چند مدی که میخوام لاین نامبر رو نمایش بدم. مثلا اینجا علاوه بر prog-mode، داخل فایل هایی که org هستن هم لاین نامبر نمایش داده میشه.
راجب use-package بخوام مختصر بگم، برای کانفیگ ساده تر ازش استفاده میشه و پیش فرض توی نسخه های جدید ایمکس نصب هست.

جهت فهمیدن این که function یا variable مربوط به کدوم پکیج هست میتونید کی بایند C-h f یا C-h v رو بسته به function یا variable بودن بزنید و بعد اسمش رو وارد کنید، همون چند خط اول نوشته که برای کدوم پکیج هست، میتونید از طریق پسوند el تشخیص بدید.


اگه توی نکته ایرادی بود پیشاپیش عذر میخوام، به دلیل آشنایی کمم با ایمکس هست چون کلا یه هفته هست که دارم ازش استفاده میکنم و تو این یه هفته هم شاید بیشتر از ۱۰ ساعت ازش استفاده نکردم، ضمنا خوشحال میشم اگه خواستید ایراد رو اصلاح و بیان کنید.

در انتها اگه این مطلب براتون مفید بود و دلتون خواست، لطفا برای شادی روح یحیی تجری فرزند حسین یه فاتحه بخونید.

🔅@LinFAQ
🔅@LinAcademy
1
#روزی_یک_نکته با دلاتو

دسته‌بندی: #کاربردی #آموزشی #makefile

راجب make:
احتمالا تا حالا Makefile رو دیده باشید
مخصوصا اگه از ابزارا suckless استفاده کردید.

تعریفم شاید دقیق نباشه، اما سعی میکنم واضح بیانش کنم: make یه ابزار هست که محتوای Makefile رو میخونه و بر اساس آرگومانی که بهش میدیم، میاد یه کاری رو انجام میده.
طوری که بهش نگاه میکنم: یه جورایی Makefile انگار یه فایل با یه سری switch case هست که وجود یا بروز بودن یه فایل یا یه case دیگه رو نگاه میکنه و بر اساس اون آرگومانی که بهش میدید، یه سری دستوراتی رو انجام میده.
کاربرد اصلیش بیلد کردن پکیج ها و کامپایل، اکسپورت کردن و... هست
مثلا جای این که بنویسید gcc... میاید میزنید make و تمام.

و خاصیتش اتومات کردن کار، سادگی تایپ، سرعت بالا تر
خودش چک میکنه اگه فایلی بروز بود دیگه دستش نمیزنه و... سر همین پروسه زمان کمتری میبره.

و عدم تکرار اسم فایل ها و... هست.
میتونید متغیر براش تعریف کنید.

نمونه کار های خلاقانه دیگه ای که براش دیدم میشه از مدیریت کانفیگ ها گفت:
How To Manage Your Dotfiles With Make

خودم خیلی باهاش کار نکردم، پس هم در حد پایه گفتم و هم خیلی اعتبار این نکته بالا نیست، اما قابل بیان دونستمش، اگه توضیح کامل میخواید منبع رسمی شاید بهترین گزینه باشه.

داخل یوتیوب هم آموزش راجبش زیاد هست، 2 تا آموزش کوتاه و یه نکته ای که نسبتا باید حواستون بهش باشه رو اضافه میکنم:
How to Create a Simple Makefile - Introduction to Makefiles

Learn make in 60 seconds.

Why that "Perfect" Makefile Doesn't Work.

چون 3 لینک بالا رو اضافه کردم و توضیحاتشون رو بیشتر از دانش خودم دونستم، پس نحوه نوشتن Makefile رو دیگه توضیح نمیدم. صرفا یه نمونه که برای نیاز خودم نوشتم رو ضمیمه این پست میکنم.

در انتها اگه این مطلب براتون مفید بود و دلتون خواست، لطفا برای شادی روح یحیی تجری فرزند حسین یه فاتحه بخونید.

🔅@LinFAQ
🔅@LinAcademy
👍3
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی #emacs

قابلیت های پیش فرض ایمکس که برام جالب و مهم بودن و آشنایی باهاشون موقع تغییر ادیتور به ایمکس نسبتا واجبه:

- مورد اول org mode هست، میشه یه سری پکیج مثل org-modern نصبید که ظاهر بهتر بشه، اما حتی وجود خود org mode و گرفتن خروجی کد داخل هر فایل دیگه و... قابلیت مفیدیه.

- مورد بعد eshell هست، عملا بهتون یه شل میده که داخلش میتونید از فانکشن های ایمکس استفاده کنید، مثلا بیاید با find-file یه فایل رو داخل همون پنجره ایمکس باز کنید و...

- برا مدیر فایل هم dired رو داریم. ازش زیاد استفاده نکردم پس نظری نمیدم، اما قابلیت هاش رو نگاه بندازید جالبه.

- میشه داخل هر فایلی (تا جایی که میدونم هر بافری که میشه داخلش تایپ کرد) کد elisp نوشت و با C-x C-e اجراش کرد. مثلا وسط کد نوشتن جای این که M-x بزنید، داخل همون فایل فانکشن رو مینویسید و اجراش میکنید و بعد لاین رو حذف میکنید.

- کلید تب به صورت پیش فرض indent اون خط رو اصلاح میکنه.

- سیستم daemon client. هم زمان باز شدن پنجره رو صفر میکنه و هم میتونید باهاش از طریق شل یا ابزار های مختلف به ایمکس فرمان بدید.
ضمنا دیگه نیاز نیست نگران اشتباهی بستن پنجره باشید.
پیشنهاد میدم ویدئو زیر از protesilaos stavrou رو براش ببینید:
Basics of Emacs client (`emacsclient' program)

- تو نسخه جدید ایمکس، use-package به صورت builtin وجود داره که استفاده ازش کمک میکنه کانفیگ خیلی منظم تر بشه (علاوه بر بهبود سرعت لود اولیه و...).

- وجود major modes و prog-mode. تا حدی مشابه file type هستن، اما انگار درک خیلی بهتری دارن.
برای لیست زبان هایی که دیفالت major mode شون ردیفه قبلا لینک داده بودم.

- سیستم راهنماش. چند نکته راجبش هست:
1- راهنما های بخش های مختلف کی بایند هاشون جدا و دسته بندی شده.
مثلا C-h v برای variable ها.

2- وقتی راهنمای function یا variable یا... رو چک میکنید، داخل split ای که براش باز میشه فقط مطالب مربوط به همون function یا variable یا... رو میبینید.
3- داخل راهنما گفته شده که اون function یا... برای کدوم پکیج هست.
4- اگه درست یادم باشه مقدار پیشفرض و مقدار فعلی اون variable یا... رو میگه.

- گرافیکی بودنش و پشتیبانی عالی از ligatures و زبان فارسی و...

اینا قابلیت هایی بودن که تو چند ساعت اول کار با ایمکس به چشمم اومدن و هنوز قابلیت هایی مثل compiler و debugger رو نگاه هم ننداختم.

🔅@LinFAQ
🔅@LinAcademy
#روزی_یک_نکته با دلاتو

دسته‌بندی: #کاربردی #آموزشی #emacs

(خیلی فواصل نکات نامنظم شده) راجب نمایش انواع داکیومنت داخل emacs:

- ایمکس یه DocView mode داره که میتونید باهاش انواع فرمت های داکیومنت رو ببینید.
- برای نمایش هم کاملا مشابه بقیه فایل ها عمل میکنید، مثلا find-file test.pdf از داخل ایمکس.
- برای نمایش pdf از ghostscript یا mupdf استفاده میکنه، پس طبیعتا حداقل یکیشون باید نصب باشه.
- اگه محتوای داکیومنت بروز شده بود، میتونید برای refresh کردن محتوایی که داره داخل DocView نمایش داده میشه از کلید g استفاده کنید.
- با C-c C-c میتونید بین نمایش فایل با DocView و تکست سوییچ کنید.
برای فایل هایی مثل pdf طبیعتا فقط DocView نیاز میشه، اما تو svg میتونه قضیه فرق کنه.

- اصولا برای هر فرمت داکیومنتی که خودش اشاره کرده جوابه، اما احتمالا چون هیچ آفیسی روی سیستم نصب نداشتم نتونستم ppt رو با ایمکس باز کنم.
- میتونید این رو هم جهت مطالعه بیشتر چک کنید.
- ضمنا pdf-tools رو هم نگاه بندازید خوبه، این stackoverflow رو هم میتونید براش چک کنید.
خودم تستش نکردم ولی فکر کنم از DocView عملکرد بهتری نشون بده.


source

🔅@LinFAQ
🔅@LinAcademy
#روزی_یک_نکته با سهراب

دسته‌بندی: #آموزشی #کاربردی #Debian

بعد از نصب دبیان چه کارهایی رو باید انجام بدیم؟ 🫡

اگر شما به تازگی توزیع دبیان رو نصب کردین یا قصد نصب کردنشو دارید پیشنهاد میکنم این متن رو بخونید.

۱. بعد از نصب توزیع دبیان حتما مخازن nonfree و contrib رو فعال کنید.

چطور؟
با استفاده از ادیتوری که دوست دارید، فایل
/etc/sources.list
رو باز کنید و جلوی لینک مخازن مثل نمونه پایین اگه مخزن لینکش:
deb https://deb.debian.org/debian/ bullseye main


هست اون رو به

deb https://deb.debian.org/debian/ bullseye main contrib non-free

تغییر بدید.
این کار رو برای همه مخازن از جمله مخازن اپدیت انجام بدید.


۲. فعال کردن نتورک منیجر.

اگه توزیع دبیان رو با دسکتاپ مدنظرتون نصب کنید ، بعد از اولین لاگین ممکنه که در افزونه نتورک منیجر با عبارت no connection و یا در nmcli با عبارت unmanaged روبرو بشید.
چطور این رو درست کنیم؟
کافیه فایل
/etc/NetworkManager/NetworkManager.conf

رو باز کنید ( حروف بزرگ و کوچیک رعایت شود)
و در این فایل managed=false رو به managed=true تغییر بدید و ذخیره کنید سپس نتورک منیجر رو ری استارت کنید.
sudo systemctl restart NetworkManager


۳. دادن دسترسی sudo به یوزر

معمولا بعد از نصب دبیان یوزری که ساختید دسترسی روت نداره و وقتی از sudo استفاده میکنید با خطا مواجه میشید.
برای درست کردن این نیز ۲ راه دارید
راه اول:
اضافه کردن یوزر به گروه sudo
برای این کار باید دستور:
usermod -aG sudo username

رو بزنید و سپس با استفاده از دستور:
getent group sudo

برسی کنید که آیا یوزر شما به این گروه اضافه شده و یا نه اگر این کار رو بکنید دسترسی sudo برای یوزر شما باز میشه.
راه دوم:
ادیت کردن مستقیم فایل sudoers
اگر به هر دلیلی راه بالا براتون کارنکرد میتونید از این راه هم برید
برای این کار اول دسترسی روت رو بگیرید
با استفاده از کامند su و وارد کردن رمز روت شما دسترسی روت رو میگیرید
سپس باید فایل
/etc/sudoers
رو با ادیتورتون باز کنید و بعد در اون فایل زیر خط
root ALL=(ALL) ALL

با توجه به یوزرنیمتون یکی مثل همون بنویسید مثلا اگه یوزرنیم شما sohrab هست باید
sohrab ALL=(ALL) ALL

رو بنویسید و ذخیره کنید تا دسترسی sudo برای یوزرتون باز بشه.

۴. فعال کردن لیست یوزر ها در lightdm
اگه از lightdm استفاده میکنید ممکنه که ببینید که از شما برای لاگین کردن یوزرنیم میخواد بجای اینکه یوزرنیم شمارو نشون بده برای رفع این مشکل باید فایل کانفیگ lightdm که
/etc/lightdm/lightdm.conf

هست رو باز کنید و قسمت
greeter-hide-users=false

رو از کامنت بودن در بیارید ( عبارت # پشتش رو پاک کنید)

و یک نکته که توی پست بعدی میگم........
source


🔅@LinFAQ
🔅@LinAcademy
LinFAQ
یک نکته که توی پست بعدی میگم
#روزی_یک_نکته با سهراب

دسته‌بندی: #آموزشی #کاربردی #Debian

ادامه نکته قبل
اگه هدفتون نصب دبیان sid هستش.
موقع نصب دسکتاپ انتخاب نکنید
دبیان رو به صورت مینیمال نصب کنید
و بعدش توی کانفیگ مخازن بعد از نصب که فایل
/etc/apt/sources.list
هستش رو باز کنید
همه مخازن داخلش رو پاک کنید چون دبیان sid نیازی به مخازن اپدیت دبیان نداره و رولینگ هست
جز این مخزن که مخزن اصلی هستش که این رو

deb https://deb.debian.org/debian/ bullseye main


به


deb https://deb.debian.org/debian/ sid main non-free contrib

تغییر بدید
یک دور دبیان رو کاملا اپدیت کنید:
sudo apt update && sudo apt upgrade

تبریک الان دبیان sid دارید
دسکتاپی که هم دوست دارید یا دستی و یا با کامند
tasksel 

نصب کنید.
حالا چرا گفتم دسکتاپ نصب نکنید؟
چون اگه دسکتاپ نصب کنید و بعدش مخازن رو به sid تغییر بدید، حجم اپدیتی که ازتون میگیره زیاد هست و به صرفه نیست.

و حتما مراحل پست بالا رو برای sudo و lightdm و network manager انجام بدید.

source

🔅@LinFAQ
🔅@LinAcademy
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی #shell

راجب چک کردن دستوری که alias اجرا میکنه:
این سری خیلی کوتاهه.

کافیه از دستور زیر استفاده کنید:
type <alias>

مثال:
دستور زیر


برای تعریف کردن alias
alias vim='nvim'


type update
داخل کانفیگ خودم خروجی زیر رو داره:
update is aliased to `sudo pacman -Syu --needed - < $HOME/nEwRA/packages.txt'

🔅@LinFAQ
🔅@LinAcademy
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی #neovim

یه مطلبی بود که راجب یادگیری نئوویم نوشتم
اول ببین با کی بایند ها راحتی؟
میتونی توی فایل جا به جا شی و redo و undo کنی؟
بعد از یه مدت که دیگه نیاز نداشتی دستت رو ببری روی ماوس یا arrow keys، برو سراغ مباحث بعدی.
اگه هنوز با پیش فرض ها راحت نیستی، کی بایند ها رو یاد بگیر، ترمینال باز کن و بنویس vimtutor و باهاش پیش برو یا این که این ویدئو رو ببین.
خودم نحوه hjkl و esc و wq: رو یاد گرفتم و بعد هر چیزی نیازم شد مثل undo رو با یه سرچ ساده بدست آوردم.

تاکید میکنم، برای رفتن به نرمال مد به جای esc، اول alt رو نگه دار و بعد کاری که میخوای انجام بدی رو بزن. مثالش اینه که alt j میبرتت به نرمال مد و بعد کرسر رو یه خط پایین میبره.

بهتره توی این مرحله با visual mode آشنا بشی و نحوه جستجو داخل متن رو تا حد نیاز یاد بگیری.

بعد از یادگیری کی بایند ها در حد نیاز، چون با پایه ها راحتی ابزار رو گسترش میدی، پس باید بری سراغ کانفیگ جهت اضافه کردن قابلیت هایی که نیاز داری مثل suggestion بهتر یا... به نئوویم.
پیشنهاد میدم اول این ویدئو و این یکی رو ببینی تا متوجه شی نئوویم چه قابلیت هایی رو بدون پلاگین ارائه میده، بعد این ویدئو رو ببین تا یه کانفیگ پایه آماده با پلاگین بدست بیاری و یا این که برو سراغ nvpak که کانفیگ علی باشه.
در انتها مطالبی مثل macro میمونه که اگه بدونی خیلی کمکت میکنه.
جدای از این ها خیلی از قابلیت ها مثل کامند make هستن که کمک میکنه، اما توی جامعه خیلی کمتر میبینی و پیدا کردن مطالب براش به این راحتی نیست.

بعد از کل موارد بالا اگه به نقطه ای رسیدی که خواستی نئوویم رو از صفر کانفیگ کنی این منبع خیلی کمکت میکنه.
یه نکته ای رو داشت یادم میرفت، هر چیزی برات سوال شد داخل کامند مد h و بعد چیزی که میخوای راجبش بیشتر بدونی رو بزن.


source

🔅@LinFAQ
🔅@LinAcademy
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی

راجب disown و nohup :

اگه بخواید ابزار گرافیکی رو از طریق ترمینال اجرا کنید 3 مسئله هست:
1- خروجی های ابزار گرافیکی به ترمینال فرستاده میشه و اگه دنبال پیدا کردن خطا یا... نباشید دیدنشون فقط رو مخه.
2- شل رو آزاد نمیکنه و ترمینال عملا بلا استفاده میشه.
3- بعد از بستن ترمینال، ابزار گرافیکی هم بسته میشه.

مورد دوم رو با & انتهای دستور میشه حل کرد، اما باز مورد اول و سوم میمونن.

برای حل این قضیه 2 راه داریم:
1- استفاده از nohup.
مثال:
nohup zathura file.pdf &
دقت کنید اگه اون & انتها نباشه شل آزاد نمیشه.


2- استفاده از disown. مثال:
zathura file.pdf &
disown



نکته :
zathura (document viewer)
عه که استفاده شده


البته یه قضیه هم راجب nohup هست: یه فایل nohup.out داخل مسیری که هستین میسازه و خروجی ها رو به جای ترمینال، داخل اون فایل قرار میده.

راجب توضیح دقیق این که disown و nohup چی کار میکنن و فرقشون چیه بهتره که این 3 لینک رو چک کنید:
به هر حال توضیح من یه برداشت ناقص از این منابع میشد.

https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and

https://askubuntu.com/questions/439187/how-to-open-a-gui-application-and-disconnect-it

https://man.archlinux.org/man/nohup.1.en

source

🔅@LinFAQ
🔅@LinAcademy
👍4
#روزی_یک_نکته با حسن

دسته‌بندی: #آموزشی #کاربردی

بحث راجب این بود که چرا فایلی رو داریم انتقال میدیم یا کار های دیگه انجام میدیم باهاش توی لینوکس روی 100% زمان بیشتری طول میکشه یا گیر میکنه.

توضیح اتفاقی که میفته به صورت کامل :

اتفاقی که میفته از این قرار هست که هسته لینوکس فایلی که قراره کپی بشه با سرعت بالایی توی بافر حافظه اصلی (RAM) کپی میکنه و سرعت بسیار بالایی داره .

این وسط مدیر فایل وقتی هسته، فایل رو به بافر منتقل کرد فکر میکنه که واقعا فایل توی مقصد کپی شده (ولی در اصل فایل توی بافر (RAM) کپی شده و فایل منیجر سعی میکنه کپی کردن رو کنسل کنه !!! ولی هسته داره فایل رو از بافر به هارد یا یو اس بی کپی میکنه و فایل منیجر چاره ای نداره جز اینکه هنگ کنه و منتظر سیگنال هسته باشه و دقیقا بعد از اینکه هسته لینوکس کپی کردن رو تموم میکنه فایل منیجر هم تموم پنجره رو میبنده .

اتفاقی که میفته این هست که پیشروی کپی کردن رو به صورت ریل تایم نمیبینی ...!!!

راه حل هم داره .

راه حل این مشکل :

راه حل این هست که فضای بافر برای این عملیات رو محدود کرد به یک رقم خاص که هسته بعد از پر شدن این فضا دیتا رو روی مقصد رایت کنه

این فایل رو باید توی این مسیر ایجاد کرد :
etc/sysctl.d/90-dirty.conf

و داخل این فایل این کامند رو گذاشت:
vm.dirty_background_bytes=16777216 vm.dirty_bytes=50331648

خب حالا این کامند چیه؟

این عدد به بایت هست و مقداری رو مشخص میکنه که هسته بعد از این رقم بافر دیتارو رایت کنه توی مقصد و پیشروی هم گام به گام با کپی نشون داده بشه .


حتما بعد از کانفینگ یک بار ریستارت کنید سیستم رو

🔅@LinFAQ
🔅@LinAcademy
👍2👎1🔥1
LinFAQ
راه حل این مشکل :
راه حل موقت برای تست:
این کامند رو یک بار توی ترمینال بزنید

echo 15728640 > /proc/sys/vm/dirty_bytes

نکته: این راه حل موقتی هست و هربار سیستم بوت میشه باید دوباره بزنید ولی روش کانفینگ دائمی هست

میزان بافر اینجا ۱۵ مگابایت محدود شده .

🔅@LinFAQ
🔅@LinAcademy
🥰1