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

Advertise : @LinAdvertise

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

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

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

اضافه کردن auto completion به ایمکس:

کافیه پکیج corfu رو نصب کنید،  مراحل کامل کانفیگ و نصب اینجا گفته شده و چون یکم دستورات طولانی هستن اینجا تایپ نمیکنم که شلوغ نشه... و خب همش کپی پیسته.
راجب اون popup menu ای که داره توضیحات نشون میده، برای فعال کردنش
(corfu-popupinfo-mode)

رو به بخش init ااون use-package اضافه کنید، اگه موفق نشیدید یا سوالی داشتید راحت باشید و بپرسید.

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

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

برای دیباگ کردن کد پایتون داخل ایمکس با pdb
(بدون نیاز به پکیج اضافه یا...):

اول alt x (در واقع M-x) رو میزنید.
بعد pdb رو تایپ میکنید و اینتر میزنید.
بعد دستور رو
(خودش python -m pdb رو اول داره، اسم فایل رو به انتهاش اضافه کنید)

وارد میکنید، مثال:
python -m pdb test.py
الان وارد دیباگر شدید، بقیه مراحل مشابه این ویدئو پیش میره:
Command-Line Python Debugging with pdb

دقت کنید محتوای ویدئو داخل هر جایی قابل انجامه و به ادیتور/ ide وابسته نیست.

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

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

اجرای دستورات شل به صورت async داخل ایمکس:
کافیه M-x رو بزنید و بعد async-shell-command رو انتخاب کنید و بعد از اینتر زدن دستورتون رو وارد کنید.
اگه project-async-shell-command رو انتخاب کنید دستور داخل root پروژه اجرا میشه
(که هنوز نمیدونم چجوری تشخیص میده و باید بیشتر تحقیق کنم و پیش برم).


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

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

ردیف کردن tree-sitter داخل ایمکس:

گام اول باید require ش کنید.

گام دوم لیست کردن گرامر هاست.

گام سوم نصبشونه.

گام چهارم باید به major mode ها hook شون کنید که جایگزین بشن.

نمونه: خط های 443 و 444 که کامنتشون کردم مربوط به مرحله سوم یعنی نصب هست و برای این کامنت هستن که با هر بار اجرای ایمکس از نو clone نشه و...

بعد اگه eglot استفاده میکنید یا هر چیزی هست که به major mode اولیه hook شده، باید به این مد هم hook بشه وگرنه اجرا نمیشه، نمونه.

منبع جهت توضیح کامل:

لیست گرامر ها:


میدونم توضیحاتم کم بود ولی دلیل این بود که منبع گفته شده، به صورت کامل توضیح داده و توضیح قضیه طولانی میشد برای همین خلاصه گفتم


اگه سوالی هم داشتید
(که با وجود توضیح کمم احتمالا پیش بیاد)

راحت باشید و بپرسید.

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

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

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

نمایش trailing space داخل ایمکس:
(setq-default show-trailing-whitespace t)
Source

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

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

جا به جا کردن بافر ها بین split ها داخل ایمکس:
کافیه از پکیج buffer-move استفاده کنید:
(use-package buffer-move)
بعد با دستورات buf-move-up و buf-move-down و buf-move-left و buf-move-right میشه بافر ها رو بین اسپلیت ها عوض کرد
(که طبیعتا براشون کی بایند ردیف میکنید).


Source

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

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

برای بدست آوردن یه ترمینال با امکانات کامل داخل emacs باید چیکار کنیم؟🤔

فقط کافیه از vterm استفاده کنید:
(use-package vterm
ensure t)

برای پنهان کردن modeline داخل vterm هم از دستور زیر استفاده کنید:
(add-hook 'vterm-mode-hook
(lambda () (setq mode-line-format nil)))

ضمنا نیازه که cmake هم روی سیستمتون نصب باشه.


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

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

خب برای اینکه bash با vterm هماهنگ کنیم باید چیکار کنیم؟
(بر اساس bash میگم، خودتون با بقیه شل ها مچش کنید)

اول داخل bashrc کد زیر رو اضافه میکنیم:
if [[ "$INSIDE_EMACS" = 'vterm' ]] \
    && [[ -n ${EMACS_VTERM_PATH} ]] \
    && [[ -f ${EMACS_VTERM_PATH}/etc/emacs-vterm-bash.sh ]]; then
source ${EMACS_VTERM_PATH}/etc/emacs-vterm-bash.sh
fi

خب تموم شد حالا الان اگه داخل vterm از cd استفاده کنید، مسیر کل ایمکس تغییر میکنه

Source


@LinFAQ | @LinAcademy
1