From 6e915e5665294a256a74d36a597cb7f22e19eabf Mon Sep 17 00:00:00 2001 From: Howard Abrams Date: Thu, 21 Dec 2023 21:22:16 -0800 Subject: [PATCH] Moved the Git and other Apps from Config Seems to make this more readable. --- README.org | 2 +- bootstrap.org | 1 + ha-applications.org | 658 +++++++++++++++++++++++++++++++++ ha-config.org | 613 +----------------------------- screenshots/projects-hydra.png | Bin 0 -> 82384 bytes support/hamacs-logo.png | Bin 0 -> 9633 bytes 6 files changed, 665 insertions(+), 609 deletions(-) create mode 100644 ha-applications.org create mode 100644 screenshots/projects-hydra.png create mode 100644 support/hamacs-logo.png diff --git a/README.org b/README.org index 1dfd4dd..9ca18fd 100644 --- a/README.org +++ b/README.org @@ -14,7 +14,7 @@ I’ve separated my configuration into /chapters/ around particular subjects, ap Hit me up with questions on Mastodon: [[https://emacs.ch/@howard][@howard@emacs.ch]]. -If you want to try the entire process, after installing Emacs, clone this repo with: +If you want to try the entire process, after installing Emacs (see my instructions for [[file:README-MacOS.org][both MacOS]] and [[file:README-Linux.org][Linux]]), clone this repo with: #+begin_src sh git clone https://github.com/howardabrams/hamacs #+end_src diff --git a/bootstrap.org b/bootstrap.org index ee077a9..c677239 100644 --- a/bootstrap.org +++ b/bootstrap.org @@ -196,6 +196,7 @@ The following loads the rest of my org-mode literate files. I add new filesas t (defvar ha-hamacs-files (flatten-list `("ha-private.org" "ha-config.org" + "ha-applications.org" ,(when (display-graphic-p) "ha-display.org") "ha-org.org" diff --git a/ha-applications.org b/ha-applications.org new file mode 100644 index 0000000..0993550 --- /dev/null +++ b/ha-applications.org @@ -0,0 +1,658 @@ +#+title: Applications +#+author: Howard X. Abrams +#+date: 2023-12-21 +#+tags: emacs + +A literate programming file configuring critical applications. + +#+begin_src emacs-lisp :exports none + ;;; ha-applications.el --- configuring critical applications. -*- lexical-binding: t; -*- + ;; + ;; © 2023 Howard X. Abrams + ;; Licensed under a Creative Commons Attribution 4.0 International License. + ;; See http://creativecommons.org/licenses/by/4.0/ + ;; + ;; Author: Howard X. Abrams + ;; Maintainer: Howard X. Abrams + ;; Created: December 21, 2023 + ;; + ;; While obvious, GNU Emacs does not include this file + ;; + ;; *NB:* Do not edit this file. Instead, edit the original literate file at: + ;; /Users/howard/other/hamacs/ha-applications.org + ;; And tangle the file to recreate this one. + ;; + ;;; Code: + #+end_src + +Can we call the following /applications/? I guess. +* Git and Magit +Can not live without [[https://magit.vc/][Magit]], a Git porcelain for Emacs. I stole the bulk of this work from Doom Emacs. +#+begin_src emacs-lisp + (use-package magit + ;; See https://github.com/magit/magit/wiki/Emacsclient for why we need to set: + :custom (with-editor-emacsclient-executable "emacsclient") + + :config + ;; The following code re-instates my General Leader key in Magit. + (general-unbind magit-mode-map "SPC") + + (ha-leader + "g" '(:ignore t :which-key "git") + "g /" '("Magit dispatch" . magit-dispatch) + "g ." '("Magit file dispatch" . magit-file-dispatch) + "g b" '("Magit switch branch" . magit-branch-checkout) + "g u" '("Git Update" . vc-update) + + "g g" '("Magit status" . magit-status) + "g s" '("Magit status here" . magit-status-here) + "g D" '("Magit file delete" . magit-file-delete) + "g B" '("Magit blame" . magit-blame-addition) + "g C" '("Magit clone" . magit-clone) + "g F" '("Magit fetch" . magit-fetch) + "g L" '("Magit buffer log" . magit-log-buffer-file) + "g R" '("Revert file" . magit-file-checkout) + "g S" '("Git stage file" . magit-stage-file) + "g U" '("Git unstage file" . magit-unstage-file) + + "g f" '(:ignore t :which-key "find") + "g f f" '("Find file" . magit-find-file) + "g f g" '("Find gitconfig file" . magit-find-git-config-file) + "g f c" '("Find commit" . magit-show-commit) + + "g l" '(:ignore t :which-key "list") + "g l r" '("List repositories" . magit-list-repositories) + "g l s" '("List submodules" . magit-list-submodules) + + "g o" '(:ignore t :which-key "open") + + "g c" '(:ignore t :which-key "create") + "g c R" '("Initialize repo" . magit-init) + "g c C" '("Clone repo" . magit-clone) + "g c c" '("Commit" . magit-commit-create) + "g c f" '("Fixup" . magit-commit-fixup) + "g c b" '("Branch" . magit-branch-and-checkout))) +#+end_src +** Git Gutter +The [[https://github.com/syohex/emacs-git-gutter-fringe][git-gutter-fringe]] project displays markings in the fringe (extreme left margin) to show modified and uncommitted lines. This project builds on [[https://github.com/emacsorphanage/git-gutter][git-gutter]] project to provide movement between /hunks/: +#+begin_src emacs-lisp + (use-package git-gutter-fringe + :custom + ;; To have both flymake and git-gutter work, we put + ;; git-gutter on the right side: + (git-gutter-fr:side 'right-fringe) + (left-fringe-width 15) + (right-fringe-width 10) + + :config + (set-face-foreground 'git-gutter-fr:modified "yellow") + (set-face-foreground 'git-gutter-fr:added "green") + (set-face-foreground 'git-gutter-fr:deleted "red") + + (global-git-gutter-mode) + + (ha-leader + "g n" '("next hunk" . git-gutter:next-hunk) + "g p" '("previous hunk" . git-gutter:previous-hunk) + "g e" '("end of hunk" . git-gutter:end-of-hunk) + "g r" '("revert hunk" . git-gutter:revert-hunk) + "g s" '("stage hunk" . git-gutter:stage-hunk))) +#+end_src +** Git Delta +The [[https://scripter.co/using-git-delta-with-magit][magit-delta]] project uses [[https://github.com/dandavison/delta][git-delta]] for colorized diffs. +#+begin_src emacs-lisp + (use-package magit-delta + :ensure t + :hook (magit-mode . magit-delta-mode)) +#+end_src +I also need to append the following to my [[file:~/.gitconfig][~/.gitconfig]] file: +#+begin_src conf + [delta] + minus-style = normal "#8f0001" + minus-non-emph-style = normal "#8f0001" + minus-emph-style = normal bold "#d01011" + minus-empty-line-marker-style = normal "#8f0001" + zero-style = syntax + plus-style = syntax "#006800" + plus-non-emph-style = syntax "#006800" + plus-emph-style = syntax "#009000" + plus-empty-line-marker-style = normal "#006800" +#+end_src +** Git with Difftastic +I’m stealing the code for this section from [[https://tsdh.org/posts/2022-08-01-difftastic-diffing-with-magit.html][this essay]] by Tassilo Horn, and in fact, I’m going to lift a lot of his explanation too, as I may need to remind myself how this works. The idea is based on using Wilfred’s excellent [[https://github.com/Wilfred/difftastic][difftastic]] tool to do a structural/syntax comparison of code changes in git. To begin, install the binary: +#+begin_src sh + brew install difftastic # and the equivalent on Linux +#+end_src +Next, we can do this, to use this as a diff tool for everything. +#+begin_src emacs-lisp + (setenv "GIT_EXTERNAL_DIFF" "difft") +#+end_src +But perhaps integrating it into Magit and selectively calling it (as it is slow). Tassilo suggests making the call to =difft= optional by first creating a helper function to set the =GIT_EXTERNAL_DIFF= to =difft=: +#+begin_src emacs-lisp + (defun th/magit--with-difftastic (buffer command) + "Run COMMAND with GIT_EXTERNAL_DIFF=difft then show result in BUFFER." + (let ((process-environment + (cons (concat "GIT_EXTERNAL_DIFF=difft --width=" + (number-to-string (frame-width))) + process-environment))) + ;; Clear the result buffer (we might regenerate a diff, e.g., for + ;; the current changes in our working directory). + (with-current-buffer buffer + (setq buffer-read-only nil) + (erase-buffer)) + ;; Now spawn a process calling the git COMMAND. + (make-process + :name (buffer-name buffer) + :buffer buffer + :command command + ;; Don't query for running processes when emacs is quit. + :noquery t + ;; Show the result buffer once the process has finished. + :sentinel (lambda (proc event) + (when (eq (process-status proc) 'exit) + (with-current-buffer (process-buffer proc) + (goto-char (point-min)) + (ansi-color-apply-on-region (point-min) (point-max)) + (setq buffer-read-only t) + (view-mode) + (end-of-line) + ;; difftastic diffs are usually 2-column side-by-side, + ;; so ensure our window is wide enough. + (let ((width (current-column))) + (while (zerop (forward-line 1)) + (end-of-line) + (setq width (max (current-column) width))) + ;; Add column size of fringes + (setq width (+ width + (fringe-columns 'left) + (fringe-columns 'right))) + (goto-char (point-min)) + (pop-to-buffer + (current-buffer) + `(;; If the buffer is that wide that splitting the frame in + ;; two side-by-side windows would result in less than + ;; 80 columns left, ensure it's shown at the bottom. + ,(when (> 80 (- (frame-width) width)) + #'display-buffer-at-bottom) + (window-width . ,(min width (frame-width)))))))))))) +#+end_src +The crucial parts of this helper function are that we "wash" the result using =ansi-color-apply-on-region= so that the function can transform the difftastic highlighting using shell escape codes to Emacs faces. Also, note the need to possibly change the width, as difftastic makes a side-by-side comparison. + +The functions below depend on [[help:magit-thing-at-point][magit-thing-at-point]], and this depends on the [[https://sr.ht/~pkal/compat/][compat]] library, so let’s grab that stuff: +#+begin_src emacs-lisp :tangle no + (use-package compat + :straight (:host github :repo "emacs-straight/compat")) + + (use-package magit-section + :commands magit-thing-at-point) +#+end_src +Next, let's define our first command basically doing a =git show= for some revision which defaults to the commit or branch at point or queries the user if there's none. +#+begin_src emacs-lisp + (defun th/magit-show-with-difftastic (rev) + "Show the result of \"git show REV\" with GIT_EXTERNAL_DIFF=difft." + (interactive + (list (or + ;; Use if given the REV variable: + (when (boundp 'rev) rev) + ;; If not invoked with prefix arg, try to guess the REV from + ;; point's position. + (and (not current-prefix-arg) + (or (magit-thing-at-point 'git-revision t) + (magit-branch-or-commit-at-point))) + ;; Otherwise, query the user. + (magit-read-branch-or-commit "Revision")))) + (if (not rev) + (error "No revision specified") + (th/magit--with-difftastic + (get-buffer-create (concat "*git show difftastic " rev "*")) + (list "git" "--no-pager" "show" "--ext-diff" rev)))) +#+end_src +And here the second command which basically does a =git diff=. It tries to guess what one wants to diff, e.g., when point is on the Staged changes section in a magit buffer, it will run =git diff --cached= to show a diff of all staged changes. If it can not guess the context, it'll query the user for a range or commit for diffing. +#+begin_src emacs-lisp + (defun th/magit-diff-with-difftastic (arg) + "Show the result of \"git diff ARG\" with GIT_EXTERNAL_DIFF=difft." + (interactive + (list (or + ;; Use If RANGE is given, just use it. + (when (boundp 'range) range) + ;; If prefix arg is given, query the user. + (and current-prefix-arg + (magit-diff-read-range-or-commit "Range")) + ;; Otherwise, auto-guess based on position of point, e.g., based on + ;; if we are in the Staged or Unstaged section. + (pcase (magit-diff--dwim) + ('unmerged (error "unmerged is not yet implemented")) + ('unstaged nil) + ('staged "--cached") + (`(stash . ,value) (error "stash is not yet implemented")) + (`(commit . ,value) (format "%s^..%s" value value)) + ((and range (pred stringp)) range) + (_ (magit-diff-read-range-or-commit "Range/Commit")))))) + (let ((name (concat "*git diff difftastic" + (if arg (concat " " arg) "") + "*"))) + (th/magit--with-difftastic + (get-buffer-create name) + `("git" "--no-pager" "diff" "--ext-diff" ,@(when arg (list arg)))))) +#+end_src + +What's left is integrating the new show and diff commands in Magit. For that purpose, Tasillo created a new transient prefix for all personal commands. Intriguing, but I have a hack that I can use on a leader: +#+begin_src emacs-lisp + (defun ha-difftastic-here () + (interactive) + (call-interactively + (if (eq major-mode 'magit-log-mode) + 'th/magit-show-with-difftastic + 'th/magit-diff-with-difftastic))) + + (ha-leader "g d" '("difftastic" . ha-difftastic-here)) +#+end_src +** Time Machine +The [[https://github.com/emacsmirror/git-timemachine][git-timemachine]] project visually shows how a code file changes with each iteration: +#+begin_src emacs-lisp + (use-package git-timemachine + :config + (ha-leader "g t" '("git timemachine" . git-timemachine))) +#+end_src +** Gist +Using the [[https://github.com/emacsmirror/gist][gist package]] to write code snippets on [[https://gist.github.com/][Github]] seems like it can be useful, but I'm not sure how often. + +#+begin_src emacs-lisp :tangle no + (use-package gist + :config + (ha-leader + "g G" '(:ignore t :which-key "gists") + "g l g" '("gists" . gist-list) + "g G l" '("list" . gist-list) ; Lists your gists in a new buffer. + "g G r" '("region" . gist-region) ; Copies Gist URL into the kill ring. + "g G R" '("private region" . gist-region-private) ; Explicitly create a private gist. + "g G b" '("buffer" . gist-buffer) ; Copies Gist URL into the kill ring. + "g G B" '("private buffer" . gist-buffer-private) ; Explicitly create a private gist. + "g c g" '("gist" . gist-region-or-buffer) ; Post either the current region, or buffer + "g c G" '("private gist" . gist-region-or-buffer-private))) ; create private gist from region or buffer +#+end_src + +The gist project depends on the [[https://github.com/sigma/gh.el][gh library]]. There seems to be a problem with it. +#+begin_src emacs-lisp :tangle no + (use-package gh + :straight (:host github :repo "sigma/gh.el")) +#+end_src + +** Forge +Let's extend Magit with [[https://github.com/magit/forge][Magit Forge]] for working with Github and Gitlab: +#+begin_src emacs-lisp :tangle no + (use-package forge + :after magit + :config + (ha-leader + "g '" '("Forge dispatch" . forge-dispatch) + "g f i" '("Find issue" . forge-visit-issue) + "g f p" '("Find pull request" . forge-visit-pullreq) + + "g l i" '("List issues" . forge-list-issues) + "g l p" '("List pull requests" . forge-list-pullreqs) + "g l n" '("List notifications" . forge-list-notifications) + + "g o r" '("Browse remote" . forge-browse-remote) + "g o c" '("Browse commit" . forge-browse-commit) + "g o i" '("Browse an issue" . forge-browse-issue) + "g o p" '("Browse a pull request" . forge-browse-pullreq) + "g o i" '("Browse issues" . forge-browse-issues) + "g o P" '("Browse pull requests" . forge-browse-pullreqs) + + "g c i" '("Issue" . forge-create-issue) + "g c p" '("Pull request" . forge-create-pullreq))) +#+end_src + +Every /so often/, pop over to the following URLs and generate a new token where the *Note* is =forge=, and then copy that into the [[file:~/.authinfo.gpg][~/.authinfo.gpg]]: + - [[https://gitlab.com/-/user_settings/personal_access_tokens][Gitlab]] + - [[https://github.com/settings/tokens][Github]] + and make sure this works: + + #+begin_src emacs-lisp :tangle no :results replace + (ghub-request "GET" "/user" nil + :forge 'github + :host "api.github.com" + :username "howardabrams" + :auth 'forge) + #+end_src +** Pushing is Bad +Pushing directly to the upstream branch is /bad form/, as one should create a pull request, etc. To prevent an accidental push, we /double-check/ first: + +#+begin_src emacs-lisp + (define-advice magit-push-current-to-upstream (:before (args) query-yes-or-no) + "Prompt for confirmation before permitting a push to upstream." + (when-let ((branch (magit-get-current-branch))) + (unless (yes-or-no-p (format "Push %s branch upstream to %s? " + branch + (or (magit-get-upstream-branch branch) + (magit-get "branch" branch "remote")))) + (user-error "Push to upstream aborted by user")))) +#+end_src +* ediff +Love me ediff, but with monitors that are wider than they are tall, let’s put the diffs side-by-side: +#+begin_src emacs-lisp + (setq ediff-split-window-function 'split-window-horizontally) +#+end_src +Frames, er, windows, are actually annoying for me, as Emacs is always in full-screen mode. +#+begin_src emacs-lisp + (setq ediff-window-setup-function 'ediff-setup-windows-plain) +#+end_src +When =ediff= is finished, it leaves the windows /borked/. This is annoying, but according to [[http://yummymelon.com/devnull/surprise-and-emacs-defaults.html][this essay]], we can fix it: +#+begin_src emacs-lisp + (defvar my-ediff-last-windows nil + "Session for storing window configuration before calling `ediff'.") + + (defun my-store-pre-ediff-winconfig () + "Store `current-window-configuration' in variable `my-ediff-last-windows'." + (setq my-ediff-last-windows (current-window-configuration))) + + (defun my-restore-pre-ediff-winconfig () + "Restore window configuration to stored value in `my-ediff-last-windows'." + (set-window-configuration my-ediff-last-windows)) + + (add-hook 'ediff-before-setup-hook #'my-store-pre-ediff-winconfig) + (add-hook 'ediff-quit-hook #'my-restore-pre-ediff-winconfig) +#+end_src +* Web Browsing +** EWW +Web pages look pretty good with EWW, but I'm having difficulty getting it to render a web search from DuckDuck. + +#+begin_src emacs-lisp + (use-package eww + :init + (setq browse-url-browser-function 'eww-browse-url + browse-url-secondary-browser-function 'browse-url-default-browser + eww-browse-url-new-window-is-tab nil + shr-use-colors nil + shr-use-fonts t ; I go back and forth on this one + ;; shr-discard-aria-hidden t + shr-bullet "• " + shr-inhibit-images nil ; Gotta see the images? + ;; shr-blocked-images '(svg) + ;; shr-folding-mode nil + url-privacy-level '(email)) + + :config + (ha-leader "a b" '("eww browser" . eww)) + + :general + (:states 'normal :keymaps 'eww-mode-map + "B" 'eww-list-bookmarks + "Y" 'eww-copy-page-url + "H" 'eww-back-url + "L" 'eww-forward-url + "u" 'eww-top-url + "p" 'eww-previous-url + "n" 'eww-next-url + "q" 'bury-buffer) + (:states 'normal :keymaps 'eww-buffers-mode-map + "q" 'bury-buffer)) +#+end_src + +This function allows Imenu to offer HTML headings in EWW buffers, helpful for navigating long, technical documents. +#+begin_src emacs-lisp + (use-package eww + :config + (defun unpackaged/imenu-eww-headings () + "Return alist of HTML headings in current EWW buffer for Imenu. + Suitable for `imenu-create-index-function'." + (let ((faces '(shr-h1 shr-h2 shr-h3 shr-h4 shr-h5 shr-h6 shr-heading))) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (cl-loop for next-pos = (next-single-property-change (point) 'face) + while next-pos + do (goto-char next-pos) + for face = (get-text-property (point) 'face) + when (cl-typecase face + (list (cl-intersection face faces)) + (symbol (member face faces))) + collect (cons (buffer-substring (point-at-bol) (point-at-eol)) (point)) + and do (forward-line 1)))))) + :hook (eww-mode . + (lambda () + (setq-local imenu-create-index-function #'unpackaged/imenu-eww-headings)))) +#+end_src +** Get Pocket +The [[https://github.com/alphapapa/pocket-reader.el][pocket-reader]] project connects to the [[https://getpocket.com/en/][Get Pocket]] service. + +#+begin_src emacs-lisp + (use-package pocket-reader + :init + (setq org-web-tools-pandoc-sleep-time 1) + :config + (ha-leader "o p" '("get pocket" . pocket-reader)) + + ;; Instead of jumping into Emacs mode to get the `pocket-mode-map', + ;; we add the keybindings to the normal mode that makes sense. + :general + (:states 'normal :keymaps 'pocket-reader-mode-map + "RET" 'pocket-reader-open-url + "TAB" 'pocket-reader-pop-to-url + + "*" 'pocket-reader-toggle-favorite + "B" 'pocket-reader-open-in-external-browser + "D" 'pocket-reader-delete + "E" 'pocket-reader-excerpt-all + "F" 'pocket-reader-show-unread-favorites + "M" 'pocket-reader-mark-all + "R" 'pocket-reader-random-item + "S" 'tabulated-list-sort + "a" 'pocket-reader-toggle-archived + "c" 'pocket-reader-copy-url + "d" 'pocket-reader + "e" 'pocket-reader-excerpt + "f" 'pocket-reader-toggle-favorite + "l" 'pocket-reader-limit + "m" 'pocket-reader-toggle-mark + "o" 'pocket-reader-more + "q" 'quit-window + "s" 'pocket-reader-search + "u" 'pocket-reader-unmark-all + "t a" 'pocket-reader-add-tags + "t r" 'pocket-reader-remove-tags + "t s" 'pocket-reader-tag-search + "t t" 'pocket-reader-set-tags + + "g s" 'pocket-reader-resort + "g r" 'pocket-reader-refresh)) +#+end_src + +Use these special keywords when searching: + + - =:*=, =:favorite= Return favorited items. + - =:archive= Return archived items. + - =:unread= Return unread items (default). + - =:all= Return all items. + - =:COUNT= Return at most /COUNT/ (a number) items. This limit persists until you start a new search. + - =:t:TAG=, =t:TAG= Return items with /TAG/ (you can search for one tag at a time, a limitation of the Pocket API). +** External Browsing +Browsing on a work laptop is a bit different. According to [[http://ergoemacs.org/emacs/emacs_set_default_browser.html][this page]], I can set a /default browser/ for different URLs, which is great, as I can launch my browser for personal browsing, or another browser for work access, or even EWW. To make this clear, I'm using the abstraction associated with [[https://github.com/rolandwalker/osx-browse][osx-browse]]: +#+begin_src emacs-lisp + (use-package osx-browse + :init + (setq browse-url-handlers + '(("docs\\.google\\.com" . osx-browse-url-personal) + ("grafana.com" . osx-browse-url-personal) + ("dndbeyond.com" . osx-browse-url-personal) + ("tabletopaudio.com" . osx-browse-url-personal) + ("youtu.be" . osx-browse-url-personal) + ("youtube.com" . osx-browse-url-personal) + ("." . eww-browse-url))) + + :config + (defun osx-browse-url-personal (url &optional new-window browser focus) + "Open URL in Firefox for my personal surfing. + The parameters, URL, NEW-WINDOW, and FOCUS are as documented in + the function, `osx-browse-url'." + (interactive (osx-browse-interactive-form)) + (cl-callf or browser "org.mozilla.Firefox") + (osx-browse-url url new-window browser focus))) +#+end_src +* Dirvish +The [[https://github.com/alexluigit/dirvish][dirvish]] project aims to be a better =dired=. And since the =major-mode= is still =dired-mode=, the decades of finger memory isn’t lost. For people starting to use =dired=, most commands are pretty straight-forward (and Prot did a pretty good [[https://www.youtube.com/watch?v=5dlydii7tAU][introduction]] to it), but to remind myself, keep in mind: + + - ~%~ :: will /mark/ a bunch of files based on a regular expression + - ~m~ :: marks a single file + - ~d~ :: marks a file to delete, type ~x~ to follow-through on all files marked for deletion. + - ~u~ :: un-mark a file, or type ~!~ to un-mark all + - ~t~ :: to toggle the marked files. Keep files with =xyz= extension? Mark those with ~%~, and then ~t~ toggle. + - ~C~ :: copy the current file or all marked files + - ~R~ :: rename/move the current file or all marked files + - ~M~ :: change the mode (=chmod=) of current or marked files, accepts symbols, like =a+x= + +Note that =dired= has /two marks/ … one is a general mark, and the other is specifically a mark of files to delete. + +Dirvish does require the following supporting programs, but I’ve already got those puppies installed: +#+begin_src sh + brew install coreutils fd poppler ffmpegthumbnailer mediainfo imagemagick +#+end_src + +I’m beginning with dirvish to use the [[https://github.com/alexluigit/dirvish/blob/main/docs/CUSTOMIZING.org][sample configuration]] and change it: +#+begin_src emacs-lisp + (use-package dirvish + :straight (:host github :repo "alexluigit/dirvish") + :init + (dirvish-override-dired-mode) + + :custom + (dirvish-quick-access-entries + '(("h" "~/" "Home") + ("p" "~/personal" "Personal") + ("p" "~/projects" "Projects") + ("t" "~/technical" "Technical") + ("w" "~/website" "Website") + ("d" "~/Downloads/" "Downloads"))) + + :config + ;; This setting is like `treemacs-follow-mode' where the buffer + ;; changes based on the current file. Not sure if I want this: + ;; (dirvish-side-follow-mode) + + (setq dirvish-mode-line-format + '(:left (sort symlink) :right (omit yank index))) + (setq dirvish-attributes + '(all-the-icons file-time file-size collapse subtree-state vc-state git-msg)) + + (setq delete-by-moving-to-trash t + dired-auto-revert-buffer t) + + ;; With `ls' as an alias, and `gls' available on _some_ of my systems, I dont: + ;; (setq insert-directory-program "gls") + ;; And instead use Emacs' built-in directory lister: + (setq insert-directory-program nil) + (setq ls-lisp-use-insert-directory-program nil) + (require 'ls-lisp) + (setq dired-listing-switches + "-l --almost-all --human-readable --group-directories-first --no-group") + + (set-face-attribute 'dirvish-hl-line nil :background "darkmagenta")) +#+end_src +While in =dirvish-mode=, we can rebind some keys: +#+begin_src emacs-lisp + (use-package dirvish + :bind + (:map dirvish-mode-map ; Dirvish inherits `dired-mode-map' + ("a" . dirvish-quick-access) + ("f" . dirvish-file-info-menu) + ("y" . dirvish-yank-menu) + ("N" . dirvish-narrow) + ("^" . dirvish-history-last) + ("h" . dirvish-history-jump) ; remapped `describe-mode' + ("q" . dirvish-quit) + ("s" . dirvish-quicksort) ; remapped `dired-sort-toggle-or-edit' + ("v" . dirvish-vc-menu) ; remapped `dired-view-file' + ("TAB" . dirvish-subtree-toggle) + ("M-f" . dirvish-history-go-forward) + ("M-b" . dirvish-history-go-backward) + ("M-l" . dirvish-ls-switches-menu) + ("M-m" . dirvish-mark-menu) + ("M-t" . dirvish-layout-toggle) + ("M-s" . dirvish-setup-menu) + ("M-e" . dirvish-emerge-menu) + ("M-j" . dirvish-fd-jump))) +#+end_src +* Annotations +Let's try [[https://github.com/bastibe/annotate.el][annotate-mode]], which allows you to drop "notes" and then move to them (yes, serious overlap with bookmarks, which we will return to). + +#+begin_src emacs-lisp + (use-package annotate + :config + (ha-leader + "t A" '("annotations" . annotate-mode) + + "n" '(:ignore t :which-key "notes") + "n a" '("toggle mode" . annotate-mode) + "n n" '("annotate" . annotate-annotate) + "n d" '("delete" . annotate-delete) + "n s" '("summary" . annotate-show-annotation-summary) + "n j" '("next" . annotate-goto-next-annotation) + "n k" '("prev" . annotate-goto-previous-annotation) + + ;; If a shift binding isn't set, it defaults to non-shift version + ;; Use SPC N N to jump to the next error: + "n N" '("next error" . flycheck-next-error))) +#+end_src +Keep the annotations simple, almost /tag-like/, and then the summary allows you to display them. +* Keepass +Use the [[https://github.com/ifosch/keepass-mode][keepass-mode]] to view a /read-only/ version of my Keepass file in Emacs: +#+begin_src emacs-lisp + (use-package keepass-mode) +#+end_src +When having your point on a key entry, you can copy fields to kill-ring using: + - ~u~ :: URL + - ~b~ :: user name + - ~c~ :: password + +* Demo It +Making demonstrations /within/ Emacs with my [[https://github.com/howardabrams/demo-it][demo-it]] project. While on MELPA, I want to use my own cloned version to make sure I can keep debugging it. +#+begin_src emacs-lisp + (use-package demo-it + :straight (:local-repo "~/other/demo-it") + ;; :straight (:host github :repo "howardabrams/demo-it") + :commands (demo-it-create demo-it-start)) +#+end_src +* PDF Viewing +Why not [[https://github.com/politza/pdf-tools][view PDF files]] better? If you have standard build tools installed on your system, run [[help:pdf-tools-install][pdf-tools-install]], as this command will an =epdfinfo= program to PDF displays. + +#+begin_src emacs-lisp + (use-package pdf-tools + :mode ("\\.pdf\\'" . pdf-view-mode) + :init + (if (ha-running-on-macos?) + (setq pdf-info-epdfinfo-program "/opt/homebrew/bin/epdfinfo") + (setq pdf-info-epdfinfo-program "/usr/local/bin/epdfinfo")) + :general + (:states 'normal :keymaps 'pdf-view-mode-map + "gp" 'pdf-view-goto-page + ">" 'doc-view-fit-window-to-page)) +#+end_src + +Make sure the [[help:pdf-info-check-epdfinfo][pdf-info-check-epdfinfo]] function works. + + +* Technical Artifacts :noexport: + +Let's provide a name so that the file can be required: + +#+begin_src emacs-lisp :exports none + (provide 'ha-applications) + ;;; ha-applications.el ends here + #+end_src + + +#+DESCRIPTION: A literate programming file configuring critical applications. + +#+PROPERTY: header-args:sh :tangle no +#+PROPERTY: header-args:emacs-lisp :tangle yes +#+PROPERTY: header-args :results none :eval no-export :comments no mkdirp yes + +#+OPTIONS: num:nil toc:nil todo:nil tasks:nil tags:nil date:nil +#+OPTIONS: skip:nil author:nil email:nil creator:nil timestamp:nil +#+INFOJS_OPT: view:nil toc:nil ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js + +# Local Variables: +# eval: (add-hook 'after-save-hook #'org-babel-tangle t t) +# End: diff --git a/ha-config.org b/ha-config.org index 0aadd2e..569f8fc 100644 --- a/ha-config.org +++ b/ha-config.org @@ -667,11 +667,15 @@ Build the hydra as well as configure the =perspective= project. ("C-g" nil))) #+end_src -I have no idea why this binding doesn’t work /within/ the =use-package= declaration, but oh well… +Let’s give it a binding: #+begin_src emacs-lisp (ha-leader "TAB" '("workspaces" . hydra-workspace-leader/body)) #+end_src +When called, it /can/ look like: + +[[file:screenshots/projects-hydra.png]] + The /special/ perspective is a nice shortcut to the one I use the most: #+begin_src emacs-lisp (defun ha-switch-to-special () @@ -784,613 +788,6 @@ The =persp-switch= allows me to select or create a new project, but what if we i ((s-starts-with? "twit" name) (twit)))) #+end_src Once we create the new perspective workspace, if it matches a particular name, I pretty much know what function I would like to call. -* Applications -Can we call these /applications/? -** Magit -Can not live without [[https://magit.vc/][Magit]], a Git porcelain for Emacs. I stole the bulk of this work from Doom Emacs. -#+begin_src emacs-lisp - (use-package magit - ;; See https://github.com/magit/magit/wiki/Emacsclient for why we need to set: - :custom (with-editor-emacsclient-executable "emacsclient") - - :config - ;; The following code re-instates my General Leader key in Magit. - (general-unbind magit-mode-map "SPC") - - (ha-leader - "g" '(:ignore t :which-key "git") - "g /" '("Magit dispatch" . magit-dispatch) - "g ." '("Magit file dispatch" . magit-file-dispatch) - "g b" '("Magit switch branch" . magit-branch-checkout) - "g u" '("Git Update" . vc-update) - - "g g" '("Magit status" . magit-status) - "g s" '("Magit status here" . magit-status-here) - "g D" '("Magit file delete" . magit-file-delete) - "g B" '("Magit blame" . magit-blame-addition) - "g C" '("Magit clone" . magit-clone) - "g F" '("Magit fetch" . magit-fetch) - "g L" '("Magit buffer log" . magit-log-buffer-file) - "g R" '("Revert file" . magit-file-checkout) - "g S" '("Git stage file" . magit-stage-file) - "g U" '("Git unstage file" . magit-unstage-file) - - "g f" '(:ignore t :which-key "find") - "g f f" '("Find file" . magit-find-file) - "g f g" '("Find gitconfig file" . magit-find-git-config-file) - "g f c" '("Find commit" . magit-show-commit) - - "g l" '(:ignore t :which-key "list") - "g l r" '("List repositories" . magit-list-repositories) - "g l s" '("List submodules" . magit-list-submodules) - - "g o" '(:ignore t :which-key "open") - - "g c" '(:ignore t :which-key "create") - "g c R" '("Initialize repo" . magit-init) - "g c C" '("Clone repo" . magit-clone) - "g c c" '("Commit" . magit-commit-create) - "g c f" '("Fixup" . magit-commit-fixup) - "g c b" '("Branch" . magit-branch-and-checkout))) -#+end_src -*** Git Gutter -The [[https://github.com/syohex/emacs-git-gutter-fringe][git-gutter-fringe]] project displays markings in the fringe (extreme left margin) to show modified and uncommitted lines. This project builds on [[https://github.com/emacsorphanage/git-gutter][git-gutter]] project to provide movement between /hunks/: -#+begin_src emacs-lisp - (use-package git-gutter-fringe - :custom - ;; To have both flymake and git-gutter work, we put - ;; git-gutter on the right side: - (git-gutter-fr:side 'right-fringe) - (left-fringe-width 15) - (right-fringe-width 10) - - :config - (set-face-foreground 'git-gutter-fr:modified "yellow") - (set-face-foreground 'git-gutter-fr:added "green") - (set-face-foreground 'git-gutter-fr:deleted "red") - - (global-git-gutter-mode) - - (ha-leader - "g n" '("next hunk" . git-gutter:next-hunk) - "g p" '("previous hunk" . git-gutter:previous-hunk) - "g e" '("end of hunk" . git-gutter:end-of-hunk) - "g r" '("revert hunk" . git-gutter:revert-hunk) - "g s" '("stage hunk" . git-gutter:stage-hunk))) -#+end_src -*** Git Delta -The [[https://scripter.co/using-git-delta-with-magit][magit-delta]] project uses [[https://github.com/dandavison/delta][git-delta]] for colorized diffs. -#+begin_src emacs-lisp - (use-package magit-delta - :ensure t - :hook (magit-mode . magit-delta-mode)) -#+end_src -I also need to append the following to my [[file:~/.gitconfig][~/.gitconfig]] file: -#+begin_src conf - [delta] - minus-style = normal "#8f0001" - minus-non-emph-style = normal "#8f0001" - minus-emph-style = normal bold "#d01011" - minus-empty-line-marker-style = normal "#8f0001" - zero-style = syntax - plus-style = syntax "#006800" - plus-non-emph-style = syntax "#006800" - plus-emph-style = syntax "#009000" - plus-empty-line-marker-style = normal "#006800" -#+end_src -*** Git with Difftastic -I’m stealing the code for this section from [[https://tsdh.org/posts/2022-08-01-difftastic-diffing-with-magit.html][this essay]] by Tassilo Horn, and in fact, I’m going to lift a lot of his explanation too, as I may need to remind myself how this works. The idea is based on using Wilfred’s excellent [[https://github.com/Wilfred/difftastic][difftastic]] tool to do a structural/syntax comparison of code changes in git. To begin, install the binary: -#+begin_src sh - brew install difftastic # and the equivalent on Linux -#+end_src -Next, we can do this, to use this as a diff tool for everything. -#+begin_src emacs-lisp - (setenv "GIT_EXTERNAL_DIFF" "difft") -#+end_src -But perhaps integrating it into Magit and selectively calling it (as it is slow). Tassilo suggests making the call to =difft= optional by first creating a helper function to set the =GIT_EXTERNAL_DIFF= to =difft=: -#+begin_src emacs-lisp - (defun th/magit--with-difftastic (buffer command) - "Run COMMAND with GIT_EXTERNAL_DIFF=difft then show result in BUFFER." - (let ((process-environment - (cons (concat "GIT_EXTERNAL_DIFF=difft --width=" - (number-to-string (frame-width))) - process-environment))) - ;; Clear the result buffer (we might regenerate a diff, e.g., for - ;; the current changes in our working directory). - (with-current-buffer buffer - (setq buffer-read-only nil) - (erase-buffer)) - ;; Now spawn a process calling the git COMMAND. - (make-process - :name (buffer-name buffer) - :buffer buffer - :command command - ;; Don't query for running processes when emacs is quit. - :noquery t - ;; Show the result buffer once the process has finished. - :sentinel (lambda (proc event) - (when (eq (process-status proc) 'exit) - (with-current-buffer (process-buffer proc) - (goto-char (point-min)) - (ansi-color-apply-on-region (point-min) (point-max)) - (setq buffer-read-only t) - (view-mode) - (end-of-line) - ;; difftastic diffs are usually 2-column side-by-side, - ;; so ensure our window is wide enough. - (let ((width (current-column))) - (while (zerop (forward-line 1)) - (end-of-line) - (setq width (max (current-column) width))) - ;; Add column size of fringes - (setq width (+ width - (fringe-columns 'left) - (fringe-columns 'right))) - (goto-char (point-min)) - (pop-to-buffer - (current-buffer) - `(;; If the buffer is that wide that splitting the frame in - ;; two side-by-side windows would result in less than - ;; 80 columns left, ensure it's shown at the bottom. - ,(when (> 80 (- (frame-width) width)) - #'display-buffer-at-bottom) - (window-width . ,(min width (frame-width)))))))))))) -#+end_src -The crucial parts of this helper function are that we "wash" the result using =ansi-color-apply-on-region= so that the function can transform the difftastic highlighting using shell escape codes to Emacs faces. Also, note the need to possibly change the width, as difftastic makes a side-by-side comparison. - -The functions below depend on [[help:magit-thing-at-point][magit-thing-at-point]], and this depends on the [[https://sr.ht/~pkal/compat/][compat]] library, so let’s grab that stuff: -#+begin_src emacs-lisp :tangle no - (use-package compat - :straight (:host github :repo "emacs-straight/compat")) - - (use-package magit-section - :commands magit-thing-at-point) -#+end_src -Next, let's define our first command basically doing a =git show= for some revision which defaults to the commit or branch at point or queries the user if there's none. -#+begin_src emacs-lisp - (defun th/magit-show-with-difftastic (rev) - "Show the result of \"git show REV\" with GIT_EXTERNAL_DIFF=difft." - (interactive - (list (or - ;; Use if given the REV variable: - (when (boundp 'rev) rev) - ;; If not invoked with prefix arg, try to guess the REV from - ;; point's position. - (and (not current-prefix-arg) - (or (magit-thing-at-point 'git-revision t) - (magit-branch-or-commit-at-point))) - ;; Otherwise, query the user. - (magit-read-branch-or-commit "Revision")))) - (if (not rev) - (error "No revision specified") - (th/magit--with-difftastic - (get-buffer-create (concat "*git show difftastic " rev "*")) - (list "git" "--no-pager" "show" "--ext-diff" rev)))) -#+end_src -And here the second command which basically does a =git diff=. It tries to guess what one wants to diff, e.g., when point is on the Staged changes section in a magit buffer, it will run =git diff --cached= to show a diff of all staged changes. If it can not guess the context, it'll query the user for a range or commit for diffing. -#+begin_src emacs-lisp - (defun th/magit-diff-with-difftastic (arg) - "Show the result of \"git diff ARG\" with GIT_EXTERNAL_DIFF=difft." - (interactive - (list (or - ;; Use If RANGE is given, just use it. - (when (boundp 'range) range) - ;; If prefix arg is given, query the user. - (and current-prefix-arg - (magit-diff-read-range-or-commit "Range")) - ;; Otherwise, auto-guess based on position of point, e.g., based on - ;; if we are in the Staged or Unstaged section. - (pcase (magit-diff--dwim) - ('unmerged (error "unmerged is not yet implemented")) - ('unstaged nil) - ('staged "--cached") - (`(stash . ,value) (error "stash is not yet implemented")) - (`(commit . ,value) (format "%s^..%s" value value)) - ((and range (pred stringp)) range) - (_ (magit-diff-read-range-or-commit "Range/Commit")))))) - (let ((name (concat "*git diff difftastic" - (if arg (concat " " arg) "") - "*"))) - (th/magit--with-difftastic - (get-buffer-create name) - `("git" "--no-pager" "diff" "--ext-diff" ,@(when arg (list arg)))))) -#+end_src - -What's left is integrating the new show and diff commands in Magit. For that purpose, Tasillo created a new transient prefix for all personal commands. Intriguing, but I have a hack that I can use on a leader: -#+begin_src emacs-lisp - (defun ha-difftastic-here () - (interactive) - (call-interactively - (if (eq major-mode 'magit-log-mode) - 'th/magit-show-with-difftastic - 'th/magit-diff-with-difftastic))) - - (ha-leader "g d" '("difftastic" . ha-difftastic-here)) -#+end_src -*** Time Machine -The [[https://github.com/emacsmirror/git-timemachine][git-timemachine]] project visually shows how a code file changes with each iteration: -#+begin_src emacs-lisp - (use-package git-timemachine - :config - (ha-leader "g t" '("git timemachine" . git-timemachine))) -#+end_src -*** Gist -Using the [[https://github.com/emacsmirror/gist][gist package]] to write code snippets on [[https://gist.github.com/][Github]] seems like it can be useful, but I'm not sure how often. - -#+begin_src emacs-lisp :tangle no - (use-package gist - :config - (ha-leader - "g G" '(:ignore t :which-key "gists") - "g l g" '("gists" . gist-list) - "g G l" '("list" . gist-list) ; Lists your gists in a new buffer. - "g G r" '("region" . gist-region) ; Copies Gist URL into the kill ring. - "g G R" '("private region" . gist-region-private) ; Explicitly create a private gist. - "g G b" '("buffer" . gist-buffer) ; Copies Gist URL into the kill ring. - "g G B" '("private buffer" . gist-buffer-private) ; Explicitly create a private gist. - "g c g" '("gist" . gist-region-or-buffer) ; Post either the current region, or buffer - "g c G" '("private gist" . gist-region-or-buffer-private))) ; create private gist from region or buffer -#+end_src - -The gist project depends on the [[https://github.com/sigma/gh.el][gh library]]. There seems to be a problem with it. -#+begin_src emacs-lisp :tangle no - (use-package gh - :straight (:host github :repo "sigma/gh.el")) -#+end_src - -*** Forge -Let's extend Magit with [[https://github.com/magit/forge][Magit Forge]] for working with Github and Gitlab: -#+begin_src emacs-lisp :tangle no - (use-package forge - :after magit - :config - (ha-leader - "g '" '("Forge dispatch" . forge-dispatch) - "g f i" '("Find issue" . forge-visit-issue) - "g f p" '("Find pull request" . forge-visit-pullreq) - - "g l i" '("List issues" . forge-list-issues) - "g l p" '("List pull requests" . forge-list-pullreqs) - "g l n" '("List notifications" . forge-list-notifications) - - "g o r" '("Browse remote" . forge-browse-remote) - "g o c" '("Browse commit" . forge-browse-commit) - "g o i" '("Browse an issue" . forge-browse-issue) - "g o p" '("Browse a pull request" . forge-browse-pullreq) - "g o i" '("Browse issues" . forge-browse-issues) - "g o P" '("Browse pull requests" . forge-browse-pullreqs) - - "g c i" '("Issue" . forge-create-issue) - "g c p" '("Pull request" . forge-create-pullreq))) -#+end_src - -Every /so often/, pop over to the following URLs and generate a new token where the *Note* is =forge=, and then copy that into the [[file:~/.authinfo.gpg][~/.authinfo.gpg]]: - - [[https://gitlab.com/-/user_settings/personal_access_tokens][Gitlab]] - - [[https://github.com/settings/tokens][Github]] - and make sure this works: - - #+begin_src emacs-lisp :tangle no :results replace - (ghub-request "GET" "/user" nil - :forge 'github - :host "api.github.com" - :username "howardabrams" - :auth 'forge) - #+end_src -*** Pushing is Bad -Pushing directly to the upstream branch is /bad form/, as one should create a pull request, etc. To prevent an accidental push, we /double-check/ first: - -#+begin_src emacs-lisp - (define-advice magit-push-current-to-upstream (:before (args) query-yes-or-no) - "Prompt for confirmation before permitting a push to upstream." - (when-let ((branch (magit-get-current-branch))) - (unless (yes-or-no-p (format "Push %s branch upstream to %s? " - branch - (or (magit-get-upstream-branch branch) - (magit-get "branch" branch "remote")))) - (user-error "Push to upstream aborted by user")))) -#+end_src -** Web Browsing -*** EWW -Web pages look pretty good with EWW, but I'm having difficulty getting it to render a web search from DuckDuck. - -#+begin_src emacs-lisp - (use-package eww - :init - (setq browse-url-browser-function 'eww-browse-url - browse-url-secondary-browser-function 'browse-url-default-browser - eww-browse-url-new-window-is-tab nil - shr-use-colors nil - shr-use-fonts t ; I go back and forth on this one - ;; shr-discard-aria-hidden t - shr-bullet "• " - shr-inhibit-images nil ; Gotta see the images? - ;; shr-blocked-images '(svg) - ;; shr-folding-mode nil - url-privacy-level '(email)) - - :config - (ha-leader "a b" '("eww browser" . eww)) - - :general - (:states 'normal :keymaps 'eww-mode-map - "B" 'eww-list-bookmarks - "Y" 'eww-copy-page-url - "H" 'eww-back-url - "L" 'eww-forward-url - "u" 'eww-top-url - "p" 'eww-previous-url - "n" 'eww-next-url - "q" 'bury-buffer) - (:states 'normal :keymaps 'eww-buffers-mode-map - "q" 'bury-buffer)) -#+end_src - -This function allows Imenu to offer HTML headings in EWW buffers, helpful for navigating long, technical documents. -#+begin_src emacs-lisp - (use-package eww - :config - (defun unpackaged/imenu-eww-headings () - "Return alist of HTML headings in current EWW buffer for Imenu. - Suitable for `imenu-create-index-function'." - (let ((faces '(shr-h1 shr-h2 shr-h3 shr-h4 shr-h5 shr-h6 shr-heading))) - (save-excursion - (save-restriction - (widen) - (goto-char (point-min)) - (cl-loop for next-pos = (next-single-property-change (point) 'face) - while next-pos - do (goto-char next-pos) - for face = (get-text-property (point) 'face) - when (cl-typecase face - (list (cl-intersection face faces)) - (symbol (member face faces))) - collect (cons (buffer-substring (point-at-bol) (point-at-eol)) (point)) - and do (forward-line 1)))))) - :hook (eww-mode . - (lambda () - (setq-local imenu-create-index-function #'unpackaged/imenu-eww-headings)))) -#+end_src -*** Get Pocket -The [[https://github.com/alphapapa/pocket-reader.el][pocket-reader]] project connects to the [[https://getpocket.com/en/][Get Pocket]] service. - -#+begin_src emacs-lisp - (use-package pocket-reader - :init - (setq org-web-tools-pandoc-sleep-time 1) - :config - (ha-leader "o p" '("get pocket" . pocket-reader)) - - ;; Instead of jumping into Emacs mode to get the `pocket-mode-map', - ;; we add the keybindings to the normal mode that makes sense. - :general - (:states 'normal :keymaps 'pocket-reader-mode-map - "RET" 'pocket-reader-open-url - "TAB" 'pocket-reader-pop-to-url - - "*" 'pocket-reader-toggle-favorite - "B" 'pocket-reader-open-in-external-browser - "D" 'pocket-reader-delete - "E" 'pocket-reader-excerpt-all - "F" 'pocket-reader-show-unread-favorites - "M" 'pocket-reader-mark-all - "R" 'pocket-reader-random-item - "S" 'tabulated-list-sort - "a" 'pocket-reader-toggle-archived - "c" 'pocket-reader-copy-url - "d" 'pocket-reader - "e" 'pocket-reader-excerpt - "f" 'pocket-reader-toggle-favorite - "l" 'pocket-reader-limit - "m" 'pocket-reader-toggle-mark - "o" 'pocket-reader-more - "q" 'quit-window - "s" 'pocket-reader-search - "u" 'pocket-reader-unmark-all - "t a" 'pocket-reader-add-tags - "t r" 'pocket-reader-remove-tags - "t s" 'pocket-reader-tag-search - "t t" 'pocket-reader-set-tags - - "g s" 'pocket-reader-resort - "g r" 'pocket-reader-refresh)) -#+end_src - -Use these special keywords when searching: - - - =:*=, =:favorite= Return favorited items. - - =:archive= Return archived items. - - =:unread= Return unread items (default). - - =:all= Return all items. - - =:COUNT= Return at most /COUNT/ (a number) items. This limit persists until you start a new search. - - =:t:TAG=, =t:TAG= Return items with /TAG/ (you can search for one tag at a time, a limitation of the Pocket API). -*** External Browsing -Browsing on a work laptop is a bit different. According to [[http://ergoemacs.org/emacs/emacs_set_default_browser.html][this page]], I can set a /default browser/ for different URLs, which is great, as I can launch my browser for personal browsing, or another browser for work access, or even EWW. To make this clear, I'm using the abstraction associated with [[https://github.com/rolandwalker/osx-browse][osx-browse]]: -#+begin_src emacs-lisp - (use-package osx-browse - :init - (setq browse-url-handlers - '(("docs\\.google\\.com" . osx-browse-url-personal) - ("grafana.com" . osx-browse-url-personal) - ("dndbeyond.com" . osx-browse-url-personal) - ("tabletopaudio.com" . osx-browse-url-personal) - ("youtu.be" . osx-browse-url-personal) - ("youtube.com" . osx-browse-url-personal) - ("." . eww-browse-url))) - - :config - (defun osx-browse-url-personal (url &optional new-window browser focus) - "Open URL in Firefox for my personal surfing. - The parameters, URL, NEW-WINDOW, and FOCUS are as documented in - the function, `osx-browse-url'." - (interactive (osx-browse-interactive-form)) - (cl-callf or browser "org.mozilla.Firefox") - (osx-browse-url url new-window browser focus))) -#+end_src -** Dirvish -The [[https://github.com/alexluigit/dirvish][dirvish]] project aims to be a better =dired=. And since the =major-mode= is still =dired-mode=, the decades of finger memory isn’t lost. For people starting to use =dired=, most commands are pretty straight-forward (and Prot did a pretty good [[https://www.youtube.com/watch?v=5dlydii7tAU][introduction]] to it), but to remind myself, keep in mind: - - - ~%~ :: will /mark/ a bunch of files based on a regular expression - - ~m~ :: marks a single file - - ~d~ :: marks a file to delete, type ~x~ to follow-through on all files marked for deletion. - - ~u~ :: un-mark a file, or type ~!~ to un-mark all - - ~t~ :: to toggle the marked files. Keep files with =xyz= extension? Mark those with ~%~, and then ~t~ toggle. - - ~C~ :: copy the current file or all marked files - - ~R~ :: rename/move the current file or all marked files - - ~M~ :: change the mode (=chmod=) of current or marked files, accepts symbols, like =a+x= - -Note that =dired= has /two marks/ … one is a general mark, and the other is specifically a mark of files to delete. - -Dirvish does require the following supporting programs, but I’ve already got those puppies installed: -#+begin_src sh - brew install coreutils fd poppler ffmpegthumbnailer mediainfo imagemagick -#+end_src - -I’m beginning with dirvish to use the [[https://github.com/alexluigit/dirvish/blob/main/docs/CUSTOMIZING.org][sample configuration]] and change it: -#+begin_src emacs-lisp - (use-package dirvish - :straight (:host github :repo "alexluigit/dirvish") - :init - (dirvish-override-dired-mode) - - :custom - (dirvish-quick-access-entries - '(("h" "~/" "Home") - ("p" "~/personal" "Personal") - ("p" "~/projects" "Projects") - ("t" "~/technical" "Technical") - ("w" "~/website" "Website") - ("d" "~/Downloads/" "Downloads"))) - - :config - ;; This setting is like `treemacs-follow-mode' where the buffer - ;; changes based on the current file. Not sure if I want this: - ;; (dirvish-side-follow-mode) - - (setq dirvish-mode-line-format - '(:left (sort symlink) :right (omit yank index))) - (setq dirvish-attributes - '(all-the-icons file-time file-size collapse subtree-state vc-state git-msg)) - - (setq delete-by-moving-to-trash t - dired-auto-revert-buffer t) - - ;; With `ls' as an alias, and `gls' available on _some_ of my systems, I dont: - ;; (setq insert-directory-program "gls") - ;; And instead use Emacs' built-in directory lister: - (setq insert-directory-program nil) - (setq ls-lisp-use-insert-directory-program nil) - (require 'ls-lisp) - (setq dired-listing-switches - "-l --almost-all --human-readable --group-directories-first --no-group") - - (set-face-attribute 'dirvish-hl-line nil :background "darkmagenta")) -#+end_src -While in =dirvish-mode=, we can rebind some keys: -#+begin_src emacs-lisp - (use-package dirvish - :bind - (:map dirvish-mode-map ; Dirvish inherits `dired-mode-map' - ("a" . dirvish-quick-access) - ("f" . dirvish-file-info-menu) - ("y" . dirvish-yank-menu) - ("N" . dirvish-narrow) - ("^" . dirvish-history-last) - ("h" . dirvish-history-jump) ; remapped `describe-mode' - ("q" . dirvish-quit) - ("s" . dirvish-quicksort) ; remapped `dired-sort-toggle-or-edit' - ("v" . dirvish-vc-menu) ; remapped `dired-view-file' - ("TAB" . dirvish-subtree-toggle) - ("M-f" . dirvish-history-go-forward) - ("M-b" . dirvish-history-go-backward) - ("M-l" . dirvish-ls-switches-menu) - ("M-m" . dirvish-mark-menu) - ("M-t" . dirvish-layout-toggle) - ("M-s" . dirvish-setup-menu) - ("M-e" . dirvish-emerge-menu) - ("M-j" . dirvish-fd-jump))) -#+end_src -** ediff -Love me ediff, but with monitors that are wider than they are tall, let’s put the diffs side-by-side: -#+begin_src emacs-lisp - (setq ediff-split-window-function 'split-window-horizontally) -#+end_src -Frames, er, windows, are actually annoying for me, as Emacs is always in full-screen mode. -#+begin_src emacs-lisp - (setq ediff-window-setup-function 'ediff-setup-windows-plain) -#+end_src -When =ediff= is finished, it leaves the windows /borked/. This is annoying, but according to [[http://yummymelon.com/devnull/surprise-and-emacs-defaults.html][this essay]], we can fix it: -#+begin_src emacs-lisp - (defvar my-ediff-last-windows nil - "Session for storing window configuration before calling `ediff'.") - - (defun my-store-pre-ediff-winconfig () - "Store `current-window-configuration' in variable `my-ediff-last-windows'." - (setq my-ediff-last-windows (current-window-configuration))) - - (defun my-restore-pre-ediff-winconfig () - "Restore window configuration to stored value in `my-ediff-last-windows'." - (set-window-configuration my-ediff-last-windows)) - - (add-hook 'ediff-before-setup-hook #'my-store-pre-ediff-winconfig) - (add-hook 'ediff-quit-hook #'my-restore-pre-ediff-winconfig) -#+end_src -** Annotations -Let's try [[https://github.com/bastibe/annotate.el][annotate-mode]], which allows you to drop "notes" and then move to them (yes, serious overlap with bookmarks, which we will return to). - -#+begin_src emacs-lisp - (use-package annotate - :config - (ha-leader - "t A" '("annotations" . annotate-mode) - - "n" '(:ignore t :which-key "notes") - "n a" '("toggle mode" . annotate-mode) - "n n" '("annotate" . annotate-annotate) - "n d" '("delete" . annotate-delete) - "n s" '("summary" . annotate-show-annotation-summary) - "n j" '("next" . annotate-goto-next-annotation) - "n k" '("prev" . annotate-goto-previous-annotation) - - ;; If a shift binding isn't set, it defaults to non-shift version - ;; Use SPC N N to jump to the next error: - "n N" '("next error" . flycheck-next-error))) -#+end_src -Keep the annotations simple, almost /tag-like/, and then the summary allows you to display them. -** Keepass -Use the [[https://github.com/ifosch/keepass-mode][keepass-mode]] to view a /read-only/ version of my Keepass file in Emacs: -#+begin_src emacs-lisp - (use-package keepass-mode) -#+end_src -When having your point on a key entry, you can copy fields to kill-ring using: - - ~u~ :: URL - - ~b~ :: user name - - ~c~ :: password - -** Demo It -Making demonstrations /within/ Emacs with my [[https://github.com/howardabrams/demo-it][demo-it]] project. While on MELPA, I want to use my own cloned version to make sure I can keep debugging it. -#+begin_src emacs-lisp - (use-package demo-it - :straight (:local-repo "~/other/demo-it") - ;; :straight (:host github :repo "howardabrams/demo-it") - :commands (demo-it-create demo-it-start)) -#+end_src -** PDF Viewing -Why not [[https://github.com/politza/pdf-tools][view PDF files]] better? If you have standard build tools installed on your system, run [[help:pdf-tools-install][pdf-tools-install]], as this command will an =epdfinfo= program to PDF displays. - -#+begin_src emacs-lisp - (use-package pdf-tools - :mode ("\\.pdf\\'" . pdf-view-mode) - :init - (if (ha-running-on-macos?) - (setq pdf-info-epdfinfo-program "/opt/homebrew/bin/epdfinfo") - (setq pdf-info-epdfinfo-program "/usr/local/bin/epdfinfo")) - :general - (:states 'normal :keymaps 'pdf-view-mode-map - "gp" 'pdf-view-goto-page - ">" 'doc-view-fit-window-to-page)) -#+end_src - -Make sure the [[help:pdf-info-check-epdfinfo][pdf-info-check-epdfinfo]] function works. * Technical Artifacts :noexport: Let's provide a name so we can =require= this file: #+begin_src emacs-lisp :exports none diff --git a/screenshots/projects-hydra.png b/screenshots/projects-hydra.png new file mode 100644 index 0000000000000000000000000000000000000000..caba04054082f3828c607821e04c040fb6280eb6 GIT binary patch literal 82384 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 literal 0 HcmV?d00001 diff --git a/support/hamacs-logo.png b/support/hamacs-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..765f186ab332be6b63107cf63eaa4c2fa4414175 GIT binary patch literal 9633 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 X9m6QU5){Qb00000NkvXXu0mjfZePrV literal 0 HcmV?d00001