2024-09-12 06:14:03 +00:00
#+PROPERTY : header-args:emacs-lisp :noweb yes
Jeg har brukt Org for å kunne beskrive tanker og idéer +uten+ kludrete
+kommentarer+ .
* Tanker og noter
+ For å la det føles naturlig å gå inn og legge til eller endre, er nok
naturlige inndelinger viktig.
+ Skal vi utforme =early-init.el= òg?
+ Skal vi anbefale dem å kompilere =init.el= ?
* Skal vi i så fall nevne =sharpquote= (=#'= )?
+ Bør vi anbefale =consult= ?
* ~consult-theme~ gjør det enkelt å raskt bytte mellom tema. Det kan gi et
godt førsteinntrykk ...
* ~consult-buffer~ , ~consult-line~ , ~consult-imenu~ ...
+ ~vertico~ og ~marginalia~ (?) må finne sin plass.
+ Samspillet mellom deamon, auto-revert og lockfiles
* lockfiles blir nok et forvirringsmoment (de var det for meg)
+ Bør vi se etter en subtil måte å sette indenteringspreferanser på?
* Tab som default
* Mellomrom i LISP
* Filen selv
Jeg har forsøkt å bruke inndelinger og kalle ~package-install~ eller
~use-pacakge~ ved hver inndeling i stedet for å hope dem opp på ett sted, så får
de mer innsikt i hvordan ting henger sammen, og det blir lettere å finne ting.
#+begin_src emacs-lisp :tangle init-forslag.el
;;; init-forslag.el -- Forslag til init.el -*- lexical-binding: t -* -
;; Noen info om filens opphav.
;; - Hvem som skrev + epost?
;; - Lenke til repoet så de kan finne det igjen.
;;; Commentary:
;; Sammenfatting av hva vi har tatt med, og kort om hva vi har
;; vektlagt. Vi kan nevne her at vi legger vekt på IN2040.
;;; Code:
;;; Grunnleggende oppsett
<<grunnleggende >>
;;; Filer og buffere
<<filer-og-buffere >>
;;; Hjelp og dokumentasjon
<<docs >>
;;; LISP
<<lisp >>
;;; Annen programmering
<<prog-mode >>
;;; init-forslag.el ends here
#+end_src
* Grunnleggende
:PROPERTIES:
:header-args:emacs-lisp: :noweb-ref grunnleggende
:END:
Her har jeg lagt inn ting som gjelder Emacs fremfor programmering. Overskriften
bør kasnkje byttes, for det er ikke usannsynlig at det er her =consult= kan høre
hjemme.
#+begin_src emacs-lisp
;; Emacs ber deg iblant svare "yes" eller "no". Dette gjør at Emacs
;; nøyer seg med "y" eller "n".
(fset 'yes-or-no-p 'y-or-n-p)
;; Dette fjerner velkomstskjermen ved oppstart av Emacs.
(setq inhibit-splash-screen t)
#+end_src
Vi bør kanskje gi en kort forklaring av hva custom gjør: Holder på enkelte
verdier mellom sessions. Vi
#+begin_src emacs-lisp
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
#+end_src
** Oppsett for pakker
#+begin_src emacs-lisp
;;;; Installering av tredjepartspakker
#+end_src
Jeg har aldri brukt =package.el= eller ~use-package~ (har alltid håndtert ting
manuelt og byttet nylig til =straight.el= )
~package-initialize~ er autoloaded, så vi trenger ikke ~(require 'package)~ .
Det kan ha pedagogisk hensikt å inkludere, da, for autoload er et konsept som
ikke alltid føles naturlig ...
#+begin_src emacs-lisp
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/ "))
(unless package-archive-contents
(package-refresh-contents))
(package-initialize)
#+end_src
*** ~use-package~
Konfig-generatoren har denne tingen med, og en liten forklaring som dette er
betraktelig vennligere for en nybegynner enn [[help:use-package ][dokumentasjonen ]] ...
#+begin_src emacs-lisp
;; (use-package my-package-name
;; :ensure t ; Ensure my-package is installed
;; :after foo ; Load my-package after foo is loaded (seldom used)
;; :init ; Run this code before my-package is loaded
;; :bind ; Bind these keys to these functions
;; :custom ; Set these variables
;; :config ; Run this code after my-package is loaded
#+end_src
** Oppsett for egen elisp
Hvis de skriver egen LISP, bør vi kanskje ha med dette så kompilering ikke
forvirrer resultatet ...
#+begin_src emacs-lisp
(setq load-prefer-newer t)
#+end_src
** Tema
#+begin_src emacs-lisp
;;;; Tema og farger
#+end_src
Det er nok en god idé å installere begge tema så det er raskere å bytte mellom.
#+begin_src emacs-lisp
;; Vi har foreslått et mørkt og et lyst tema:
(package-install 'monokai-theme)
(package-install 'leuven-theme)
;; Avkommenter for å bruke foreslått mørkt tema:
;; (load-theme 'monokai t)
;; Avkommenter for å bruke foreslått lyst tema:
;; (load-theme 'leuven t)
#+end_src
** GUI-elementer
#+begin_src emacs-lisp
;;;; GUI-elementer
#+end_src
Jeg er enig i at scroll-, tool- og menu-bar bør skrus av. Jeg er veldig enig i
at ~blink-cursor-mode~ bør være av for menneskets velbehag, men har merket av
folk har sterkere meninger der. Jeg tenker at vi foreslår det ...
#+begin_src emacs-lisp
;; Skru av blinkende peker.
(blink-cursor-mode 0)
;; Disse skrur av diverse GUI-elementer.
(menu-bar-mode 0)
(tool-bar-mode 0)
(scroll-bar-mode 0)
#+end_src
* Filer og buffere
:PROPERTIES:
:header-args:emacs-lisp: :noweb-ref filer-og-buffere
:END:
Her må vi vurdere hvor mye vi vil ha med. Jeg har lagt til ~recentf-mode~ , men
vi kan vurdere ~consult-buffer~ , ~ibuffer~ og =project.el= .
#+begin_src emacs-lisp
;; For at Emacs skal huske hvor peker var da du sist lukket en fil.
(save-place-mode)
#+end_src
Uten ~consult-buffer~ , må kommandoen ~recentf~ brukes, og den er ikke bundet til noe.
#+begin_src emacs-lisp
(recentf-mode)
(setq recentf-max-saved-items 199
recentf-auto-cleanup 300)
#+end_src
~ffap~ (/find-file-at-point/ ) gjør at ~find-file~ med peker på et filnavn bruker
det filnavnet som default.
#+begin_src emacs-lisp
;; Med dette vil Emacs hvis peker er på et filnavn når du bruker
;; `find-file-at-point', foreslå å åpne den filen.
(ffap-bindings)
#+end_src
** Navn på filer og buffere
Er det en god idé å gi dem en tast til å gi en fil de besøker nytt navn? Jeg
husker at jeg lette en del etter noe slikt da jeg begynte.
#+begin_src emacs-lisp
(keymap-set ctl-x-x-map "R" #'rename-visited-file)
#+end_src
Uniquify gjør det lettere å se forskjell på buffere med samme navn. Jeg har
tatt med instillingene fra min egen config. De gir formatet
=buffernavn |kontekst= .
#+begin_src emacs-lisp
(setq uniquify-buffer-name-style 'post-forward
uniquify-strip-common-suffix t
uniquify-separator " |"
uniquify-after-kill-buffer-p t
uniquify-ignore-buffers-re "^\\*")
#+end_src
** Auto-revert og lock-files
Hvordan vi håndterer auto-revert avhenger vel litt av hvordan vi presenterer
"lockfiles". "Lockfiles" er noe som forvirrer
#+begin_src emacs-lisp
(global-auto-revert-mode)
(setq global-auto-revert-non-file-buffers t
create-lockfiles nil)
#+end_src
** Backups
Jeg tenker at vi ikke snakker for mye om backups, men kanskje legger inn denne
linjen, for backups legges per default inn i samme mappen som filen, og det kan
være like plagsomt som det føles rotete ...
#+begin_src emacs-lisp
backup-directory-alist `(("." . ,(locate-user-emacs-file "backups")))
#+end_src
* Hjelp og dokumentasjon
:PROPERTIES:
:header-args:emacs-lisp: :noweb-ref docs
:END:
Jeg tenker det er viktig at vi får frem Emacs' /selvdokumenterende natur/ .
** which-key og tastetrykk
~which-key~ er innebygd fra og med [[file:~/src/share/emacs/31.0.50/etc/NEWS.30::New package 'which-key'. ][Emacs 30 ]]. Hvis vi skal ha det med, foreslår
jeg denne kombinajonen av innstillinger for ~which-key~ og ~echo-keystrokes~ for
å gi et responsivt, men ikke bråkete inntrykk, og med ~which-key~ alltid lett
tilgjengelig for oversikt.
#+begin_src emacs-lisp
(setq which-key-show-early-on-C-h t
which-key-idle-delay 600)
(setq echo-keystrokes 0.1)
(setq echo-keystrokes-help nil)
#+end_src
** Helpful
Jeg tror det kan være en god idé å bruke ~helpful~ , for informasjonen det gir,
tydeliggjør at Emacs er satt sammen av funksjoner og variable vi kan fly rundt
og skrive om. Når jeg selv hacker på Emacs, er nesten all kildekodeinteraksjon
gjennom helpful ...
Helpful har dessuten en liste av keymaps hver kommando er bundet til. Generelt
gjør helpful Emacs veldig transparent. :D
Jeg tenker at det er en god idé å binde disse til taster:
+ ~helpful-callable~
+ ~help-variable~
+ ~helpful-symbol~
+ ~helpful-key~
+ ~helpful-at-point~
~helpful-at-point~ har jeg selv stor glede av ...
* LISP
:PROPERTIES:
:header-args:emacs-lisp: :noweb-ref lisp
:END:
Vi bør nok separere Scheme og elisp, men dette gjelder for begge. Paredit kan
være noe stort for en introduksjon, men ~electric-pair-mode~ lar oss det minste
sette inn balanserte par.
#+begin_src emacs-lisp
;; Automatically insert closing parens
(electric-pair-mode)
;; Visualize matching parens
(show-paren-mode 1)
;; (setq show-paren-delay 0
;; show-paren-style 'parenthesis)
#+end_src
* Generelt for prog-mode
:PROPERTIES:
:header-args:emacs-lisp: :noweb-ref prog-mode
:END:
Bør få med:
+ ~corfu~
2024-09-12 06:32:12 +00:00
* ~kind-icon~ (virker det på non-u*ix?)
2024-09-12 06:14:03 +00:00
+ ~eglot~
Det er sikkert noen som vil ha linjenummer i margen. Folk som kommer fra =vim= ,
har jeg inntrykk av at pleier å ville ha relative tall på talllinjen.
#+begin_src emacs-lisp
(setq display-line-numbers-type t)
;; (setq display-line-numbers-type 'relative)
(add-hook 'prog-mode-hook #'display-line-numbers-mode)
#+end_src