#+TITLE: EMACS konfiguracija * Splošno Tukaj se nahaja celotna konfiguracija za emacs urejevalnik, ki jo uporabljam, v ORGMODE obliki. Na ta - "literate programming" oz. pismeni način - podana konfiguracija daje v ospredje opis posameznih sekcij in s tem poveča preglednost, olajša pa tudi navigacijo po konfiguraciji. Razdeljena je na poglavja ohlapno glede na vlogo oz področje. Področja so nekoliko raznosvrstna (evil način - tipkovnične bližnjice v slogu VIM so ena sekcija, programiranje druga...), bi pa moralo biti iz naslovov precej jasno, za kaj gre. * Sekcije ** Zagon ~debug-on-error~ uresničimo, če bi radi sprožili razhroščevalnik, kadar pride do napake (zelo priročno pri reševanju težav). #+begin_src emacs-lisp (setq debug-on-error t) #+end_src Pospešimo zagon z zmanjšanjem frekvence zbiranja smeti (garbage collection). #+begin_src emacs-lisp (setq gc-cons-threshold (* 50 1024 1024)) #+end_src ** Paketi Vklopi prikazovanje statistik naloženih paketov (prikažemo jih z ~M-x use-package-report~). #+begin_src emacs-lisp (setq use-package-compute-statistics t) #+end_src Nastavimo vire nalaganja paketov in pa vklopimo privzeto nalaganje ~use-package~ paketov iz spletnih zbirališč. #+begin_src emacs-lisp (require 'package) (setq use-package-always-ensure t) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (add-to-list 'package-archives '("org" . "https://orgmode.org/elpa/") t) (add-to-list 'package-archives '("elpa" . "https://elpa.gnu.org/packages/") t) (package-initialize) #+end_src Vklop merjenja časa nalaganja posameznih paketov. Rezultate merjenja lahko pogledamo z ~M-x benchmark-init/show-durations-tabulated~ ali ~M-x benchmark-init/show-durations-tree~ #+begin_src emacs-lisp (use-package benchmark-init :config ;; To disable collection of benchmark data after init is done. (add-hook 'after-init-hook 'benchmark-init/deactivate)) #+end_src ** EVIL Ta sekcija vsebuje razne konfiguracije povezane z ~evil-mode~ - modalnim načino editiranja, podobnim vi/vim urejevalnikom. Vklopi evil mode! #+begin_src emacs-lisp (setq evil-want-integration t evil-want-keybinding nil) ;org-return-follows-link t (require 'evil) (evil-mode 1) #+end_src Paket ~evil-collection~ pa vsebuje še dodatne evil bližnjice (recimo za ~help-mode~, ~eshell~ in tako dalje). #+begin_src emacs-lisp (use-package evil-collection :after evil :config (evil-collection-init)) #+end_src ** Vezane tipke S paketom ~general~ je definiranih več kategorij tipkovničnih bližnjic, ki so združene po svoji funkciji, podobno kot poglavja tega dokumenta. Če v ukaznem načinu kliknemo ~SPC~ (ali pa v tekstovnem načinu ~C-SPC~), se nam prikažejo tipke kategorij, po kliku na posamezno pa ukazi, ki jih sprožimo (ali pa podkategorije). V sledečim podpoglavjih so navedene kategorije posameznih bližnjic. #+begin_src emacs-lisp (setq kategorije-bliznjic '()) (use-package general :defer t :config (general-evil-setup) ;; Leader key nastavitev (za prozenje ukazov) (general-create-definer start/leader-keys :states '(normal insert visual emacs) :keymaps 'override :prefix "SPC" :global-prefix "C-SPC") #+end_src *** Splošne bližnice Tukaj se nahajate samo bližnjici za preklop med bufferji (kako bi to lepo prevedli?). #+begin_src emacs-lisp (start/leader-keys ;; Osnovne bliznjice "[" 'previous-buffer "]" 'next-buffer) #+end_src *** Upravljanje z okni Navigacijo med okni izvajamo s klasičnimi HJKL UNIX smernimi tipkami, recimo okno pod trenutnim izberemo s ~SPC w j~. Posamezno okno pa lahko razdvojimo vertikalno ali horizontalno s ~SPC w v~ oz. ~SPC w s~. ~SPC w d~ "ubije" trenutni buffer in okno. #+begin_src emacs-lisp (start/leader-keys "w" '(:ignore t :wk "window") "w j" 'windmove-down "w k" 'windmove-up "w h" 'windmove-left "w l" 'windmove-right "w s" 'split-window-below "w v" 'split-window-right "w d" 'kill-buffer-and-window) #+end_src *** Upravljanje z bufferji TODO napiši navodila #+begin_src emacs-lisp (defun nalozi-konfiguracijo () (interactive) (find-file "~/.emacs.d/config.org")) (start/leader-keys "b" '(:ignore t :wk "buffer") "b b" 'switch-to-buffer "b p" 'previous-buffer "b n" 'next-buffer "b e" 'eval-buffer "b s" (defun scratch-buffer () "Show scratch buffer" (interactive) (switch-to-buffer "*scratch*")) "b c" 'load-config "b d" 'kill-current-buffer "b k" 'kill-buffer) #+end_src *** Evalviranje TODO napiši navodila #+begin_src emacs-lisp (add-to-list 'kategorije-bliznjic (lambda () (start/leader-keys ;; EVAL ukazi "e" '(:ignore t :wk "eval") "e b" 'eval-buffer "e e" 'eval-expression "e r" 'eval-region))) #+end_src *** Datoteke TODO napiši navodila #+begin_src emacs-lisp (add-to-list 'kategorije-bliznjic (lambda () (start/leader-keys "f" '(:ignore t :wk "file") "f f" 'counsel-find-file "f c" 'load-config))) #+end_src *** Vplogled / introspekcija Emacs nudi kup uporabnih funkcij, ki so nepogrešljive na poti učenja o funkcionalnosti. Zaenkrat sem definiral bližnjice do štirih od njih; opis funkcije, tipke, simbola (to so recimo rezervirana imena spremenljivk), načina (~mode~). #+begin_src emacs-lisp (add-to-list 'kategorije-bliznjic (lambda () (start/leader-keys "d" '(:ignore :t :wk "describe") "d f" 'describe-function "d k" 'describe-key "d s" 'describe-symbol "d m" 'describe-mode))) #+end_src *** Konec Dodamo manjkajoči zaklepaj. :) To pa je malo grdo pri pismenem programiranju. #+begin_src emacs-lisp ) #+end_src ** Zaključek