مروری بر ایمکس

سلام دوستان.

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

14 پسندیده

قسمت دوم:

11 پسندیده

قسمت سوم:

5 پسندیده

قسمت چهارم:

5 پسندیده

سلام
خیلی ممنون عالیه، منتظر قسمت 5 هستم.
برای خودم دارم یه ادیتور میسازم، مثل شما بدون دستکاری Emacs و فایل init.el خودمو موقع اجرا میدم به Emacs .
مشکلی که وجود داره اینه که بعضی از پکیج ها خودشون میرن توی فایل های Emacs توی پوشه .emacs.d و فایل .emacs مینویسن !!
به نظر سخت میاد که یکی یکی داکیومنت این پکیج هارو بخونم و مسیر تنظیمات هر کدوم رو جدا جدا تغییر بدم، راه ساده تری هست؟
این محتویات فایل .emacs هستش:

;; Added by Package.el.  This must come before configurations of
;; installed packages.  Don't delete this line.  If you don't want it,
;; just comment it out by adding a semicolon to the start of the line.
;; You may delete these explanatory comments.
(package-initialize)

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages
   (quote
    (jedi markdown-mode helm windresize ace-window expand-region flycheck multiple-cursors rainbow-delimiters dracula-theme parinfer paredit))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

و Jedi هم توی .emacs.d یه سری فایل ایجاد میکنه که بعد از دستور jedi:install-sever که برای اولین بار بعد از نصب Jedi باید اجرا بشه، ایجاد میشه.

1 پسندیده

راه سادش اینه که ایمکس رو با این پارامتر ها اجرا کنی:

emacs --no-site-file --no-site-lisp --no-splash -l your_init_file.el

و مسیر پکیج ها رو هم توی یه دایرکتوری دیگه ست کنی ( تو قسمت ۴ توضیح دادم ).
اما در آخر یه سری چیزا توی فایل های پیشفرض قرار می گیرن که زیاد مهم نیستن و یا با تغییر مسیر واسه هر کدوم میتونی درستش کنی.

در ضمن خیلی پیشنهاد می کنم برای پایتون به جای jedi از lsp-python استفاده کنی

2 پسندیده

سلام
من fg42 رو هم روی سیستمم دارم و فایل اجراییش رو همون اول نگاه کردم و دقیقا همینجوری که میگید اجرا میکنم.
مسیر package هارو هم تغییر دادم دقیقا همونجوری که گفتید.
اما هنوز بعضی پکیج ها خودشون فایل اضافه ایجاد میکنن که میره توی .emacs.d
توی fg42 این چند تا پکیج چه کاری رو انجام میدن؟ توی github توضیحاتش رو خوندم خیلی متوجه نشدم.

seq, ov, avy, eyebrowse
توی گیت لب برای Habij یه issue زدم که خلاصشو اینجا میگم. دفعه اولی که Habij باز میشه نمیتونه Package هارو نصب کنه و لازمه که لیست پکیج ها refresh بشه و Habij باز و بسته بشه تا بتونه نصب کنه. میشه به اول فانکشنی که نوشتین refresh کردن package هارو اضافه کرد ولی اینجوری هر دفعه که ادیتور باز بشه یه مدت زیادی طول میکشه تا refresh بشه. راهی هست که بشه یه فانکشن به صورت خودکار فقط بار اول اجرا بشه و دیگه هیچ وقت اجرا نشه مگه این که خودمون اجراش کنیم؟
1 پسندیده

تازه متوجه منظورت شدم. خوب این متاسفانه برمی گرده به کد اون کتابخونه ها و اینکه نویسنده یه سری مسیر رو هاردکد کرده. بعضیاش رو با تغییر یه متغیر یا تعریف مجدد یه فانکشن می شه درست کرد

بسیار کار پسندیده ای کردی. ممنونم.

کاملا منطقی هست. و راه حلش ساده. من می گم چجوریه و بد نیست خودت بنویسیش به عنوان تمرین و pull request بدی.

ساده ترین راه اینه که قبل از init کردن پکیج منیجر چک کنی ببینی دایرکتوری packages جایی که باید باشه هست یا نه. اگر بود که هیچی اگر نبود package-refresh-content رو صدا بزنی. و بعد ادامه init.

2 پسندیده

خیلی ممنون، حتما تا فردا سعی میکنم یکمی بیشتر در مورد elisp بخونم و انجامش بدم.

