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

Advertise : @LinAdvertise

By @LinAcademy
Download Telegram
#روزی_یک_نکته با دلاتو

دسته‌بندی: #کاربردی #آموزشی #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
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی #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
#روزی_یک_نکته با دلاتو

دسته‌بندی: #آموزشی #کاربردی #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
#روزی_یک_نکته با دلاتو

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

باز کردن ابزار های tui داخل eshell:

اگه ابزار tui رو از طریق eshell باز کنید، به صورت پیش فرض فقط نمایش درست کار میکنه و کلید ها پاسخ نمیدن، اما با دستور زیر میشه ردیفش کرد:
(setq eshell-visual-commands'("bash" "crawl" "htop" "ssh" "top"))
البته صرفا یه راه حل... رو مخ! اجباری! هست چون کیفیت خیلی خوبی ارائه نمیده و اگه کلیدی با ایمکس مشترک باشه، به جای ابزار، ایمکس کلید رو میخونه
(مثل f10 برای htop).


منابع:
1- https://gitlab.com/dwt1/dotfiles/-/blob/master/.config/emacs/config.org

2- https://www.emacswiki.org/emacs/EshellVisualCommands

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

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

نمایش تصاویر داخل ایمکس:
خیلی ساده و با find-file، همونطور که فایل های عادی رو باز میکنید، به صورت پیش فرض میشه تصاویر رو هم باز کرد (((((=

Source


"خب من برم nsxiv رو حذف کنم که دیگه نیازی بهش ندارم"

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

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

باز کردن فایل با کمک dired:
کافیه وقتی داخل dired هستید، نشانگر رو روی فایلی که میخواید باز کنید ببرید، بعد ! رو بزنید، در انتها اسم ابزار
(مثل mpv برای فایل ویدئویی)

رو وارد کنید و فایل مورد نظر از داخل اون ابزار باز میشه.

Source

"خب دیگه فایل منیجر هم ردیف شد"

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

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

راجب دستور man داخل eshell:

اگه
which man
رو داخل eshell بزنید با این نتیجه مواجه میشید... ((((=
یعنی man هم به lisp بازنویسی شده و میتونید راحت manpage ها رو از داخل eshell باز کنید و پیش فرض هایلایت ردیف هست و...
"امیدوارم درست بیان کرده باشم، سطح هوشیاریم پایینه"

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

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

راجب دستور diff داخل eshell:

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

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

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

داشتم پیام های گروه میخوندم دیدم دارن از ربات (GPT) سوال میپرسن بعد دیدم جالبه دلاتو هم فرستاد برام دیگه به عنوان نکته گذاشتم

در Emacs ، می‌توانید از قابلیت ‍‍‍eshell برای پنهان کردن modeline استفاده کنید. برای این کار می‌توانید دستور زیر را به init.el یا فایل تنظیمات خود در Emacs اضافه کنید:


(add-hook 'eshell-mode-hook (lambda () (setq mode-line-format nil)))


با اضافه کردن این قطعه کد، modeline در eshell مخفی خواهد شد. اگر می‌خواهید بار دیگر نمایش داده شود، می‌توانید این تغییرات را بازنشانی کنید.

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

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

اضافه کردن melpa
(Milkypostman’s Emacs Lisp Package Archive)

و بروز کردن مخازن داخل ایمکس:
از کد زیر استفاده میکنید
(داخل init.el قرارش میدید):

(require 'package)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/"))
(package-initialize)
(unless package-archive-contents
  (package-refresh-contents))

اگه اون لاین unless package-archive-contents نباشه هر سری موقع لود ایمکس مخازن رو رفرش میکنه و زمان لود شدیدا بالا میره.

Source

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

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

راجب لود چندین فایل به صورت همزمان داخل lisp:

یه فایل داشتم که محتواش به این شکل بود، یعنی داشت سعی میکرد چندین فایل رو لود کنه و هر فایل داخل بلوک مخصوص به خودش بود با کلی کد تکراری.
یکی از دوستان پیشنهاد اصلاحش رو داد، منم از chatpgt سوال کردم و جواب این شد:
(defun load-multiple-files (file-list)
  (dolist (file file-list)
    (load (expand-file-name file))))
 
(let ((files-to-load '("file1.el" "file2.el" "file3.el")))
  (load-multiple-files files-to-load))


و خیلی هم عالی کار کرد.
مثالش که کد خودم باشه میشه این
(جهت جلوگیری از شلوغی و وضوح بیشتر لینکش رو میدم):


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

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

ردیف کردن lsp داخل emacs
language server protocol

کافیه دستور زیر رو به کانفیگتون اضافه کنید
(نمونه برای python هست، اسم مد رو بسته به زبان/ زبان ها عوض کنید):

(use-package eglot
  :ensure nil
  :hook
  (python-mode . eglot-ensure))
طبیعتا باید lsp برای اون زبان نصب باشه
(مثلا pyright رو از مخازن رسمی آرچ گرفتم).

اگه lsp رو تشخیص نداد باید دستی بهش مسیر بدید.

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

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

نحوه اضافه کردن alias به eshell ایمکس:
کافیه داخل eshell بنویسید:
eshell (emacs shell)

alias command1 'command2'
که هر دفعه command1 رو بزنید command2 اجرا میشه.
خودش alias رو به فایل alias داخل مسیر زیر اضافه میکنه:
~/.emacs.d/eshell/
البته دقت کنید که باید آرگومان ها رو دقیق معلوم کنید، مثال برای باز کردن فایل:
alias vim 'find-file $1'
وگرنه آرگومان رو قبول نمیکنه
(تو اینجا اسم فایل هدف رو).


Source

🔅@LinFAQ
🔅@LinAcademy