dotfiles/.emacs.d/config.org

5.7 KiB

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).

  (setq debug-on-error t)

Pospešimo zagon z zmanjšanjem frekvence zbiranja smeti (garbage collection).

  (setq gc-cons-threshold (* 50 1024 1024))

Paketi

Vklopi prikazovanje statistik naloženih paketov (prikažemo jih z M-x use-package-report).

  (setq use-package-compute-statistics t)

Nastavimo vire nalaganja paketov in pa vklopimo privzeto nalaganje use-package paketov iz spletnih zbirališč.

  (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)

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

  (use-package benchmark-init
    :config
    ;; To disable collection of benchmark data after init is done.
    (add-hook 'after-init-hook 'benchmark-init/deactivate))

EVIL

Ta sekcija vsebuje razne konfiguracije povezane z evil-mode - modalnim načino editiranja, podobnim vi/vim urejevalnikom.

Vklopi evil mode!

  (setq evil-want-integration t
        evil-want-keybinding nil)
        ;org-return-follows-link t
  (require 'evil)
  (evil-mode 1)

Paket evil-collection pa vsebuje še dodatne evil bližnjice (recimo za help-mode, eshell in tako dalje).

  (use-package evil-collection
    :after evil
    :config
    (evil-collection-init))

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.

  (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")

Splošne bližnice

Tukaj se nahajate samo bližnjici za preklop med bufferji (kako bi to lepo prevedli?).

  (start/leader-keys
    ;; Osnovne bliznjice
    "[" 'previous-buffer
    "]" 'next-buffer)

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.

  (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)

Upravljanje z bufferji

TODO napiši navodila

  (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)

Evalviranje

TODO napiši navodila

  (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)))

Datoteke

TODO napiši navodila

  (add-to-list 'kategorije-bliznjic (lambda ()
    (start/leader-keys
     "f" '(:ignore t :wk "file")
     "f f" 'counsel-find-file
     "f c" 'load-config)))

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).

  (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)))

Konec

Dodamo manjkajoči zaklepaj. :) To pa je malo grdo pri pismenem programiranju.

  )

Zaključek