من الآن lsp-mode رو نصب کردم که مثل این که برای همه زبوناست نه فقط پایتون فقط برای هر زبونی که بخوای استفاده کنی باید package اش رو نصب کنی که من مال پایتون رو با pip نصب کردم.
الآن توی minibuffer برام توضیح کوتاه توابعی که روش هستم رو نشون میده و داره کار میکنه ولی auto complete نداره.
jedi هم تکمیل میکرد با تب هم اینکه یه پنجره کوچیک باز میشد و auto complete پیشنهاد میداد.

1 پسندیده

jedi رو پاک کن. برای lsp-python از پکیجی که مایکروسافت ساخته استفاده کن. اونی که روی pypi هست به شدت کند هست

2 پسندیده

آره jedi رو که کامل پاک کردم.
از همون پکیج مایکروسافت دارم استفاده میکنم:


الآن company و company-lsp رو نصب کردم و auto complete هارو داره میاره.

راستی برای Habij ، یه Merge Request زدم. اولین بارمه این کارو میکنم، ببخشید اگه مشکلی داره.

1 پسندیده

بسیار عالی. می بینم اگر نکته ای بود می گم که درست کنی :wink:

2 پسندیده

سلام
با یه مشکل خیلی عجیب رو به رو شدم و چند ساعته دارم بهش ور میرم درست نمیشه :sweat_smile:
این کانفیگ lsp-python-ms داخل فایل init.el توی مسیر lib/extension/python هستش (fg42) (کامنتارو پاک کردم)

(ability lsp-python ()
                    (require 'lsp-python-ms)
                    (add-hook 'python-mode-hook
                              (lambda ()
                                (push 'company-lsp company-backends)
                                (lsp)
                                (setq lsp-ui-sideline-show-code-actions nil)))))

این کانفیگ منه برای python :

(require 'company-lsp)
(require 'lsp-python-ms)

(defun my-python--setup ()
  (push 'company-lsp company-backends)
  (lsp))
  
(defun my-python-load ()
  (interactive)
  (add-hook 'python-mode-hook 'my-python--setup))

(provide 'my-python)

حالا مشکل کجاست؟ توی fg42 بعد از وارد کردن دو حرف پنجره auto complete میاد برای من بعد از سه یا چهار حرف و کند تر هم میاد. دقیقا روی یک فایل و کاملا یکسان تست کردم.
چه طور ممکنه؟؟؟

1 پسندیده

بخاطر این هست که کمپانی مد FG42 یه سری سورس های دیگه هم برای کامپلیت کردن داره. و کند بودنش هم احتمال خیلی زیاد بخاطر اینه که شما sideline دارید که اینجوری غیر فغال می شه:

 (setq lsp-ui-sideline-show-code-actions nil)
2 پسندیده

سلام
این سایدلاین غیر فعاله
در کل فکر کنم از fg42 استفاده کنم چون الآن دیگه خیلی از پکیج هاشو میشناسم و کم و بیش میتونم کانفیگش رو بخونم.
شما توی fg42 از Ido و برای M-x هم از Smex استفاده میکنید درسته؟ من یه مدت با Helm کار میکردم و به این نتیجه رسیدم که Ido بهتره، فقط یه قابلیتی که Helm داره و خیلی به دردم میخوره اینه که اگه interactive function ها key binding روشون ست شده باشه نمایش میده. میشه اینو به Ido اضافه کرد؟ :thinking:

1 پسندیده

FG42 این قابلیت رو داره

2 پسندیده

آره داره همین الآن دیدم :sweat_smile:
مال خودم نداشت
مرسی

2 پسندیده

قسمت پنجم:

6 پسندیده

مثل بقیه عالی بود. :heart:
دقیقا این سوال رو داشتم که توی auto complete های company چه طور میشه doc string رو دید که توی ویدیو گفتین با F1 و روی پایتون هم جواب داد، اما همونطور که خودتون هم گفتین با C-w توی پایتون نمیشه source رو دید. من کلا به این قابلیت دیدن source خیلی احتیاج دارم، حالا نه فقط توی auto complete های company اگه میتونستم یه key binding داشته باشم که cursor روی هر method ای بود با زدن اون source اون method رو میدیدم عالی میشد. توی IDE هایی مثل Intellij IDEA با نگه داشتن Ctrl و کلیک کردن روی method میشه این کار رو کرد.

1 پسندیده

اگر FG42 استفاده می کنی می تونه وقتی cursor روی هر کلمه ای هست (‌ منظور mouse cursor نیست‌ ) با کلید C-u i سورس اون سیمبل رو ببینی. البته من از dumbjump استفاده کردم و یه سری از پلاگین ها مثل پایتون و جاوا فانکشن های خودشون رو دارن ولی dumbjump اونجا هم کار می کنه

2 پسندیده