144 lines
5.1 KiB
Org Mode
144 lines
5.1 KiB
Org Mode
#+TITLE: Languages
|
|
|
|
* Intro
|
|
This is where Programming Language modes are configured.
|
|
|
|
* Default Settings
|
|
|
|
#+begin_src emacs-lisp
|
|
(defun lang-default-settings ()
|
|
"default setting for a language"
|
|
(display-line-numbers-mode)
|
|
(treesit-auto-mode)
|
|
(eglot-ensure))
|
|
#+end_src
|
|
|
|
* Built-in Modes
|
|
** hook default settings to configured language modes
|
|
#+begin_src emacs-lisp
|
|
(let ((langs '("sh" "c++" "go-ts" "java" "js" "json" "LaTeX" "mhtml" "python" "typescript-ts" "tsx-ts" "python-ts")))
|
|
(dolist (lang langs)
|
|
(add-hook (intern (concat lang "-mode-hook")) 'lang-default-settings)))
|
|
#+end_src
|
|
|
|
** add LSP server program names to eglot's configuration
|
|
#+begin_src emacs-lisp
|
|
(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)))
|
|
#+end_src
|
|
|
|
* Installed Modes
|
|
** Go
|
|
unused, as tree-sitter has covered most needed functionality
|
|
#+begin_src emacs-lisp
|
|
;; (use-package go-mode
|
|
;; :mode "\\.go\\'"
|
|
;; :hook (go-mode . lang-default-settings)
|
|
;; :config
|
|
;; (setq go-tab-width default-custom-tab-size))
|
|
#+end_src
|
|
|
|
** TypeScript
|
|
No longer using typescript-mode, as there's a builtin typescript-ts mode in Emacs 29
|
|
#+begin_src emacs-lisp
|
|
(if (version< emacs-version "29")
|
|
(use-package typescript-mode
|
|
:mode ("\\.ts\\'" ("\\.tsx\\'" . typescript-tsx-mode))
|
|
:config
|
|
(define-derived-mode typescript-tsx-mode typescript-mode "TypeScriptReact")
|
|
(dolist (mode '(ykpescript-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-size
|
|
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))))))
|
|
#+end_src
|
|
|
|
** Markdown
|
|
#+begin_src emacs-lisp
|
|
(use-package markdown-mode
|
|
:commands (markdown-mode gfm-mode)
|
|
:mode ("\\.md\\'" "\\.markdown\\'")
|
|
:custom ((markdown-command "multimarkdown" "set the markdown command")))
|
|
#+end_src
|
|
|
|
** JSON
|
|
#+begin_src emacs-lisp
|
|
(use-package json-mode
|
|
:mode (("\\.json\\'" . json-mode)
|
|
("\\.jsonl\\'" . json-mode)))
|
|
#+end_src
|
|
|
|
** LaTeX (AUCTeX)
|
|
#+begin_src emacs-lisp
|
|
(use-package tex
|
|
:ensure auctex
|
|
:custom
|
|
(TeX-view-program-selection '((output-pdf "PDF Tools")) "set emacs as pdf viewer")
|
|
(TeX-source-correlate-start-server t "recommended setting")
|
|
(TeX-engine 'xetex "set engine to xelatex")
|
|
(TeX-PDF-mode t "use pdf mode")
|
|
(TeX-auto-save t "recommended setting")
|
|
(TeX-parse-self t "packages support")
|
|
:config
|
|
(add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer))
|
|
#+end_src
|
|
|
|
** Python
|
|
*** Pyenv
|
|
python venv manager
|
|
#+begin_src emacs-lisp
|
|
(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))))
|
|
#+end_src
|
|
|
|
*** Jupyter
|
|
#+begin_src emacs-lisp
|
|
(use-package ein
|
|
:commands (ein:run ein:notebook-open ein:login)
|
|
:bind ("C-c C-o" . ein:notebook-open)
|
|
:config
|
|
(add-to-list 'org-babel-load-languages '(ein . t)))
|
|
;; :custom
|
|
;; (ein:jupyter-server-use-subcommand "server" "use jupyterlab instead of jupyter notebook")
|
|
#+end_src
|
|
|
|
*** Tab Size
|
|
Python code is recomendded to set the tab size to 4
|
|
|
|
#+begin_src emacs-lisp
|
|
(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))))
|
|
#+end_src
|
|
|
|
* CSV-mode
|
|
#+begin_src emacs-lisp
|
|
(use-package csv-mode
|
|
:pin "gnu"
|
|
:commands (csv-mode csv-align-mode csv-field-index-mode)
|
|
:mode (("\\.csv\\'" . csv-align-mode) ("\\.tsv\\'" . csv-align-mode))
|
|
:custom (csv-invisibility-default nil "show separators when records are aligned"))
|
|
#+end_src
|
|
|