TeX-source-correlate-start-server t)\r
\r
(add-hook 'TeX-after-compilation-finished-functions\r
- #'TeX-revert-document-buffer)\r
+ #'TeX-revert-document-buffer)\r
#+END_SRC\r
** CSV Mode\r
#+BEGIN_SRC emacs-lisp\r
(sly-connect "localhost" 4004))\r
\r
(setq inferior-lisp-program "sbcl"\r
- sly-net-coding-system 'utf-8-unix\r
- sly-command-switch-to-existing-lisp 'always)\r
+ sly-net-coding-system 'utf-8-unix\r
+ sly-command-switch-to-existing-lisp 'always)\r
\r
(let ((core (expand-file-name "~/sbcl.core-for-sly")))\r
- (when (file-exists-p core)\r
- (setq sly-lisp-implementations (list `(sbcl ("sbcl" "--core" ,core))))))\r
+ (when (file-exists-p core)\r
+ (setq sly-lisp-implementations (list `(sbcl ("sbcl" "--core" ,core))))))\r
\r
(with-eval-after-load 'sly-mrepl\r
- (keymap-set sly-mrepl-mode-map ")" (re/send-on-close-paren #'sly-mrepl-return))\r
- (keymap-set sly-mrepl-mode-map "]" (re/balance-and-eval-sexp #'sly-mrepl-return))\r
- (keymap-set sly-mrepl-mode-map "C-c q" #'re/sly-quit-current-lisp))\r
+ (keymap-set sly-mrepl-mode-map ")" (re/send-on-close-paren #'sly-mrepl-return))\r
+ (keymap-set sly-mrepl-mode-map "]" (re/balance-and-eval-sexp #'sly-mrepl-return))\r
+ (keymap-set sly-mrepl-mode-map "C-c q" #'re/sly-quit-current-lisp))\r
#+END_SRC\r
*** Eldoc settings\r
Sly really doesn't play well with elodc in the minibuffer, so here are some settings to make it better.\r
#+BEGIN_SRC emacs-lisp\r
(add-to-list 'display-buffer-alist\r
- '("^\\*eldoc" display-buffer-in-direction\r
- (direction . 'down)\r
- (window-height . 4)))\r
+ '("^\\*eldoc" display-buffer-in-direction\r
+ (direction . 'down)\r
+ (window-height . 4)))\r
(keymap-global-set "C-c d" #'eldoc) ; force eldoc to show in minibuffer\r
(keymap-global-set "C-c D" #'eldoc-doc-buffer) ; open eldoc buffer when it's getting spammed\r
#+END_SRC\r
**** Agenda settings\r
#+BEGIN_SRC emacs-lisp\r
(setq org-agenda-files (append '("~/org/")\r
- (file-expand-wildcards "~/projects/*/")\r
- (file-expand-wildcards "~/.emacs.d/config.org"))\r
+ (file-expand-wildcards "~/projects/*/")\r
+ (file-expand-wildcards "~/.emacs.d/config.org"))\r
org-refile-targets '((nil :maxlevel . 9)\r
- (org-agenda-files :maxlevel . 9))\r
+ (org-agenda-files :maxlevel . 9))\r
org-refile-use-outline-path 'file\r
org-refile-allow-creating-parent-nodes 'confirm\r
org-tag-alist '((:startgroup)\r
- ("call" . ?c)\r
- ("net" . ?n)\r
- (:endgroup)\r
- (:startgroup)\r
- ("home" . ?h)\r
- ("office" . ?o)\r
- ("errand" . ?e)\r
- ("vps" . ?v)\r
- (:endgroup))\r
+ ("call" . ?c)\r
+ ("net" . ?n)\r
+ (:endgroup)\r
+ (:startgroup)\r
+ ("home" . ?h)\r
+ ("office" . ?o)\r
+ ("errand" . ?e)\r
+ ("vps" . ?v)\r
+ (:endgroup))\r
org-todo-keywords '((sequence "TODO(t)" "WAITING(w@)" "|" "DONE(d)" "BELAYED(b@)" "GIVEN(g@)")\r
- (sequence "MEETING(m)" "|" "MET(M)"))\r
+ (sequence "MEETING(m)" "|" "MET(M)"))\r
org-todo-keyword-faces '(("WAITING" :foreground "#e85400" :weight bold) ; alert orange\r
- ("MEETING" :foreground "#315e9a" :weight bold)) ; precaution blue\r
+ ("MEETING" :foreground "#315e9a" :weight bold)) ; precaution blue\r
org-agenda-restore-windows-after-quit t\r
org-agenda-start-on-weekday nil\r
org-agenda-span 'day\r
org-deadline-warning-days 30\r
org-agenda-window-setup 'current-window\r
org-agenda-time-grid '((daily today remove-match)\r
- (800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000)\r
- " -----"\r
- "")\r
+ (800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 2000)\r
+ " -----"\r
+ "")\r
org-agenda-prefix-format '((agenda . " %?-12t% s")\r
- (todo . " ")\r
- (tags . " ")\r
- (search . " "))\r
+ (todo . " ")\r
+ (tags . " ")\r
+ (search . " "))\r
org-agenda-scheduled-leaders '("Booked: " "Booked %dd. ago: ")\r
org-agenda-deadline-leaders '("Deadline: " "In %dd.: " "Died %dd. ago: ")\r
org-read-date-prefer-future 'time\r
\r
(defvar *re/org-agenda-undertakings*\r
'(tags "CATEGORY=\"undertakings\"" ((org-agenda-skip-function\r
- '(org-agenda-skip-entry-if 'notregexp "^\\* "))\r
- (org-agenda-overriding-header "UNDERTAKIŊS:"))))\r
+ '(org-agenda-skip-entry-if 'notregexp "^\\* "))\r
+ (org-agenda-overriding-header "UNDERTAKIŊS:"))))\r
\r
(defvar *re/org-agenda-waiting*\r
'(todo "WAITING" ((org-agenda-overriding-header "WAITIŊ:"))))\r
\r
(setq org-agenda-custom-commands `(("i" "Inbox" ,@*re/org-agenda-inbox*)\r
- ("n" "Next Actions" ,@*re/org-agenda-todo*)\r
- ("u" "Undertakings" ,@*re/org-agenda-undertakings*)\r
- ("w" "Waiting" ,@*re/org-agenda-waiting*)\r
- ("o" "Overview" (,*re/org-agenda-inbox*\r
- ,,*re/org-agenda-todo*\r
- ,,*re/org-agenda-waiting*\r
- ,,*re/org-agenda-undertakings*))))\r
+ ("n" "Next Actions" ,@*re/org-agenda-todo*)\r
+ ("u" "Undertakings" ,@*re/org-agenda-undertakings*)\r
+ ("w" "Waiting" ,@*re/org-agenda-waiting*)\r
+ ("o" "Overview" (,*re/org-agenda-inbox*\r
+ ,,*re/org-agenda-todo*\r
+ ,,*re/org-agenda-waiting*\r
+ ,,*re/org-agenda-undertakings*))))\r
#+END_SRC\r
**** Capture Templates\r
#+BEGIN_SRC emacs-lisp\r
(setq org-capture-templates '(("i" "Inbox" entry\r
- (file "inbox.org")\r
- "* %^{Description}\n%U\n%?"\r
- :prepend t)\r
- ("n" "Next Action" entry\r
- (file "next.org")\r
- "* TODO %^{Description}\n%U\n%?"\r
- :prepend t)\r
- ("u" "Undertaking" entry\r
- (file "undertakings.org")\r
- "* %^{Description}\n%U\n%?"\r
- :prepend t)\r
- ("m" "Meeting" entry\r
- (file "meetings.org")\r
- "* MEETING %^{Description}\n%^{Scheduled:}T\n%?"\r
- :prepend t)\r
- ("p" "Phone Call" entry\r
- (file "meetings.org")\r
- "* %^{Description} :call:\n%U\n%?"\r
- :prepend t)\r
- ("t" "Note" entry\r
- (file "notes.org")\r
- "* %^{Description}\n%U\n%?"\r
- :prepend t)))\r
+ (file "inbox.org")\r
+ "* %^{Description}\n%U\n%?"\r
+ :prepend t)\r
+ ("n" "Next Action" entry\r
+ (file "next.org")\r
+ "* TODO %^{Description}\n%U\n%?"\r
+ :prepend t)\r
+ ("u" "Undertaking" entry\r
+ (file "undertakings.org")\r
+ "* %^{Description}\n%U\n%?"\r
+ :prepend t)\r
+ ("m" "Meeting" entry\r
+ (file "meetings.org")\r
+ "* MEETING %^{Description}\n%^{Scheduled:}T\n%?"\r
+ :prepend t)\r
+ ("p" "Phone Call" entry\r
+ (file "meetings.org")\r
+ "* %^{Description} :call:\n%U\n%?"\r
+ :prepend t)\r
+ ("t" "Note" entry\r
+ (file "notes.org")\r
+ "* %^{Description}\n%U\n%?"\r
+ :prepend t)))\r
#+END_SRC\r
*** IDs\r
#+BEGIN_SRC emacs-lisp\r
org-id-method 'ts\r
org-clone-delete-id t\r
org-attach-id-to-path-function-list '(org-attach-id-ts-folder-format\r
- org-attach-id-uuid-folder-format))\r
+ org-attach-id-uuid-folder-format))\r
\r
(defun re/org-save-all ()\r
"Save all `org-agenda-files' without user confirmation."\r
(interactive)\r
(message "Saving all org-agenda-files buffers...")\r
(save-some-buffers t\r
- (lambda ()\r
- (when (member (buffer-file-name) org-agenda-files) t)))\r
+ (lambda ()\r
+ (when (member (buffer-file-name) org-agenda-files) t)))\r
(message "Saving all org-agenda-files buffers... done"))\r
\r
(advice-add 'org-refile :after (lambda (&rest _) (re/org-save-all)))\r
Shows the trash file as a dired buffer\r
#+BEGIN_SRC emacs-lisp\r
(setq trashed-action-confirmer 'y-or-n-p\r
- trashed-use-header-line t\r
- trashed-sort-key '("Date deleted" . t)\r
- trashed-date-format "%Y-%m-%d %H:%M:%S")\r
+ trashed-use-header-line t\r
+ trashed-sort-key '("Date deleted" . t)\r
+ trashed-date-format "%Y-%m-%d %H:%M:%S")\r
#+END_SRC\r
** Use mu4e on my home pcs\r
#+BEGIN_SRC emacs-lisp\r
(when (eq system-type 'gnu/linux)\r
(with-eval-after-load 'mu4e\r
(setq mail-user-agent 'message-user-agent\r
- message-send-mail-function 'smtpmail-send-it\r
- message-citation-line-format "Quoth %f :\n"\r
- smtpmail-default-smtp-server "mail.earman.xyz"\r
- smtpmail-smtp-server "mail.earman.xyz"\r
- smtpmail-smtp-service 587\r
- smtpmail-stream-type 'starttls\r
- smtpmail-local-domain "earman.xyz"\r
- smtpmail-queue-mail nil\r
- smtpmail-queue-dir "~/mail/Outbox/cur"\r
- user-mail-address "iv@earman.xyz"\r
- user-full-name "Rush N. Earman IV"\r
- message-signature "Rush Earman IV, PE"\r
- message-kill-buffer-on-exit t\r
- mu4e-get-mail-command "mbsync -a"\r
- mu4e-update-interval (* 10 60)\r
- mu4e-change-filenames-when-moving t\r
- mu4e-use-fancy-chars t\r
- mu4e-attachment-dir "~/downloads"\r
- mu4e-compose-reply-to-address "iv@earman.xyz"\r
- mu4e-maildir "~/mail"\r
- mu4e-drafts-folder "/Drafts"\r
- mu4e-sent-folder "/Sent"\r
- mu4e-trash-folder "/Trash"\r
- mu4e-maildir-shortcuts '((:maildir "/Inbox" :key ?i)\r
- (:maildir "/Sent" :key ?s)\r
- (:maildir "/Trash" :key ?t)\r
- (:maildir "/Drafts" :key ?d)))))\r
+ message-send-mail-function 'smtpmail-send-it\r
+ message-citation-line-format "Quoth %f :\n"\r
+ smtpmail-default-smtp-server "mail.earman.xyz"\r
+ smtpmail-smtp-server "mail.earman.xyz"\r
+ smtpmail-smtp-service 587\r
+ smtpmail-stream-type 'starttls\r
+ smtpmail-local-domain "earman.xyz"\r
+ smtpmail-queue-mail nil\r
+ smtpmail-queue-dir "~/mail/Outbox/cur"\r
+ user-mail-address "iv@earman.xyz"\r
+ user-full-name "Rush N. Earman IV"\r
+ message-signature "Rush Earman IV, PE"\r
+ message-kill-buffer-on-exit t\r
+ mu4e-get-mail-command "mbsync -a"\r
+ mu4e-update-interval (* 10 60)\r
+ mu4e-change-filenames-when-moving t\r
+ mu4e-use-fancy-chars t\r
+ mu4e-attachment-dir "~/downloads"\r
+ mu4e-compose-reply-to-address "iv@earman.xyz"\r
+ mu4e-maildir "~/mail"\r
+ mu4e-drafts-folder "/Drafts"\r
+ mu4e-sent-folder "/Sent"\r
+ mu4e-trash-folder "/Trash"\r
+ mu4e-maildir-shortcuts '((:maildir "/Inbox" :key ?i)\r
+ (:maildir "/Sent" :key ?s)\r
+ (:maildir "/Trash" :key ?t)\r
+ (:maildir "/Drafts" :key ?d)))))\r
#+END_SRC\r
** Minions\r
Remove all minor modes from the mode-line, and show /all/ of them in the minor mode menu\r
Return to initial position after. Arg works on `mark-defun'."\r
(interactive "P")\r
(save-excursion (mark-defun arg)\r
- (comment-region (region-beginning) (region-end))))\r
+ (comment-region (region-beginning) (region-end))))\r
\r
(keymap-global-set "C-M-;" #'re/comment-defun)\r
\r
#+BEGIN_SRC emacs-lisp\r
;; Tabs\r
(setq-default indent-tabs-mode t\r
- tab-width 8\r
- backward-delete-char-untabify-method nil)\r
+ tab-width 8\r
+ backward-delete-char-untabify-method nil)\r
\r
(advice-add 'indent-to :around\r
- (lambda (orig-fun column &rest args)\r
- (when indent-tabs-mode\r
- (setq column (* tab-width (round column tab-width))))\r
- (apply orig-fun column args)))\r
+ (lambda (orig-fun column &rest args)\r
+ (when indent-tabs-mode\r
+ (setq column (* tab-width (round column tab-width))))\r
+ (apply orig-fun column args)))\r
\r
(dolist (indent-level '(c-basic-offset cperl-indent-level LaTeX-indent-level))\r
(defvaralias indent-level 'tab-width))\r
* Buffer dealiŋ\r
#+BEGIN_SRC emacs-lisp\r
(setq-default indicate-empty-lines t\r
- truncate-lines t\r
- fill-column 78)\r
+ truncate-lines t\r
+ fill-column 78)\r
\r
(dolist (hook '(text-mode-hook LaTeX-mode-hook))\r
(add-hook hook #'visual-line-mode))\r
(interactive "^")\r
(let ((oldpos (point)))\r
(if (equal major-mode 'org-mode)\r
- (org-beginning-of-line)\r
+ (org-beginning-of-line)\r
(progn\r
- (when visual-line-mode (beginning-of-visual-line 1))\r
- (skip-syntax-forward " " (line-end-position))\r
- (backward-prefix-chars)))\r
+ (when visual-line-mode (beginning-of-visual-line 1))\r
+ (skip-syntax-forward " " (line-end-position))\r
+ (backward-prefix-chars)))\r
(and (= oldpos (point))\r
- (let ((newpos (point)))\r
- (back-to-indentation)\r
- (and (= newpos (point)) (beginning-of-line))))))\r
+ (let ((newpos (point)))\r
+ (back-to-indentation)\r
+ (and (= newpos (point)) (beginning-of-line))))))\r
\r
(keymap-global-set "<remap> <move-beginning-of-line>" #'re/smart-beginning-of-line)\r
(keymap-set visual-line-mode-map "C-a" #'re/smart-beginning-of-line)\r
(interactive "^")\r
(let ((oldpos (point)))\r
(if (equal major-mode 'org-mode)\r
- (org-end-of-line)\r
+ (org-end-of-line)\r
(when visual-line-mode\r
- (end-of-visual-line 1)))\r
+ (end-of-visual-line 1)))\r
(and (= oldpos (point)) (move-end-of-line nil))))\r
\r
(keymap-global-set "<remap> <move-end-of-line>" #'re/smart-end-of-line)\r
(defun re/add-region-to-search-ring ()\r
(when (use-region-p)\r
(add-to-history 'search-ring\r
- (buffer-substring (region-beginning) (region-end)))\r
+ (buffer-substring (region-beginning) (region-end)))\r
(deactivate-mark)))\r
\r
(defun re/isearch-forward-use-region ()\r
Stolen from https://www.masteringemacs.org/article/fixing-mark-commands-transient-mark-mode"\r
(interactive "P")\r
(exchange-point-and-mark (if (and transient-mark-mode (not mark-active))\r
- (not arg)\r
- arg)))\r
+ (not arg)\r
+ arg)))\r
\r
(keymap-global-set "<remap> <exchange-point-and-mark>" #'re/exchange-point-and-mark-maybe-activate)\r
\r
(midnight-mode t)\r
(setq clean-buffer-list-delay-general 1)\r
(dolist (never-re '("\\` \\*tramp/.*\\'"\r
- "\\` \\*eshell.*\\'"))\r
+ "\\` \\*eshell.*\\'"))\r
(add-to-list 'clean-buffer-list-kill-never-regexps never-re))\r
(save-place-mode 1)\r
(recentf-mode 1)\r
"Renames the current buffer and the file it is visiting."\r
(interactive)\r
(let ((name (buffer-name))\r
- (filename (buffer-file-name)))\r
+ (filename (buffer-file-name)))\r
(if (not (and filename (file-exists-p filename)))\r
- (error "Buffer '%s' is not visiting a file!" name)\r
+ (error "Buffer '%s' is not visiting a file!" name)\r
(let ((new-name (read-file-name "New name: " filename)))\r
- (if (get-buffer new-name)\r
- (error "A buffer named '%s' already exists!" new-name)\r
- (rename-file filename new-name 1)\r
- (rename-buffer new-name)\r
- (set-visited-file-name new-name)\r
- (set-buffer-modified-p nil)\r
- (message "File '%s' successfully renamed to '%s'"\r
- name\r
- (file-name-nondirectory new-name)))))))\r
+ (if (get-buffer new-name)\r
+ (error "A buffer named '%s' already exists!" new-name)\r
+ (rename-file filename new-name 1)\r
+ (rename-buffer new-name)\r
+ (set-visited-file-name new-name)\r
+ (set-buffer-modified-p nil)\r
+ (message "File '%s' successfully renamed to '%s'"\r
+ name\r
+ (file-name-nondirectory new-name)))))))\r
\r
(keymap-global-set "C-x C-r" #'re/rename-current-buffer-file)\r
\r
(defun re/get-file-modified-time (filepath)\r
(interactive)\r
(format-time-string "%Y-%m-%d-%H%M"\r
- (file-attribute-modification-time (file-attributes filepath))))\r
+ (file-attribute-modification-time (file-attributes filepath))))\r
\r
(defun re/filename-inject-mod-time (filepath)\r
(interactive)\r
(concat (file-name-sans-extension filepath)\r
- "_"\r
- (re/get-file-modified-time filepath)\r
- (file-name-extension filepath t)))\r
+ "_"\r
+ (re/get-file-modified-time filepath)\r
+ (file-name-extension filepath t)))\r
\r
(defun re/copy-with-mod-time (&optional filepath)\r
(interactive)\r
(let ((filepath (if (eq major-mode 'dired-mode)\r
- (dired-get-filename t)\r
- (when (null filepath)\r
- (read-file-name "File to copy with datestring: "\r
- default-directory\r
- nil\r
- t\r
- nil)))))\r
+ (dired-get-filename t)\r
+ (when (null filepath)\r
+ (read-file-name "File to copy with datestring: "\r
+ default-directory\r
+ nil\r
+ t\r
+ nil)))))\r
(copy-file filepath (re/filename-inject-mod-time filepath ) nil t t t)))\r
#+END_SRC\r
* Dired\r
"In dired mode, visit the file at the cursor in the right/below/left/above window."\r
(interactive)\r
(let* ((file-or-dir (dired-get-file-for-visit)) ;; get the file at cursor\r
- (buffer (find-file-noselect file-or-dir))) ;; load the file into a buffer\r
+ (buffer (find-file-noselect file-or-dir))) ;; load the file into a buffer\r
(let ((window ;; figure out the window to use\r
- (cond ((get-buffer-window buffer (selected-frame)))\r
- ((window-in-direction 'right)) ;; try window in each direction\r
- ((window-in-direction 'below)) ;; and default to right\r
- ((window-in-direction 'left)) ;; if no window found.\r
- ((window-in-direction 'above))\r
- (t (split-window-sensibly (selected-window))))))\r
+ (cond ((get-buffer-window buffer (selected-frame)))\r
+ ((window-in-direction 'right)) ;; try window in each direction\r
+ ((window-in-direction 'below)) ;; and default to right\r
+ ((window-in-direction 'left)) ;; if no window found.\r
+ ((window-in-direction 'above))\r
+ (t (split-window-sensibly (selected-window))))))\r
(window--display-buffer buffer window 'window nil)\r
window)))\r
\r
"Open dired in a new frame."\r
(interactive)\r
(re/open-with-new-frame "DIRED"\r
- #'(lambda () (interactive) (dired default-directory))))\r
+ #'(lambda () (interactive) (dired default-directory))))\r
\r
(keymap-global-set "<f8>" #'re/dired-new-frame)\r
\r
"Change sort order of dired dir."\r
(interactive)\r
(let ((smenu '(("name" . "-Ahl")\r
- ("mdate" . "-Ahlt")\r
- ("adate" . "-Ahltu")\r
- ("size" . "-AhlS")\r
- ("dir" . "-Ahl --group-directories-first")))\r
- ssortBy)\r
+ ("mdate" . "-Ahlt")\r
+ ("adate" . "-Ahltu")\r
+ ("size" . "-AhlS")\r
+ ("dir" . "-Ahl --group-directories-first")))\r
+ ssortBy)\r
(setq ssortBy (completing-read "Sort by (default name):"\r
- smenu\r
- nil\r
- t\r
- nil\r
- nil\r
- (caar smenu)))\r
+ smenu\r
+ nil\r
+ t\r
+ nil\r
+ nil\r
+ (caar smenu)))\r
(dired-sort-other (cdr (assoc ssortBy smenu)))))\r
\r
(defun re/open-file-external (file)\r
(interactive)\r
(let ((process-connection-type nil))\r
(cond ((eq system-type 'windows-nt)\r
- (w32-shell-execute "open"\r
- (replace-regexp-in-string "/" "\\\\" file t t)))\r
- ((eq system-type 'gnu/linux)\r
- (start-process "" nil "xdg-open" file))\r
- (t (error "Unable to automatically open this file")))))\r
+ (w32-shell-execute "open"\r
+ (replace-regexp-in-string "/" "\\\\" file t t)))\r
+ ((eq system-type 'gnu/linux)\r
+ (start-process "" nil "xdg-open" file))\r
+ (t (error "Unable to automatically open this file")))))\r
\r
(defun re/dired-open-externally ()\r
"Open the file at point in an external program."\r
dired-kill-when-opening-new-dired-buffer t)\r
\r
(add-hook 'dired-mode-hook\r
- (lambda ()\r
- (keymap-set dired-mode-map "o" #'re/dired-display-direction)\r
- (keymap-set dired-mode-map "z" #'dired-do-compress-to)\r
- (keymap-set dired-mode-map "c" #'dired-do-chmod)\r
- (keymap-set dired-mode-map "r" #'dired-do-rename)\r
- (keymap-set dired-mode-map "M" #'dired-do-rename)\r
- (keymap-set dired-mode-map "s" #'re/dired-sort)\r
- (keymap-set dired-mode-map "F" #'re/dired-find-marked-files)\r
- (keymap-set dired-mode-map "M-C" #'re/copy-with-mod-time)\r
- (keymap-set dired-mode-map "b" #'re/dired-open-externally)\r
- (keymap-set dired-mode-map "B" #'re/dired-open-marked-externally)\r
- (dired-hide-details-mode t)\r
- (hl-line-mode)))\r
+ (lambda ()\r
+ (keymap-set dired-mode-map "o" #'re/dired-display-direction)\r
+ (keymap-set dired-mode-map "z" #'dired-do-compress-to)\r
+ (keymap-set dired-mode-map "c" #'dired-do-chmod)\r
+ (keymap-set dired-mode-map "r" #'dired-do-rename)\r
+ (keymap-set dired-mode-map "M" #'dired-do-rename)\r
+ (keymap-set dired-mode-map "s" #'re/dired-sort)\r
+ (keymap-set dired-mode-map "F" #'re/dired-find-marked-files)\r
+ (keymap-set dired-mode-map "M-C" #'re/copy-with-mod-time)\r
+ (keymap-set dired-mode-map "b" #'re/dired-open-externally)\r
+ (keymap-set dired-mode-map "B" #'re/dired-open-marked-externally)\r
+ (dired-hide-details-mode t)\r
+ (hl-line-mode)))\r
#+END_SRC\r
* Bookmarks\r
#+BEGIN_SRC emacs-lisp\r
(setq touch-screen-display-keyboard t)\r
(set-frame-parameter nil 'tool-bar-position 'bottom)\r
(define-key key-translation-map\r
- (kbd "<volume-up>")\r
- (kbd "C-i"))\r
+ (kbd "<volume-up>")\r
+ (kbd "C-i"))\r
(define-key key-translation-map\r
- (kbd "<volume-down>")\r
- 'event-apply-meta-modifier)\r
+ (kbd "<volume-down>")\r
+ 'event-apply-meta-modifier)\r
(modifier-bar-mode 1)\r
(tool-bar-mode 1))\r
(progn\r
mouse-autoselect-window -0.25)\r
\r
(setq-default cursor-type 'hbar\r
- cursor-in-non-selected-windows nil\r
- mode-line-format '("%e"\r
- (:eval (propertize " "\r
- 'face\r
- (when (buffer-modified-p)\r
- 'mode-line-highlight)))\r
- " "\r
- (:eval (if buffer-file-name\r
- (abbreviate-file-name buffer-file-name)\r
- "%b"))\r
- ":%l,%C"\r
- (:eval (propertize "%n " 'face (when (buffer-narrowed-p)\r
- 'mode-line-highlight)))\r
- mode-line-format-right-align\r
- (vc-mode vc-mode)\r
- " "\r
- mode-line-modes\r
- (:eval (number-to-string (line-number-at-pos (point-max))))\r
- " Lines | %Ib "))\r
+ cursor-in-non-selected-windows nil\r
+ mode-line-format '("%e"\r
+ (:eval (propertize " "\r
+ 'face\r
+ (when (buffer-modified-p)\r
+ 'mode-line-highlight)))\r
+ " "\r
+ (:eval (if buffer-file-name\r
+ (abbreviate-file-name buffer-file-name)\r
+ "%b"))\r
+ ":%l,%C"\r
+ (:eval (propertize "%n " 'face (when (buffer-narrowed-p)\r
+ 'mode-line-highlight)))\r
+ mode-line-format-right-align\r
+ (vc-mode vc-mode)\r
+ " "\r
+ mode-line-modes\r
+ (:eval (number-to-string (line-number-at-pos (point-max))))\r
+ " Lines | %Ib "))\r
\r
(setq prettify-symbols-alist '(("lambda" . 955)\r
- ("delta" . 120517)\r
- ("epsilon" . 120518)\r
- ("->" . 8594)\r
- ("<=" . 8804)\r
- (">=" . 8805)))\r
+ ("delta" . 120517)\r
+ ("epsilon" . 120518)\r
+ ("->" . 8594)\r
+ ("<=" . 8804)\r
+ (">=" . 8805)))\r
\r
(global-prettify-symbols-mode t)\r
#+END_SRC\r
show-paren-style 'expression)\r
\r
(setq electric-pair-pairs '((?\" . ?\")\r
- (?\‘ . ?\’)\r
- (?\“ . ?\”)\r
- (?\{ . ?\})\r
- (?\< . ?\>)))\r
+ (?\‘ . ?\’)\r
+ (?\“ . ?\”)\r
+ (?\{ . ?\})\r
+ (?\< . ?\>)))\r
#+END_SRC\r
* Help\r
#+BEGIN_SRC emacs-lisp\r
(interactive)\r
(save-excursion\r
(replace-regexp "^\n+"\r
- "\n"\r
- nil\r
- (point-min)\r
- (point-max))))\r
+ "\n"\r
+ nil\r
+ (point-min)\r
+ (point-max))))\r
\r
(setq require-final-newline t)\r
(add-hook 'before-save-hook #'re/flush-extra-lines)\r
#+BEGIN_SRC emacs-lisp\r
(defconst *alphanumerics*\r
(mapcar #'char-to-string\r
- (append (number-sequence ?a ?z)\r
- (number-sequence ?A ?Z)\r
- (number-sequence ?0 ?9)))\r
+ (append (number-sequence ?a ?z)\r
+ (number-sequence ?A ?Z)\r
+ (number-sequence ?0 ?9)))\r
"List of strings of the upper/lower-case English alphabet, and the single-digit numbers.")\r
\r
(defconst *special-characters*\r
"Select a single character at random to be used in a password.\r
If `no-special-chars' is t, use only alpha-numeric characters."\r
(let ((selected-charset (append *alphanumerics*\r
- (when (null no-special-chars)\r
- ,*special-characters*))))\r
+ (when (null no-special-chars)\r
+ ,*special-characters*))))\r
(elt selected-charset (random (length selected-charset)))))\r
\r
(defun pw-get-chars (password-length &optional no-special-chars)\r
"Generate a list of characters as strings to be made into a password.\r
If `no-special-chars' is t, use only alpha-numeric characters."\r
(append (list (pw-get-char no-special-chars))\r
- (when (> password-length 1)\r
- (pw-get-chars (- password-length 1) no-special-chars))))\r
+ (when (> password-length 1)\r
+ (pw-get-chars (- password-length 1) no-special-chars))))\r
\r
(defun generate-password (password-length &optional no-special-chars)\r
"Combine a list of randomly-selected characters into a single string of length given.\r
Negative password-length (or negative arg) sets `no-special-chars' for `generate-password'."\r
(interactive "p")\r
(let ((len (if (or (null password-length) (= 1 (abs password-length)))\r
- 16\r
- (abs password-length)))\r
- (no-special-p (and (numberp password-length) (< password-length 0))))\r
+ 16\r
+ (abs password-length)))\r
+ (no-special-p (and (numberp password-length) (< password-length 0))))\r
(insert (generate-password len no-special-p))))\r
#+END_SRC\r
** Get a password from a pass(1) entry\r
(with-temp-buffer\r
(insert-file-contents file-path)\r
(if (< line-number 0)\r
- (progn\r
- (goto-char (point-max))\r
- (forward-line line-number))\r
+ (progn\r
+ (goto-char (point-max))\r
+ (forward-line line-number))\r
(progn\r
- (goto-char (point-min))\r
- (forward-line (1- line-number))))\r
+ (goto-char (point-min))\r
+ (forward-line (1- line-number))))\r
(buffer-substring-no-properties (line-beginning-position) (line-end-position))))\r
\r
(defun get-password (&optional filename)\r
(defun totp--hex-decode-string (string)\r
"Hex-decode STRING and return the result as a unibyte string."\r
(apply #'unibyte-string\r
- (seq-map (lambda (s) (hexl-htoi (aref s 0) (aref s 1)))\r
- (seq-partition string 2))))\r
+ (seq-map (lambda (s) (hexl-htoi (aref s 0) (aref s 1)))\r
+ (seq-partition string 2))))\r
\r
(defun totp (string &optional time digits)\r
"Return a TOTP token using the secret hex STRING and current time.\r
TIME is used as counter value instead of current time, if non-nil.\r
DIGITS is the number of pin digits and defaults to 6."\r
(let* ((key-bytes (totp--hex-decode-string (upcase string)))\r
- (counter (truncate (/ (or time (time-to-seconds)) 30)))\r
- (digits (or digits 6))\r
- (format-string (format "%%0%dd" digits))\r
- ;; we have to manually split the 64 bit number (u64 not supported in Emacs 27.2)\r
- (counter-bytes (bindat-pack '((:high u32) (:low u32))\r
- `((:high . ,(ash counter -32)) (:low . ,(logand counter #xffffffff)))))\r
- (mac (gnutls-hash-mac 'SHA1 key-bytes counter-bytes))\r
- (offset (logand (bindat-get-field (bindat-unpack '((:offset u8)) mac 19) :offset) #xf)))\r
+ (counter (truncate (/ (or time (time-to-seconds)) 30)))\r
+ (digits (or digits 6))\r
+ (format-string (format "%%0%dd" digits))\r
+ ;; we have to manually split the 64 bit number (u64 not supported in Emacs 27.2)\r
+ (counter-bytes (bindat-pack '((:high u32) (:low u32))\r
+ `((:high . ,(ash counter -32)) (:low . ,(logand counter #xffffffff)))))\r
+ (mac (gnutls-hash-mac 'SHA1 key-bytes counter-bytes))\r
+ (offset (logand (bindat-get-field (bindat-unpack '((:offset u8)) mac 19) :offset) #xf)))\r
(format format-string\r
- (mod\r
- (logand (bindat-get-field (bindat-unpack '((:totp-pin u32)) mac offset) :totp-pin)\r
- #x7fffffff)\r
- (expt 10 digits)))))\r
+ (mod\r
+ (logand (bindat-get-field (bindat-unpack '((:totp-pin u32)) mac offset) :totp-pin)\r
+ #x7fffffff)\r
+ (expt 10 digits)))))\r
\r
(defconst base32-alphabet\r
(let ((tbl (make-char-table nil)))\r
(dolist (mapping '(("A" . 0) ("B" . 1) ("C" . 2) ("D" . 3)\r
- ("E" . 4) ("F" . 5) ("G" . 6)\r
- ("H" . 7) ("I" . 8) ("J" . 9) ("K" . 10)\r
- ("L" . 11) ("M" . 12) ("N" . 13)\r
- ("O" . 14) ("P" . 15) ("Q" . 16) ("R" . 17)\r
- ("S" . 18) ("T" . 19) ("U" . 20)\r
- ("V" . 21) ("W" . 22) ("X" . 23) ("Y" . 24)\r
- ("Z" . 25) ("2" . 26) ("3" . 27)\r
- ("4" . 28) ("5" . 29) ("6" . 30) ("7" . 31)))\r
+ ("E" . 4) ("F" . 5) ("G" . 6)\r
+ ("H" . 7) ("I" . 8) ("J" . 9) ("K" . 10)\r
+ ("L" . 11) ("M" . 12) ("N" . 13)\r
+ ("O" . 14) ("P" . 15) ("Q" . 16) ("R" . 17)\r
+ ("S" . 18) ("T" . 19) ("U" . 20)\r
+ ("V" . 21) ("W" . 22) ("X" . 23) ("Y" . 24)\r
+ ("Z" . 25) ("2" . 26) ("3" . 27)\r
+ ("4" . 28) ("5" . 29) ("6" . 30) ("7" . 31)))\r
(aset tbl (string-to-char (car mapping)) (cdr mapping)))\r
tbl)\r
"Base-32 mapping table, as defined in RFC 4648.")\r
(setq string (upcase string))\r
(let ((trimmed-array (append (string-trim-right string "=+") nil)))\r
(format "%X" (seq-reduce\r
- (lambda (acc char) (+ (ash acc 5) (aref base32-alphabet char)))\r
- trimmed-array 0))))\r
+ (lambda (acc char) (+ (ash acc 5) (aref base32-alphabet char)))\r
+ trimmed-array 0))))\r
\r
(defun keyfile-string (filename)\r
"Return a string which is the filepath to a `pass(1)' file."\r
(let ((directory "~/.password-store/"))\r
(if (null filename)\r
- (read-file-name "Select a password: " directory nil t nil)\r
+ (read-file-name "Select a password: " directory nil t nil)\r
(concat directory\r
- (if (stringp filename)\r
- filename\r
- (symbol-name filename))\r
- ".gpg"))))\r
+ (if (stringp filename)\r
+ filename\r
+ (symbol-name filename))\r
+ ".gpg"))))\r
\r
(defun get-totp (&optional filename)\r
"Generate a totp code given a file with the secret hex string.\r
(interactive)\r
(if (active-minibuffer-window)\r
(if (minibufferp)\r
- (minibuffer-keyboard-quit)\r
- (abort-recursive-edit))\r
+ (minibuffer-keyboard-quit)\r
+ (abort-recursive-edit))\r
(keyboard-quit)))\r
\r
(keymap-global-set "<remap> <keyboard-quit>" #'re/keyboard-quit) ; Make C-g better\r
Prompt for url and local dir."\r
(interactive)\r
(let* ((url (read-string "Repository URL: "))\r
- (dir (read-string "Local Dir: " (file-name-base url))))\r
+ (dir (read-string "Local Dir: " (file-name-base url))))\r
(vc-git-clone url dir nil)))\r
\r
(keymap-global-set "C-x v C" #'re/vc-clone)\r
Remotes as well when arg."\r
(interactive "P")\r
(let ((default-directory (if (boundp 'vc-dir-directory)\r
- vc-dir-directory\r
- default-directory)))\r
+ vc-dir-directory\r
+ default-directory)))\r
(vc-git-command "*git-branches*"\r
- nil\r
- nil\r
- "branch"\r
- "--verbose"\r
- (when arg "--remotes"))\r
+ nil\r
+ nil\r
+ "branch"\r
+ "--verbose"\r
+ (when arg "--remotes"))\r
(pop-to-buffer "*git-branches*")\r
(goto-char (point-min))\r
(special-mode)))\r
With arg, ask for remote, otherwise fetch all."\r
(interactive "P")\r
(let* ((default-directory (if (boundp 'vc-dir-directory)\r
- vc-dir-directory\r
- default-directory)))\r
+ vc-dir-directory\r
+ default-directory)))\r
(vc-git-command "*vc-fetch*"\r
- nil\r
- nil\r
- "fetch"\r
- (if arg\r
- (read-string "Fetch From: " "origin")\r
- "--all")\r
- "--verbose")\r
+ nil\r
+ nil\r
+ "fetch"\r
+ (if arg\r
+ (read-string "Fetch From: " "origin")\r
+ "--all")\r
+ "--verbose")\r
(pop-to-buffer "*vc-fetch*")\r
(goto-char (point-min))\r
(special-mode)))\r
(keymap-global-set "C-x v f" #'re/vc-fetch)\r
\r
(add-hook 'vc-dir-mode-hook\r
- (lambda ()\r
- (keymap-set vc-dir-mode-map "b b" #'re/vc-show-branches)\r
- (keymap-set vc-dir-mode-map "f" #'re/vc-fetch)\r
- (keymap-set vc-dir-mode-map "k" #'vc-revert)))\r
+ (lambda ()\r
+ (keymap-set vc-dir-mode-map "b b" #'re/vc-show-branches)\r
+ (keymap-set vc-dir-mode-map "f" #'re/vc-fetch)\r
+ (keymap-set vc-dir-mode-map "k" #'vc-revert)))\r
\r
(setq vc-make-backup-files nil\r
vc-handled-backends '(jj Git)\r
Either delete, move forward, or add as many ')' as needed."\r
(let ((distance (re/sexp-unbalanced-count)))\r
(cond ((re/sexp-need-paren-p)\r
- (if (looking-at ")")\r
- (progn\r
- (forward-char)\r
- (re/balance-sexp))\r
- (insert-char 41 distance)))\r
- ((re/sexp-drop-paren-p)\r
- (backward-delete-char distance)))))\r
+ (if (looking-at ")")\r
+ (progn\r
+ (forward-char)\r
+ (re/balance-sexp))\r
+ (insert-char 41 distance)))\r
+ ((re/sexp-drop-paren-p)\r
+ (backward-delete-char distance)))))\r
\r
(defmacro re/balance-and-eval-sexp (executor)\r
"Balance the sexp before point, then call `executor'.\r
\r
(dolist (hook *re/lisp-mode-hooks*)\r
(add-hook hook\r
- (lambda ()\r
- (when (bound-and-true-p acme-mouse-mode) (acme-mouse-mode -1))\r
- (sedit-mouse-mode 1)\r
- (keymap-set lisp-mode-shared-map "C-M-z" #'eval-region)\r
- (keymap-set lisp-mode-shared-map\r
- "C-M-S-q"\r
- #'sedit-auto-prettify-sexp)\r
- (keymap-set lisp-mode-shared-map\r
- "]"\r
- (re/balance-and-eval-sexp #'sedit-auto-prettify-sexp))\r
- (keymap-set lisp-interaction-mode-map\r
- "]"\r
- (re/balance-and-eval-sexp #'eval-print-last-sexp)))))\r
+ (lambda ()\r
+ (when (bound-and-true-p acme-mouse-mode) (acme-mouse-mode -1))\r
+ (sedit-mouse-mode 1)\r
+ (keymap-set lisp-mode-shared-map "C-M-z" #'eval-region)\r
+ (keymap-set lisp-mode-shared-map\r
+ "C-M-S-q"\r
+ #'sedit-auto-prettify-sexp)\r
+ (keymap-set lisp-mode-shared-map\r
+ "]"\r
+ (re/balance-and-eval-sexp #'sedit-auto-prettify-sexp))\r
+ (keymap-set lisp-interaction-mode-map\r
+ "]"\r
+ (re/balance-and-eval-sexp #'eval-print-last-sexp)))))\r
#+END_SRC\r
* IELM\r
Rarely used, but nice to have when I want it.\r
#+BEGIN_SRC emacs-lisp\r
(add-hook 'ielm-mode-hook\r
- (lambda ()\r
- (keymap-set inferior-emacs-lisp-mode-map\r
- "C-l"\r
- #'comint-clear-buffer)\r
- (let ((eval-function #'ielm-send-input))\r
- (keymap-set inferior-emacs-lisp-mode-map\r
- ")"\r
- (re/send-on-close-paren eval-function))\r
- (keymap-set inferior-emacs-lisp-mode-map\r
- "]"\r
- (re/balance-and-eval-sexp eval-function)))))\r
+ (lambda ()\r
+ (keymap-set inferior-emacs-lisp-mode-map\r
+ "C-l"\r
+ #'comint-clear-buffer)\r
+ (let ((eval-function #'ielm-send-input))\r
+ (keymap-set inferior-emacs-lisp-mode-map\r
+ ")"\r
+ (re/send-on-close-paren eval-function))\r
+ (keymap-set inferior-emacs-lisp-mode-map\r
+ "]"\r
+ (re/balance-and-eval-sexp eval-function)))))\r
#+END_SRC\r
* Eshell\r
#+BEGIN_SRC emacs-lisp\r
(delete-char arg)))\r
\r
(add-hook 'eshell-mode-hook\r
- (lambda ()\r
- (keymap-set eshell-mode-map "C-d" #'eshell-quit-or-delete-char)\r
- (let ((eval-function #'eshell-send-input))\r
- (keymap-set eshell-mode-map\r
- ")"\r
- (re/send-on-close-paren eval-function))\r
- (keymap-set eshell-mode-map\r
- "]"\r
- (re/balance-and-eval-sexp eval-function)))))\r
+ (lambda ()\r
+ (keymap-set eshell-mode-map "C-d" #'eshell-quit-or-delete-char)\r
+ (let ((eval-function #'eshell-send-input))\r
+ (keymap-set eshell-mode-map\r
+ ")"\r
+ (re/send-on-close-paren eval-function))\r
+ (keymap-set eshell-mode-map\r
+ "]"\r
+ (re/balance-and-eval-sexp eval-function)))))\r
#+END_SRC\r
* C-mode\r
#+BEGIN_SRC emacs-lisp\r
"Line up argument lists by tabs, not spaces.\r
Stolen from https://kernel.org/doc/html/v4.10/process/coding-style.html"\r
(let* ((anchor (c-langelem-pos c-syntactic-element))\r
- (column (c-langelem-2nd-pos c-syntactic-element))\r
- (offset (- (1+ column) anchor))\r
- (steps (floor offset c-basic-offset)))\r
+ (column (c-langelem-2nd-pos c-syntactic-element))\r
+ (offset (- (1+ column) anchor))\r
+ (steps (floor offset c-basic-offset)))\r
(* (max steps 1) c-basic-offset)))\r
\r
(add-hook 'c-mode-common-hook\r
- (lambda ()\r
- (c-add-style "linux-tabs-only"\r
- '("linux" (c-offsets-alist\r
- (arglist-cont-nonempty\r
- c-lineup-gcc-asm-reg\r
- re/c-lineup-arglist-tabs-only))))))\r
+ (lambda ()\r
+ (c-add-style "linux-tabs-only"\r
+ '("linux" (c-offsets-alist\r
+ (arglist-cont-nonempty\r
+ c-lineup-gcc-asm-reg\r
+ re/c-lineup-arglist-tabs-only))))))\r
\r
(add-hook 'c-mode-hook\r
- (lambda ()\r
- (setq c-backspace-function 'backward-delete-char)\r
- (c-set-style "linux-tabs-only")))\r
+ (lambda ()\r
+ (setq c-backspace-function 'backward-delete-char)\r
+ (c-set-style "linux-tabs-only")))\r
#+END_SRC\r
* Auto-Revert\r
#+BEGIN_SRC emacs-lisp\r