محمدمهدی بخشی
محمدمهدی بخشی
خواندن ۲ دقیقه·۵ سال پیش

ایمکس بدون مکث؛ چگونه مشکل فیرا کد رو حل کنیم؟

یه عده عاشق چیزای فانتزین ولی فیرا کد (Fira Code) از اون دسته فونتهاییه که همه عاشقش میشن! یکی از قابلیت‌های خوب این فونت Ligatures یا اتصال حروف هست که اون رو از بقیه فونت‌ها متمایز میکنه، یعنی عکس زیر:

سمت راست حروف نامتصل و سمت چپ حروف متصل
سمت راست حروف نامتصل و سمت چپ حروف متصل

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

مشکلی که بین فیرا کد و ایمکس وجود داره اینه که Ligatureها به خودی خود روی ایمکس کار نمیکنن و همه چیز همون حالت کسل‌کننده اولیه‌ی خودش رو داره :))

برای حل این مشکل باید قدم‌های زیر رو طی کنیم!

من کاربر آرچم و بیشتر با توجه به آرچ می‌نویسم، اما این آموزش بقیه توزیع‌ها رو هم در نظر گرفته!

گام اول

واضحه که باید اول خود فیرا کد و ایمکس رو نصب کرده باشید، برای نصب فیرا اینجا و برای نصب ایمکس اینجا رو بخونید. (اگه میخواید اسپیسمکس که یه باندل خوب برای ایمکسه رو هم نصب کنید، اینجا رو بخونید.)

ضمنا برای کاربرای آرچ باید بگم که همه‌ی اینها رو با AUR و پک‌من می‌تونید نصب کنید.

گام دوم

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

برای نصب این فونت می‌تونید بر اساس روش نصب فونت توی سیستم‌عامل خودتون جلو برید:

  • لینوکس: انتقال فایل فونت به usr/share/fonts/
  • ویندوز: راست‌کلیک روی فایل فونت و انتخاب گزینه install
  • مک: باز کردن فایل فونت و انتخاب گزینه Install Font
  • آرچ‌بیس‌ها: نصب otf-fira-code-symbol با AUR (مثلا با برنامه trizen یا yay)

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

fc-cache -vf

به نظر میاد برای ویندوز اینجا و برای مک اینجا جواب میده.

گام سوم

فایل تنظیمات (dotfile) اسپیسمکس یا ایمکس خودتون رو باز کنید.

  • ایمکس: emacs.d/init.el./~
  • اسپیسمکس: spacemacs./~

برای کاربرای اسپیسمکس، باید قسمت dotspacemacs-defaut-font که داخل فایل تنظیمات اسپیسمکس هست، این‌شکلی تعریف شده باشه:

dotspacemacs-default-font '(("FuraCode Nerd Font Mono" :size 16 :weight medium :width normal :powerline-scale 1.1) ("Fira Code Symbol" :size 16 :weight normal :width normal :powerline-scale 1.1))

برای کاربران ایمکس، این تنظیمات باید مطابق اینجا انجام بشه.

گام چهارم

حالا باید اصل کار انجام بشه، قطعه کد زیر رو داخل تنظیمات ایمکس یا اسپیسمکس بزارید.

توجه کنید که در اسپیسمکس باید این کد رو داخل تابع dotspacemacs/user-config فایل تنظیمات بزارید!
(defun my-correct-symbol-bounds (pretty-alist) "Prepend a TAB character to each symbol in this alist, this way compose-region called by prettify-symbols-mode will use the correct width of the symbols instead of the width measured by char-width." (mapcar (lambda (el) (setcdr el (string ?\t (cdr el))) el) pretty-alist)) (defun my-ligature-list (ligatures codepoint-start) "Create an alist of strings to replace with codepoints starting from codepoint-start." (let ((codepoints (-iterate '1+ codepoint-start (length ligatures)))) (-zip-pair ligatures codepoints))) (setq my-fira-code-ligatures (let* ((ligs '("www" "**" "***" "**/" "*>" "*/" "\\\\" "\\\\\\" "{-" "[]" "::" ":::" ":=" "!!" "!=" "!==" "-}" "--" "---" "-->" "->" "->>" "-<" "-<<" "-~" "#{" "#[" "##" "###" "####" "#(" "#?" "#_" "#_(" ".-" ".=" ".." "..<" "..." "?=" "??" ";;" "/*" "/**" "/=" "/==" "/>" "//" "///" "&&" "||" "||=" "|=" "|>" "^=" "$>" "++" "+++" "+>" "=:=" "==" "===" "==>" "=>" "=>>" "<=" "=<<" "=/=" ">-" ">=" ">=>" ">>" ">>-" ">>=" ">>>" "<*" "<*>" "<|" "<|>" "<$" "<$>" "<!--" "<-" "<--" "<->" "<+" "<+>" "<=" "<==" "<=>" "<=<" "<>" "<<" "<<-" "<<=" "<<<" "<~" "<~~" "</" "</>" "~@" "~-" "~=" "~>" "~~" "~~>" "%%" "x" ":" "+" "+" "*"))) (my-correct-symbol-bounds (my-ligature-list ligs #Xe100)))) (defun my-set-fira-code-ligatures () "Add fira code ligatures for use with prettify-symbols-mode." (setq prettify-symbols-alist (append my-fira-code-ligatures prettify-symbols-alist)) (prettify-symbols-mode)) (add-hook 'prog-mode-hook 'my-set-fira-code-ligatures)

گام آخر

حواستون جمع باشه که حتما کش فونت‌ها رو پاک کنید و ایمکس یا اسپیسمکس رو اگه بازه، ببندید و مجددا باز کنید. تامام تامام :))

پی‌نوشت اول: ایراد، اشکال یا سوالی اگه دارید در نظرات بپرسید. با لایک‌هاتون من رو در ادامه‌دادن این راه کمک کنید. ممنون.

پی‌نوشت دوم: این نوشته از سایت زیر گرفته و بازنویسی شد.

https://www.rockyourcode.com/fira-code-font-ligatures-in-emacs-spacemacs-on-arch-linux/

دیگر نوشته‌های من:

https://virgool.io/@thantez/%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%A8%D8%AF%D9%88%D9%86-%DA%A9%D8%A7%D8%A8%D9%88%D8%B3-%D8%AD%D9%84-%D9%85%D8%B4%DA%A9%D9%84-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-%D8%A8%D8%A7-%D9%BE%D8%A7%D8%B1%D8%AA%DB%8C%D8%B4%D9%86-%D9%87%D8%A7%DB%8C-ntfs-%D9%85%D8%B4%D8%AA%D8%B1%DA%A9-%D8%A8%D8%A7-%D9%88%DB%8C%D9%86%D8%AF%D9%88%D8%B2-yw4efaidg9jw


ایمکسemacsspacemacsاسپیسمکسfira code
یه برنامه نویس که قراره دنیا نویسی کنه!
شاید از این پست‌ها خوشتان بیاید