emacskurs/idemyldring.org

9.0 KiB
Raw Permalink Blame History

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.

;;; 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

Grunnleggende

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.

;; Emacs ber deg iblant svare "yes" eller "no".  Dette gjør at Emacs
;; nøyer seg med "y" eller "n".
(setq use-short-answers t)

;; Dette fjerner velkomstskjermen ved oppstart av Emacs.
(setq inhibit-splash-screen t)

Vi bør kanskje gi en kort forklaring av hva custom gjør: Holder på enkelte verdier mellom sessions. Vi

(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
(load custom-file t t)

Oppsett for pakker

;;;; Installering av tredjepartspakker

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 …

(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(unless package-archive-contents
  (package-refresh-contents))
(package-initialize)

use-package

Konfig-generatoren har denne tingen med, og en liten forklaring som dette er betraktelig vennligere for en nybegynner enn dokumentasjonen

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

Oppsett for egen elisp

Hvis de skriver egen LISP, bør vi kanskje ha med dette så kompilering ikke forvirrer resultatet …

(setq load-prefer-newer t)

Tema

;;;; Tema og farger

Det er nok en god idé å installere begge tema så det er raskere å bytte mellom.

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

GUI-elementer

;;;; GUI-elementer

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 …

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

Filer og buffere

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.

;; For at Emacs skal huske hvor peker var da du sist lukket en fil.
(save-place-mode)

Uten consult-buffer, må kommandoen recentf brukes, og den er ikke bundet til noe.

(recentf-mode)
(setq recentf-max-saved-items 199
      recentf-auto-cleanup 300)

ffap (find-file-at-point) gjør at find-file med peker på et filnavn bruker det filnavnet som default.

;; Med dette vil Emacs hvis peker er på et filnavn når du bruker
;; `find-file-at-point', foreslå å åpne den filen.
(ffap-bindings)

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.

(keymap-set ctl-x-x-map "R" #'rename-visited-file)

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.

(setq uniquify-buffer-name-style 'post-forward
      uniquify-strip-common-suffix t
      uniquify-separator " |"
      uniquify-after-kill-buffer-p t
      uniquify-ignore-buffers-re "^\\*")

Auto-revert og lock-files

Hvordan vi håndterer auto-revert avhenger vel litt av hvordan vi presenterer "lockfiles". "Lockfiles" er noe som forvirrer

(global-auto-revert-mode)
(setq global-auto-revert-non-file-buffers t
      create-lockfiles nil)

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 …

backup-directory-alist `(("." . ,(locate-user-emacs-file "backups")))

Hjelp og dokumentasjon

Jeg tenker det er viktig at vi får frem Emacs' selvdokumenterende natur.

which-key og tastetrykk

which-key er innebygd fra og med 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.

(setq which-key-show-early-on-C-h t
      which-key-idle-delay 600)
(setq echo-keystrokes 0.1)
(setq echo-keystrokes-help nil)

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

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.

(setq display-line-numbers-type t)
;; (setq display-line-numbers-type 'relative)
(add-hook 'prog-mode-hook #'display-line-numbers-mode)

LISP

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.

;; Automatically insert closing parens
(electric-pair-mode)

;; Visualize matching parens
(show-paren-mode 1)
;; (setq show-paren-delay 0
;;       show-paren-style 'parenthesis)