dotemacs

Stars
40

#+title: README for Dotemacs #+AUTHOR: Jeremy Friesen #+EMAIL: [email protected] #+STARTUP: showall #+OPTIONS: toc:3

This is my Emacs configuration repository. It pairs with my [[https://github.com/jeremyf/dotzshrc/][dotzshrc repository]]. The [[https://github.com/jeremyf/dotzshrc/blob/main/install.rb][install.rb]] script of the dotzshrc repository uses this repository. For implementation reasons, the =emacs.d= directory contains the init files that I link into my =$HOME/.emacs.d= directory.

For those curious, I wrote [[https://takeonrules.com/2020/10/18/why-i-chose-emacs-as-my-new-text-editor/][Why I Chose Emacs as My New Text Editor // Take on Rules]].

  • The Structure
    :PROPERTIES:
    :ID: 45A067AA-0193-4D6E-A77F-8E02B088DCBC
    :END:

Below is the top-level directory:

#+BEGIN_EXAMPLE

tree -L 1 . ├── README.org ├── emacs.d ├── lib ├── random-tables └── templates

3 directories, 2 files #+END_EXAMPLE

The files and directories:

  • README.org :: This file.
  • emacs.d :: A directory that contains files symlinked into =$HOME/.emacs.d= directory.
  • lib :: Some scripts I’ve written to help with my Emacs configuration.
  • random-tables :: Fodder for gaming, really not very well developed.
  • templates :: Templates for the [[https://github.com/minad/tempel][Emacs tempel package]].
  • The emacs.d Directory
    :PROPERTIES:
    :ID: F12B8506-CA7F-4BC7-92DA-077C96AD2B80
    :END:

There are two “primary” files to consider in =./emacs.d=:

  • [[file:emacs.d/init.el][init.el]] :: The file evaluated when Emacs launches.
  • early-init.el :: The file evaluated early on when Emacs launches.

** Digging Further into emacs.d :PROPERTIES: :ID: 9E740E8A-2098-41A5-B20F-72E1321AA97E :END:

The =init.el= file requires the various files in my =emacs.d= directory. As of <2022-11-19 Sat> I shifted from Literate configuration to a Emacs Lisp configuration. I appreciate being able to jump to the definition and edit directly; something that wasn’t immediately obvious with Literate configuration.

Organizing concepts is an interesting challenge, as packages interact in a multi-dimensional manner. Each of my =jf-.el= has a rudimentary commentary.

  • [[file:emacs.d/abbrev_defs][abbrev_defs]] :: Common typos auto-corrected
  • [[file:emacs.d/early-init.el][early-init.el]] :: The preamble for starting Emacs
  • [[file:emacs.d/hide-comnt.el][hide-comnt.el]] :: A silly little mode to hide comments
  • [[file:emacs.d/init.el][init.el]] :: Most everything of or related to my Emacs configuration.
  • [[file:emacs.d/dig-my-grave.el][dig-my-grave.el] :: An org-mode package that extends the triple back tick by providing a prompt for block context.
  • [[file:emacs.d/org-charsheet.el][org-charsheet.el]] :: A work-in-progress package for managing Org Headline metadata (with a focus on table top role-playing games).

** Keybinding Prefixes :PROPERTIES: :ID: EADA236A-4612-42D2-B5A7-7F73408C2AB8 :END:

On <2023-10-20 Fri> I began refactoring some keybindings. There were functions that got “prime” key chords but were not things I’d frequently use. As such, I’m taking a two-fold approach:

  1. Create and document keybinding prefixes
  2. Rely on the =which-key= package to provide bits of guidance.

Those keybinding prefixes are as follows:

  1. =C-c y= :: Yank something; as insert some text.
  2. =C-c w= :: Wrap something; as in wrap the /current region/ by inserting text before and after the region.
  3. =C-c f= :: Find something; search the file or project for something.
  4. =C-c j= :: Jump to something; I have =C-j= bound =avy-goto-char-timer= as a quick in buffer jumper. And =C-c C-j= as =jf/project/jump-to-task=; which provides another context

There are foundational keys that are deeply bound to muscle memory:

  • =C-s= :: For =consult-line=; a mini-buffer search and go to line within file. Akin to a feature I used in TextMate, Sublime, and Atom.
  • =s-t= :: For =consult-projectile=; a very potent navigation through buffers, files, and projects.