4.4 KiB
4.4 KiB
Languages
Intro
This is where Programming Language modes are configured.
Default Settings
(defun lang-default-settings ()
"default setting for a language"
(display-line-numbers-mode)
(eglot-ensure)
(company-mode))
Built-in Modes
hook default settings to configured language modes
(let ((langs '("sh" "c++" "mhtml" "java" "js" "json" "python" "latex" "typescript-ts" "tsx-ts")))
(dolist (lang langs)
(add-hook (intern (concat lang "-mode-hook")) (lambda () (lang-default-settings)))))
add LSP server program names to eglot's configuration
(let ((server-programs '((c++-mode . ("clangd" "--stdio"))
(mhtml-mode . ("html-language-server" "--stdio"))
(java-mode . ("jdtls" "--stdio"))
(js-mode . ("typescript-language-server" "--stdio"))
(python-mode . ("pyright-langserver" "--stdio"))
(latex-mode . ("texlab"))
(json-mode . ("vscode-json-languageserver" "--stdio")))))
(setq eglot-server-programs (append server-programs eglot-server-programs)))
Installed Modes
Go
(use-package go-mode
:mode "\\.go\\'"
:hook
(go-mode . (lambda () (lang-default-settings)))
:config
(setq go-tab-width default-custom-tab-size))
TypeScript
No longer using typescript-mode, as there's a builtin typescript-ts mode in Emacs 29
(if (version< emacs-version "29")
(use-package typescript-ts
:mode (("\\.ts\\'" . typescript-ts-mode)
("\\.tsx\\'" . tsx-ts-mode))
:hook (lang-default-settings
(tsx-ts-mode . lang-default-settings))
:config
(let ((server-programs '(("typescript-ts-mode" . ("typescript-language-server" "--stdio"))
("tsx-ts-mode" . ("typescript-language-server""--stdio")))))
(setq eglot-server-programs (append server-programs eglot-server-programs))))
(use-package typescript-mode
:mode ("\\.ts\\'" ("\\.tsx" . typescript-tsx-mode))
:config
(define-derived-mode typescript-tsx-mode typescript-mode "TypeScriptReact")
(dolist (mode '(typescript-mode typescript-tsx-mode))
(add-to-list 'eglot-server-programs `(,mode . ("typescript-language-server", "--stdio"))))
:hook
(typescript-mode . (lambda () (lang-default-settings)
(let ((custom-tab-size 2))
(setq-default default-tab-width custom-tab-sizen
tab-width custom-tab-size
c-basic-offset custom-tab-size))))
(typescript-tsx-mode . (lambda ()
(lang-default-settings)
(let ((custom-tab-size 4))
(setq-default default-tab-width custom-tab-size
tab-width custom-tab-size
c-basic-offset custom-tab-size))))))
Markdown
(use-package markdown-mode
:commands (markdown-mode gfm-mode)
:mode (("\\.md\\'". markdown-mode)
("\\.markdown\\'" . markdown-mode))
:init
(setq markdown-command "multimarkdown"))
JSON
(use-package json-mode
:mode (("\\.json\\'" . json-mode)
("\\.jsonl\\'" . json-mode)))
Python
Pyenv
python venv manager
(use-package pyvenv
:commands (pyvenv-mode pyvenv-activate pyvenv-workon pyvenv-exec-shell pyvenv-virtual-env)
:hook (python-mode . pyvenv-mode)
:config
(setenv "WORKON_HOME" (expand-file-name ".local/opt/miniforge3/envs" (safe-getenv "HOME" user-home-path))))
Tab Size
Python code is recomendded to set the tab size to 4
(add-hook 'python-mode-hook
(lambda ()
(let ((custom-tab-size 4))
(setq-default default-tab-width custom-tab-size
tab-width custom-tab-size
c-basic-offset custom-tab-size))))