352 lines
9.0 KiB
Org Mode
352 lines
9.0 KiB
Org Mode
#+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>>
|
||
|
||
|
||
;;; Annen programmering
|
||
|
||
<<prog-mode>>
|
||
|
||
|
||
;;; LISP
|
||
|
||
<<lisp>>
|
||
|
||
;;; 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))
|
||
(load custom-file t t)
|
||
|
||
#+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 ...
|
||
|
||
* Generelt for prog-mode
|
||
:PROPERTIES:
|
||
:header-args:emacs-lisp: :noweb-ref prog-mode
|
||
:END:
|
||
|
||
Bør få med:
|
||
+ ~corfu~
|
||
* ~kind-icon~ (virker det på non-u*ix?)
|
||
+ ~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
|
||
|
||
* 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
|
||
|