#+ TODO: TODO PLEASE-TEST TESTING PLEASE-DEBUG | DONE
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(prefer-coding-system 'utf-8)
(setenv "LANG" "en_US.UTF-8")
(global-set-key [(control x) (?0)] 'delete-other-windows)
(global-set-key [(control x) (?9)] 'sticky-window-keep-window-visible)
;; (global-set-key (kbd "s-0") 'delete-window)
(global-set-key (kbd "s-1") 'delete-other-windows)
(global-set-key (kbd "s-9") 'sticky-window-keep-window-visible)
(global-set-key (kbd "s-2") 'split-window-vertically)
; (global-set-key (kbd "s-3") 'split-window-horizontally)
(global-set-key (kbd "s-3") 'split-window-left)
Automatically load abbreviations table:
(setq-default abbrev-mode t)
(read-abbrev-file "/Users/jay/emacs/aquamacs-jay/.abbrev_defs")
(setq abbrev-file-name "/Users/jay/emacs/aquamacs-jay/.abbrev_defs")
(setq save-abbrevs t)
(setq save-abbrevs 'silently)
(setq only-global-abbrevs t)
(defun reflash-indentation ()
"Fix spacing on the screen."
(interactive)
(org-indent-mode 1)
(recenter-top-bottom)
(adjust-font-size-for-all-frames)
)
(use-package org-element
:defer
)
(defun org-checkbox-p ()
"Predicate: Checks whether the current line org-checkbox"
(and
;; (org-or-orgalist-p)
(string-match "^\s*\\([-+*]\\|[0-9]+[.\\)]\\)\s\\[.?\\]\s" (or (thing-at-point 'line) ""))))
(defun org-plain-text-list-p ()
"Predicate: Checks whether the current line org-plain-text-list"
(and
;; (org-or-orgalist-p)
(string-match "^\s*\\([-+]\\|\s[*]\\|[0-9]+[.\\)]\\)\s" (or (thing-at-point 'line) ""))))
(setq org-hierarchical-todo-statistics nil)
(defvar maxframe-maximized-p nil "maxframe is in fullscreen mode")
(defun toggle-maxframe ()
"Toggle maximized frame"
(interactive)
(setq maxframe-maximized-p (not maxframe-maximized-p))
(cond (maxframe-maximized-p (maximize-frame))
(t (restore-frame))))
(define-key global-map [(s-return)] 'toggle-maxframe)
;; make it easy to go fullscreen
(defun toggle-fullscreen ()
"Toggle full screen"
(interactive)
(set-frame-parameter
nil 'fullscreen
(when (not (frame-parameter nil 'fullscreen)) 'fullboth))
(adjust-font-size-for-all-frames))
;; and the keybinding
(unless (fboundp 'toggle-frame-fullscreen)
(global-set-key (kbd "<f11>") 'toggle-fullscreen))
(unless (fboundp 'toggle-frame-fullscreen)
(global-set-key (kbd "<f17>") 'toggle-fullscreen))
(global-set-key (kbd "<f17>") 'toggle-fullscreen)
So Emacs text doesn’t appear on the MacBook Pro notch.
(use-package tab-bar :defer :config (tab-bar-mode -1))
(defun my-toggle-tab-bar-mode ()
"Toggle `tab-bar-mode' based on the current frame fullscreen state in order to hide the MacBook Pro notch when in fullscreen mode."
(if (frame-parameter nil 'fullscreen)
(tab-bar-mode 1)
(tab-bar-mode -1)))
(add-hook 'window-configuration-change-hook #'my-toggle-tab-bar-mode)
There is probably a lot of redundancy here, I don’t understand this stuff too well.
;; (use-package dired-details+)
;; (defadvice dired-readin
;; (after dired-after-updating-hook first () activate)
;; "Sort dired listings with directories first before adding marks."
;; (mydired-sort)
;; (let ((dired-details-internal-overlay-list ())) (dired-details-hide)))
(defcustom dired-details-hidden-string ""
"*This string will be shown in place of file details and symbolic links."
:group 'dired-details
:type 'string)
(defcustom dired-details-initially-hide t
"*Hide dired details on entry to dired buffers."
:group 'dired-details
:type 'boolean)
Manually remove the scrollbar if default setting fails when creating a new frame:
(defun scrollbar-init ()
(interactive)
(scroll-bar-mode -1)
)
(defun scrollbar-mode-turn-off-scrollbar ()
(interactive)
(scroll-bar-mode -1)
)
(defun scrollbar-mode-turn-on-scrollbar ()
(interactive)
(scroll-bar-mode 1)
)
Forgot what this does, I think it’s in case Emacs crashes maybe to recover autosaves?
(defadvice recover-session (around disable-dired-omit-for-recover activate)
(let ((dired-mode-hook dired-mode-hook))
(remove-hook 'dired-mode-hook 'enable-dired-omit-mode)
ad-do-it))
Very important, I use this all the time. These are custom functions to separate the OSX clipboard from Emacs’ kill ring, effectively giving me two separate clipboards to work from. The below are the traditional OSX keybindings for cut/copy/paste, and they will now work with the OSX clipboard. The yank and pop functions still work, and use the Emacs kill ring instead.
(setq interprogram-cut-function nil)
(setq interprogram-paste-function nil)
(defun pasteboard-copy ()
"Copy region to OS X system pasteboard."
(interactive)
(let* ((txt (buffer-substring (region-beginning) (region-end))))
(shell-command-to-string
(format "echo -n %s | pbcopy" (shell-quote-argument txt)))))
(defun pasteboard-copy-to-end-of-buffer ()
"Copy text from point to the end of the buffer to OS X system pasteboard."
(interactive)
(let* ((txt (buffer-substring (point) (point-max))))
(shell-command-to-string
(format "echo -n %s | pbcopy" (shell-quote-argument txt)))))
(defun pasteboard-copy-and-convert-to-markdown-link ()
"Copy region to OS X system pasteboard."
(interactive)
(let* ((txt (buffer-substring (region-beginning) (region-end)))
(txt-updated-links
(replace-regexp-in-string
"\\[\\[\\([^]]*\\)\\]\\(\\[\\([^]]*\\)\\]\\)?\\]"
(lambda (m)
(concat "[" (or (match-string 3 m)
(match-string 1 m))
"](" (match-string 1 m) ")"))
txt)))
;; (message "Copied: %s" txt-updated-links)
(shell-command-to-string
(format "echo -n %s | pbcopy" (shell-quote-argument txt-updated-links)))))
(defun convert-markdown-links-to-org-mode (beg end)
"Convert Markdown links to Org-mode links in the specified region."
(interactive "r")
(save-excursion
(goto-char beg)
(while (re-search-forward "\\[\\([^][]+\\)\\](\\([^)]+\\))" end t)
(replace-match "[[\\2][\\1]]" t))))
(defun pasteboard-paste-and-convert-markdown-links-to-org-mode ()
"Paste from OS X system pasteboard and convert Markdown links to Org-mode format."
(interactive)
(let* ((clipboard-content (shell-command-to-string "pbpaste"))
(clean-content (string-trim clipboard-content))
(start (point))
(end (if mark-active (mark) (point))))
(if (string-empty-p clean-content)
(message "Clipboard is empty.")
(let ((converted-content
(replace-regexp-in-string
"\\[\\([^][]+\\)\\](\\([^)]+\\))"
"[[\\2][\\1]]"
clean-content)))
(delete-region start end)
(insert converted-content)
(message "Content pasted and converted successfully.")))))
(defun pasteboard-paste ()
"Paste from OS X system pasteboard via `pbpaste' to point."
(interactive)
(let ((start (point))
(end (if mark-active
(mark)
(point)))
(ins-text
(shell-command-to-string "pbpaste | perl -p -e 's/\r$//' | tr '\r' '\n'")))
(delete-region start end)
(insert ins-text)
(my/fix-space)
(save-excursion
(goto-char start)
(my/fix-space)))
; (reflash-indentation)
)
(defun pasteboard-paste-without-smart-quotes ()
"Paste from the system clipboard, replace smart quotes, and convert Markdown links to Org-mode format."
(interactive)
(let ((beg (point)))
(pasteboard-paste) ; Paste the content from the clipboard.
(replace-smart-quotes beg (point)) ; Replace smart quotes in the pasted content.
(convert-markdown-links-to-org-mode beg (point)) ; Convert Markdown links to Org-mode.
;; If you have other cleanup functions, call them here.
))
(defun pasteboard-paste-spaces-maybe ()
"Paste from pasteboard, choosing paste method based on surrounding characters.
If the character before or after the cursor is in a predefined set,
use `pasteboard-paste-no-spaces', otherwise use `pasteboard-paste-without-smart-quotes'."
(interactive)
(let* ((prev-char (char-before))
(next-char (char-after))
(char-set '(?: ?' ?( ?) ?| ?[ ?] ?/ ?\\ ?\" ?= ?< ?> ?{ ?})))
(if (or (member prev-char char-set)
(member next-char char-set))
(pasteboard-paste-no-spaces)
(pasteboard-paste-without-smart-quotes))))
(defun pasteboard-paste-no-spaces ()
"Paste from OS X system pasteboard via `pbpaste' to point."
(interactive)
(let ((start (point))
(end (if mark-active
(mark)
(point))))
(shell-command-on-region start end
"pbpaste | perl -p -e 's/\r$//' | tr '\r' '\n'"
nil t)
(save-excursion
)))
(defun pasteboard-cut ()
"Cut region and put on OS X system pasteboard."
(interactive)
(pasteboard-copy)
(delete-region (region-beginning) (region-end))
(my/fix-space)
)
(defun pasteboard-cut-and-capitalize ()
"Cut region and put on OS X system pasteboard."
(interactive)
(pasteboard-copy)
(delete-region (region-beginning) (region-end))
(my/fix-space)
(save-excursion
(when (my/beginning-of-sentence-p)
(capitalize-unless-org-heading))))
(defvar-local failed-search nil)
(defun wrapped-search-forward (str)
(interactive "sWrappedSearch:")
(if (and
failed-search
(>= (car failed-search) (point))
(string-equal (cdr failed-search) str))
(let ((p (save-excursion
(goto-char 0)
(search-forward str nil t))))
(if p
(progn
(goto-char p)
(setq-local failed-search nil))
(message "WrappedSearch: Not found.")))
(let ((p (search-forward str nil t)))
(unless p
(setq-local failed-search (cons (point) str))
(message "Search: Not found.")))))
(defun pasteboard-search-for-clipboard-contents ()
(interactive)
(let ((search-term
(with-temp-buffer
(pasteboard-paste-no-spaces)
(buffer-string))))
(wrapped-search-forward search-term)))
(setq x-select-enable-clipboard t)
(defun push-kill-ring-pasteboard-to-MacOS-clipboard ()
(interactive)
(x-select-text (current-kill 0)))
(defun push-MacOS-clipboard-to-kill-ring ()
"Push the content of the MacOS clipboard to the Emacs kill ring."
(interactive)
(let ((clipboard-content (shell-command-to-string "pbpaste")))
(when (and clipboard-content (not (string= clipboard-content "")))
(kill-new clipboard-content)
(message "Pushed clipboard content to kill ring: %s" clipboard-content))))
(defun gist-buffer-to-pasteboard ()
(interactive)
(gist-buffer)
(push-kill-ring-pasteboard-to-MacOS-clipboard)
)
I have an unconventional approach to this that I recommend highly. I have redefined the C-l (‘ell’) key to be a prefix key, and I use that to prefix my favorite commands. This key is very easy to type and it is bound to a function (‘recenter) that isn’t used that much. Well, I don’t use ‘recenter much, but even if you did, it can be assigned to C-l C-l which is almost as easy to type, and a small price to pay for the possibilities opened up by the Ctrl-L-map. (Actually I prefer ‘redraw-display to ‘recenter, so I gave that the place of honor.)
Source: LenW’s answer on keyboard - What are good custom keybindings in emacs? - Stack Overflow
Use ⌘-m as prefix for my own custom keybindings:
;; (global-set-key (kbd "s-k") nil)
(global-unset-key (kbd "s-k"))
(define-key evil-normal-state-map (kbd "s-k") nil)
(global-unset-key (kbd "s-k"))
(defvar s-k-map (make-keymap)
"Keymap for local bindings and functions, prefixed by (Command-M)")
(define-key global-map (kbd "s-k") 's-k-prefix)
(fset 's-k-prefix s-k-map)
Eventually replace these with this? https://github.com/noctuid/general.el
;; create a custom minor mode to override other keybindings and use mine instead
(defvar key-minor-mode-map (make-sparse-keymap) "key-minor-mode keymap.")
(define-minor-mode key-minor-mode
"A minor mode so that my key settings override annoying major modes."
:init-value t
:lighter " key"
:keymap key-minor-mode-map)
(key-minor-mode 1)
(defun my-minibuffer-setup-hook ()
(key-minor-mode 0))
(add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)
;; and the keybindings
;; mk - mykeybindings
(defun setup-org-mode-keys ()
(define-key org-mode-map (kbd "<return>") 'smart-return))
;; Setup Org mode specific keys
(add-hook 'org-mode-hook 'setup-org-mode-keys)
;; learn this key binding!!!
(define-key key-minor-mode-map (kbd "M-s-d") 'counsel-find-file)
(define-key key-minor-mode-map (kbd "C-<tab>") 'org-cycle-force-archived)
(define-key key-minor-mode-map (kbd "s-k o l") 'olivetti-mode)
(define-key key-minor-mode-map (kbd "s-I") 'clone-indirect-buffer-new-window-and-focus)
;; (define-key key-minor-mode-map (kbd "m-I") 'aibo:question)
(define-key key-minor-mode-map (kbd "s-k o t") 'org-timeline-export-to-html-and-open)
(define-key key-minor-mode-map (kbd "s-k e b") 'ediff-buffers)
;; (define-key key-minor-mode-map (kbd "C-S-<left>") 'org-outdent-item-tree)
;; (define-key key-minor-mode-map (kbd "C-S-<right>") 'org-indent-item-tree)
(define-key key-minor-mode-map (kbd "C-S-<left>") 'org-outdent-or-promote)
(define-key key-minor-mode-map (kbd "C-S-<right>") 'org-indent-or-demote)
(define-key key-minor-mode-map (kbd "s-k a f") 'org-attach)
(define-key key-minor-mode-map (kbd "M-/") 'completion-at-point)
(define-key key-minor-mode-map (kbd "M-1") 'winum-select-window-1)
(define-key key-minor-mode-map (kbd "M-2") 'winum-select-window-2)
(define-key key-minor-mode-map (kbd "M-3") 'winum-select-window-3)
(define-key key-minor-mode-map (kbd "C-M-3") 'number-region)
(define-key key-minor-mode-map [mouse-2] 'context-menu-open)
(bind-key "C-c <mouse-3>" 'right-click-context-menu)
(define-key key-minor-mode-map (kbd "M-j") 'aide-openai-complete-buffer-insert)
(define-key key-minor-mode-map (kbd "C-c C-x C-r") 'org-clock-report)
(define-key key-minor-mode-map (kbd "s-k r t") 'org-render-table-at-point)
(define-key key-minor-mode-map (kbd "s-k m c") 'multiple-cursors-reflash)
;; (define-key key-minor-mode-map (kbd "s-J") 'dired-jump)
(define-key key-minor-mode-map (kbd "s-k r l") 'remove-link)
(define-key key-minor-mode-map (kbd "s-k n s") 'yas/new-snippet)
;; (define-key key-minor-mode-map (kbd "s-k n") 'yas/new-snippet)
(define-key help-mode-map (kbd "C-s-]") 'help-go-back)
(define-key key-minor-mode-map (kbd "C-s-]") 'help-go-forward)
(define-key key-minor-mode-map (kbd "s-k c m") 'css-mode)
;; (define-key css-mode-map (kbd "s-k c s") 'css-mode)
(define-key key-minor-mode-map (kbd "s-k s h") 'sh-mode)
(define-key key-minor-mode-map (kbd "s-k s m") 'sh-mode)
(define-key key-minor-mode-map (kbd "s-K") 'org-cut-subtree)
(define-key key-minor-mode-map (kbd "s-k RET") 'kill-current-buffer)
;; (define-key key-minor-mode-map (kbd "s-k") 'avy-goto-char)
;; (define-key key-minor-mode-map (kbd "s-p") 'org-html-export-to-html-and-open)
;; (define-key key-minor-mode-map (kbd "M-y") 'helm-show-kill-ring)
(define-key key-minor-mode-map (kbd "M-h M-k") 'describe-key)
;; (define-key key-minor-mode-map (kbd "M-s-m") 'visit-messages-buffer)
(define-key key-minor-mode-map (kbd "S-<return>") 'visit-messages-buffer)
(defun visit-messages-buffer ()
(interactive)
()
(interactive)
(view-echo-area-messages)
(other-window 1)
)
(defun visit-messages-buffer-full-screen ()
(interactive)
(with-current-buffer (messages-buffer)
(goto-char (point-max))
(switch-to-buffer (current-buffer)))
)
(define-key key-minor-mode-map (kbd "<s-backspace>") 'kill-region)
(define-key key-minor-mode-map (kbd "C-\\") 'palimpsest-move-region-to-bottom)
;; TODO learn this key binding!!
(define-key key-minor-mode-map (kbd "s-k t c") 'org-table-create)
(define-key key-minor-mode-map (kbd "C-;") 'org-def)
(define-key flyspell-mode-map (kbd "C-;") 'org-def)
(define-key key-minor-mode-map (kbd "s-k u p") 'unfill-paragraph)
(define-key key-minor-mode-map (kbd "C-w") 'copy-region-as-kill-and-push-to-clipboard)
;; (define-key key-minor-mode-map (kbd "=") 'insert-equals-sign)
(define-key key-minor-mode-map (kbd "C-M-/") 'hippie-expand)
(define-key key-minor-mode-map (kbd "s-k w m") 'whitespace-mode)
(define-key key-minor-mode-map (kbd "s-k h l") 'spacemacs/toggle-highlight-current-line-globally-off)
(define-key key-minor-mode-map (kbd "s-k r b") 'revert-buffer)
(define-key key-minor-mode-map (kbd "s-k s b") 'scrollbar-mode-turn-off-scrollbar)
(define-key key-minor-mode-map (kbd "s-i") 'imenu)
(define-key key-minor-mode-map (kbd "s-k i l") 'imenu-list)
(define-key key-minor-mode-map (kbd "s-k i m") 'imenu-list)
(define-key key-minor-mode-map (kbd "s-k g t") 'google-translate-at-point)
(define-key key-minor-mode-map (kbd "M-?") 'insert-question-mark)
;; (define-key key-minor-mode-map (kbd "<s-S-down>") 'scratch)
(define-key key-minor-mode-map (kbd "s-k ag") 'affe-grep)
(define-key key-minor-mode-map (kbd "s-k t t") 'toggle-between-src-and-example-block)
;; working with an external monitor
(define-key key-minor-mode-map (kbd "s-n") 'make-frame)
;; (define-key key-minor-mode-map (kbd "s-~") 'other-frame)
(define-key key-minor-mode-map (kbd "s-`") 'other-window-or-frame)
(define-key key-minor-mode-map (kbd "C-x C-d") 'dired)
(define-key key-minor-mode-map (kbd "s-k c p") 'path-copy-path-to-kill-ring)
(define-key org-mode-map (kbd "s-k c s") 'org-clone-subtree)
(define-key key-minor-mode-map (kbd "s-k v") 'org-paste-subtree)
(define-key key-minor-mode-map (kbd "s-k x") 'org-cut-subtree)
(define-key key-minor-mode-map (kbd "s->") 'org-mark-subtree)
(define-key key-minor-mode-map (kbd "M-'") 'insert-one-double-quote)
(define-key key-minor-mode-map (kbd "M-s-.") 'mark-paragraph)
(define-key key-minor-mode-map (kbd "M-_") 'em-dash)
(define-key key-minor-mode-map (kbd "C-v") 'html2org-clipboard)
(define-key key-minor-mode-map (kbd "s-r") 'counsel-recentf)
(define-key key-minor-mode-map (kbd "M-.") 'insert-period)
(define-key key-minor-mode-map (kbd "M-,") 'insert-comma)
(define-key key-minor-mode-map (kbd "s-k g b") 'gist-buffer-to-pasteboard)
;; (define-key key-minor-mode-map (kbd "<M-s-up>") 'scroll-down-command)
;; (define-key key-minor-mode-map (kbd "<M-s-down>") 'scroll-up-command)
(define-key key-minor-mode-map (kbd "M-s b") 'book-search)
(define-key key-minor-mode-map (kbd "M-s c") 'current-buffers-search)
(define-key key-minor-mode-map (kbd "s-k o m") 'org-mode)
(define-key key-minor-mode-map (kbd "s-k f m") 'text-mode)
(define-key key-minor-mode-map (kbd "s-k e l") 'emacs-lisp-mode)
(define-key key-minor-mode-map (kbd "s-k w c") 'wc-mode)
(define-key key-minor-mode-map (kbd "s-k o c") 'org-wc-count-subtrees)
(define-key key-minor-mode-map (kbd "s-k o c") 'org-wc-display)
(global-set-key (kbd "C-c m") 'compose-mail)
;; (global-set-key (kbd "C-c m") 'yale-or-vivovii-compose)
(define-key key-minor-mode-map (kbd "s-k m b") 'menu-bar-mode)
(define-key key-minor-mode-map (kbd "s-k d c") 'org-table-delete-column)
(define-key key-minor-mode-map (kbd "s-k i c") 'org-table-insert-column)
(define-key key-minor-mode-map (kbd "s-k i r") 'org-table-insert-row)
;; don't know why this stopped working
(define-key key-minor-mode-map (kbd "C-c C-x <C-i>") 'org-clock-in)
(define-key key-minor-mode-map (kbd "C-c C-x <C-i>") 'org-clock-in)
(define-key key-minor-mode-map (kbd "s-k f z") 'counsel-fzf)
(define-key key-minor-mode-map (kbd "M-s-=") 'calc-eval-region)
(define-key key-minor-mode-map (kbd "s-k p m") 'poetry-mode)
;; (define-key key-minor-mode-map (kbd "s-p") 'zin/org-checkbox-next)
(define-key key-minor-mode-map (kbd "<f20>") 'pomodoro-start)
(define-key key-minor-mode-map (kbd "s-k p s") 'pomodoro-start)
(define-key key-minor-mode-map (kbd "<C-s-left>") 'work-on-book)
(define-key key-minor-mode-map (kbd "s-k t d") 'org-todo-list)
(define-key key-minor-mode-map (kbd "s-k o a") 'org-agenda)
(define-key key-minor-mode-map (kbd "s->") 'org-cycle-agenda-files)
(define-key key-minor-mode-map (kbd "s-k c i") 'jd-clock-in)
;; (define-key key-minor-mode-map (kbd "s-.") 'org-select-line)
;; (define-key key-minor-mode-map (kbd "C-.") 'searchlink)
(define-key key-minor-mode-map (kbd "M-0") 'copy-region-to-other-window)
(define-key key-minor-mode-map (kbd "s-b") 'narrow-or-widen-dwim)
(define-key key-minor-mode-map (kbd "C-x C-d") 'consult-dir)
;; (define-key key-minor-mode-map (kbd "C-x <return> RET") 'mc/mark-all-dwim)
;; (define-key key-minor-mode-map (kbd "s-H") 'hyperbole)
(define-key key-minor-mode-map (kbd "M-e") 'smart-forward-sentence)
(define-key key-minor-mode-map (kbd "M-q") 'prelude-switch-to-previous-buffer)
(define-key key-minor-mode-map (kbd "M-]") 'org-next-visible-heading)
(define-key key-minor-mode-map (kbd "M-[") 'org-previous-visible-heading)
(define-key key-minor-mode-map (kbd "C-M-]") 'org-next-subtree-and-narrow)
(define-key key-minor-mode-map (kbd "C-M-[") 'org-previous-subtree-and-narrow)
(define-key key-minor-mode-map (kbd "C-]") 'org-next-subtree-same-level-and-narrow)
(define-key key-minor-mode-map (kbd "ESC ESC") 'org-previous-subtree-same-level-and-narrow)
(define-key key-minor-mode-map (kbd "s-k w s") 'isearch-forward-word)
(define-key key-minor-mode-map (kbd "C-s") 'consult-line)
(define-key key-minor-mode-map (kbd "s-f") 'isearch-forward-ignore-case)
(define-key key-minor-mode-map (kbd "s-F") 'pasteboard-search-for-clipboard-contents)
(define-key key-minor-mode-map (kbd "M-\"") 'open-abbrevs)
(define-key key-minor-mode-map (kbd "s-|") 'path-copy-path-to-clipboard)
(define-key key-minor-mode-map (kbd "<s-return>") 'toggle-fullscreen)
(global-set-key (kbd "s-v") 'pasteboard-paste-no-spaces)
(define-key org-mode-map (kbd "s-v") 'pasteboard-paste-spaces-maybe)
(define-key text-mode-map (kbd "s-v") 'pasteboard-paste-without-smart-quotes)
(define-key emacs-lisp-mode-map (kbd "s-v") 'pasteboard-paste-no-spaces)
(define-key key-minor-mode-map (kbd "C-s-v") 'html2org-clipboard)
(define-key key-minor-mode-map (kbd "C-s-c") 'ox-clip-formatted-copy)
(define-key key-minor-mode-map (kbd "s-x") 'pasteboard-cut-and-capitalize)
(define-key key-minor-mode-map (kbd "s-c") 'pasteboard-copy)
(define-key key-minor-mode-map (kbd "s-V") 'pasteboard-paste-no-spaces)
(define-key emacs-lisp-mode-map (kbd "s-v") 'pasteboard-paste-no-spaces)
(define-key key-minor-mode-map (kbd "s-h") 'replace-string)
(global-unset-key (kbd "C-S-r"))
(define-key key-minor-mode-map (kbd "C-S-r") nil)
(define-key org-mode-map (kbd "C-S-r") nil)
;; (define-key key-minor-mode-map (kbd "C-s-o") 'dired-jump)
(define-key key-minor-mode-map (kbd "C-x C-j") 'dired-up-directory)
;; (define-key org-mode-map (kbd "s-O") 'uo-byword-file)
;; pop mark
(define-key key-minor-mode-map (kbd "C-x p")'pop-to-mark-command)
;; projectile
;; (define-key key-minor-mode-map (kbd "s-P") 'projectile-commander)
(define-key key-minor-mode-map (kbd "s-E") 'new-email-from-subtree-no-signature)
;; and make it work in the minibuffer too
(define-key minibuffer-local-map (kbd "s-v") 'pasteboard-paste-no-spaces)
(define-key minibuffer-local-map (kbd "s-x") 'pasteboard-cut)
(define-key minibuffer-local-map (kbd "s-c") 'copy-minibuffer-contents)
(define-key minibuffer-local-map (kbd "s-a") 'copy-minibuffer-contents)
(defun copy-minibuffer-contents (arg)
(interactive "p")
(beginning-of-visual-line)
(end-of-buffer)
(copy-region-as-kill (mark) (point))
(push-kill-ring-pasteboard-to-MacOS-clipboard)
)
(define-key key-minor-mode-map (kbd "C-c C-v") 'refile-region)
(define-key key-minor-mode-map (kbd "s-0") 'move-region-to-other-window)
;; (define-key org-mode-map (kbd "s-o") 'move-region-to-other-window) ; very useful when working with a split frame
(define-key key-minor-mode-map (kbd "s-o") 'move-or-copy-region-to-other-window)
(define-key key-minor-mode-map (kbd "s-O") 'reveal-in-finder)
(define-key emacs-lisp-mode-map (kbd "C-c e") 'eval-buffer)
(define-key org-mode-map (kbd "C-c e") 'eval-subtree)
(define-key key-minor-mode-map (kbd "C-c r") 'eval-region)
(define-key key-minor-mode-map (kbd "C-9") 'goto-last-change-reverse) ; super useful when editing
(define-key key-minor-mode-map (kbd "C--") 'goto-last-change) ; super useful when editing
(define-key key-minor-mode-map (kbd "M-=") 'er/expand-region)
(define-key key-minor-mode-map (kbd "C-=") 'er/expand-region)
;; (define-key key-minor-mode-map (kbd "C-8") #'(lambda (arg) (interactive "p") (wrap-region-trigger arg "*"))) ; wow this was a stroke of genius
(define-key key-minor-mode-map (kbd "s-k r e") 'set-rectangular-region-anchor)
(define-key key-minor-mode-map (kbd "C-d") 'kill-word-correctly-and-capitalize)
;; (define-key key-minor-mode-map (kbd "m-d") 'kill-word-correctly-and-capitalize)
(define-key key-minor-mode-map (kbd "M-d") 'org-todo)
(define-key key-minor-mode-map (kbd "M-s-9") 'org-todo)
;; (define-key key-minor-mode-map (kbd "m-D") 'org-shiftleft)
(define-key key-minor-mode-map (kbd "C-l") 'reflash-indentation)
;; (define-key org-mode-map (kbd "C-l") 'reflash-indentation)
(define-key key-minor-mode-map (kbd "s-e") 'embark-act)
(define-key key-minor-mode-map (kbd "=") 'smex) ; call any function with easiest keystroke possible
;; (define-key key-minor-mode-map (kbd "=") 'counsel-M-x) ; call any function with easiest keystroke possible
(global-set-key (kbd "C-s") 'consult-line) ;; instead of swiper
;; Source: [[https://macowners.club/posts/from-ivy-to-vertico/][From Ivy & Counsel to Vertico & Consult | macOS & (open-source) Software]]
;; (define-key key-minor-mode-map (kbd "M-x") 'helm-M-x) ; call helm-M-x instead of regular M-x
;; (define-key key-minor-mode-map (kbd "\|") 'deft)
(define-key org-mode-map (kbd "M-K") 'kill-sentence-maybe-else-kill-line)
(define-key emacs-lisp-mode-map (kbd "M-K") 'kill-sexp)
(define-key key-minor-mode-map (kbd "C-M-8") 'org-toggle-heading) ; i.e. subheading
(define-key key-minor-mode-map (kbd "M-8") 'org-toggle-heading-same-level)
(define-key key-minor-mode-map (kbd "M-*") 'org-toggle-todo-heading)
;; (define-key key-minor-mode-map (kbd "C-M-*") 'org-toggle-todo-subheading)
(define-key key-minor-mode-map (kbd "M-t") 'titlecase-dwim)
(define-key key-minor-mode-map (kbd "M--") 'cycle-hyphenation-or-toggle-item)
;; (define-key key-minor-mode-map (kbd "S-s-<up>") 'later-list)
(define-key key-minor-mode-map (kbd "M-a") 'org-priority-up)
(define-key key-minor-mode-map (kbd "C-c C-x p p") 'pomodoro-start)
(define-key key-minor-mode-map (kbd "s-<") 'load-shared-functions)
(define-key key-minor-mode-map (kbd "s->") 'load-gnu-startup)
(define-key key-minor-mode-map (kbd "s-?") 'load-spacecraft-mode)
(define-key key-minor-mode-map (kbd "s->") 'load-gnu-startup)
(define-key key-minor-mode-map (kbd "s-.") 'consult-outline)
(define-key key-minor-mode-map (kbd "s-'") 'choose-refile-method-and-refile)
;; (define-key key-minor-mode-map (kbd "C-c j") 'helm-org-headlines) ; also bound to keychord jj
;; helm-mini) ; shows recent files; also bound to ⌘-r
(define-key key-minor-mode-map (kbd "M-b M-d") 'book-dired) ; show directory of my book folder
(define-key key-minor-mode-map (kbd "M-b r") 'read-a-book) ; show directory of my PDF books
(define-key key-minor-mode-map (kbd "M-b j") 'read-jd) ; show PDF books I have annotated
(define-key key-minor-mode-map (kbd "M-b M-b") 'work-on-book) ;
(define-key key-minor-mode-map (kbd "M-b M-w") 'work-on-book) ;
(define-key key-minor-mode-map (kbd "M-b lc") 'book-load-current) ;
;; (define-key key-minor-mode-map (kbd "M-b ho") 'spacemacs/toggle-highlight-current-line-globally)
;; book bindings
(define-key key-minor-mode-map (kbd "M-b M-p") 'book-proposal-directory)
(define-key key-minor-mode-map (kbd "M-b M-m") 'book-mistakes-directory)
(define-key key-minor-mode-map (kbd "s-k o l") 'olivetti-mode)
(define-key key-minor-mode-map (kbd "] ol") 'olivetti-mode)
(define-key key-minor-mode-map (kbd "s-k o e") 'olivetti-expand)
(define-key key-minor-mode-map (kbd "s-+") 'copy-region-to-other-window)
(define-key key-minor-mode-map (kbd "s-_") 'olivetti-shrink)
(define-key org-mode-map (kbd "s-l") 'org-insert-link)
(define-key key-minor-mode-map (kbd "s-B") 'consult-buffer)
(define-key key-minor-mode-map (kbd "s-T") 'mw-thesaurus-lookup-dwim)
(define-key key-minor-mode-map (kbd "s-D") 'define-word-at-point)
;; For extracting content from my browser
(define-key key-minor-mode-map (kbd "s-W") 'open-weeklies)
;; (define-key key-minor-mode-map (kbd "s-V") 'html2org-clipboard) ; paste HTML content that I've copied from the web, automatically converting to proper org-mode syntax
(define-key key-minor-mode-map (kbd "C-s-\\") 'source-current-file)
;; and the keybinding
(define-key org-mode-map (kbd "C-k") 'my/kill-line-dwim)
(define-key key-minor-mode-map (kbd "C-k") 'my/kill-line-dwim)
;; use OSX standard keybindings ⌘-up and ⌘-down to go to top or bottom of buffer
(define-key key-minor-mode-map [s-up] 'beginning-of-buffer)
(define-key key-minor-mode-map [s-down] 'end-of-buffer)
(define-key key-minor-mode-map (kbd "S-s-SPC") 'set-mark-command)
;; mark commands
(define-key key-minor-mode-map (kbd "C-M-SPC") 'set-mark-command)
(define-key key-minor-mode-map (kbd "C-M-x") 'exchange-point-and-mark)
;; (define-key key-minor-mode-map (kbd "C-s-SPC") 'helm-all-mark-rings)
; (define-key key-minor-mode-map (kbd "s-+") 'set-mark-command)
;; (define-key key-minor-mode-map (kbd "s-_") 'avy-pop-mark)
;; use OSX standard keybinding for "Redo"
(define-key key-minor-mode-map (kbd "s-z") 'undo-fu-only-undo)
(define-key key-minor-mode-map (kbd "s-y") 'undo-fu-only-redo-fail-silently)
(define-key key-minor-mode-map (kbd "s-y") 'undo-fu-only-redo-fail-with-heart)
;; use OSX standard keybinding to increase or decrease font size
;; (define-key key-minor-mode-map (kbd "s-=") 'text-scale-increase)
;; (define-key key-minor-mode-map (kbd "s--") 'text-scale-decrease)
(define-key key-minor-mode-map (kbd "s-=") 'embiggen-text)
(define-key key-minor-mode-map (kbd "s--") 'ensmallen-text)
;; rebind global help command so that I can use C-h for backspace
(define-key key-minor-mode-map (kbd "M-h") 'help-command)
;; very useful when encountering names and other unfamiliar words
(define-key key-minor-mode-map (kbd "M-+") 'add-word-to-personal-dictionary)
(define-key key-minor-mode-map (kbd "s-k s w") 'crux-swap-windows)
(define-key key-minor-mode-map (kbd "s-k l a") 'jay-load-latex)
(define-key key-minor-mode-map (kbd "s-k l t") 'jay-load-latex)
(define-key key-minor-mode-map (kbd "s-k k a") 'load-koma-letter)
(define-key key-minor-mode-map (kbd "s-k k o") 'load-koma-letter)
(define-key key-minor-mode-map (kbd "M-s-v") 'html2org-clipboard)
;; navigate between buffers, including uninteresting ones that are hidden by default
(define-key key-minor-mode-map (kbd "M-s-<right>") 'switch-to-next-buffer)
(define-key key-minor-mode-map (kbd "M-s-<left>") 'previous-buffer)
;; deleting things
;; (define-key key-minor-mode-map (kbd "<backspace>") 'my/delete-backward)
(define-key key-minor-mode-map (kbd "<backspace>") 'my/delete-backward-and-capitalize)
;; a keybinding for "delete" in addition to "backspace"
(define-key key-minor-mode-map (kbd "C-<backspace>") 'delete-char)
(define-key key-minor-mode-map (kbd "M-<backspace>") 'backward-kill-word-correctly-and-capitalize)
;; pomodoro
(define-key key-minor-mode-map (kbd "C-c C-x pi") 'pomodoro-start)
(define-key key-minor-mode-map (kbd "C-c C-x po") 'pomodoro-stop)
;; find files using helm
;; (define-key key-minor-mode-map (kbd "C-x C-f") 'helm-find-files)
;; search using helm-swoop
;(global-set-key (kbd "M-I") 'helm-swoop-back-to-last-point)
;(global-set-key (kbd "C-c M-i") 'helm-multi-swoop)
;(global-set-key (kbd "C-x M-i") 'helm-multi-swoop-all)
;(global-set-key (kbd "M-i") 'helm-multi-swoop-all)
;; edit Emacs preferences using standard OSX keybinding for preferences
(define-key key-minor-mode-map (kbd "s-,") 'customize-group)
(define-key key-minor-mode-map (kbd "s-g") 'isearch-repeat-forward)
(define-key key-minor-mode-map (kbd "C-s-g ") 'consult-ripgrep-current-directory)
(define-key key-minor-mode-map (kbd "s-G") 'counsel-projectile-ag)
(define-key org-mode-map (kbd "C-c C-s") 'org-schedule)
(define-key key-minor-mode-map (kbd "C-c C-s") 'org-schedule)
(define-key key-minor-mode-map (kbd "s-k o s") 'org-schedule)
(define-key key-minor-mode-map (kbd "s-k o d") 'org-deadline)
(define-key key-minor-mode-map (kbd "s-k t s") 'org-toggle-time-stamp-overlays)
(define-key key-minor-mode-map (kbd "M-x") 'execute-extended-command) ; call helm-M-x instead of regular M-x
;; ag, using current folder as default
;; (define-key key-minor-mode-map (kbd "C-u s-g") 'helm-ag)
;; does that keyvinding work?
;; some custom functions
(define-key key-minor-mode-map (kbd "C-c v i") 'org-insert-src-block)
(define-key key-minor-mode-map (kbd "s-h") 'replace-string)
(define-key key-minor-mode-map (kbd "s-m") 'mc/mark-all-like-this)
(define-key key-minor-mode-map (kbd "s-M") 'tr-toggle-transclusion)
(define-key key-minor-mode-map (kbd "s-\\") 'visit-most-recent-file)
(define-key key-minor-mode-map (kbd "s-F") 'pasteboard-search-for-clipboard-contents)
(define-key key-minor-mode-map (kbd "s-R") 'fasd-find-file)
(define-key key-minor-mode-map (kbd "s-t") 'new-buffer)
(define-key key-minor-mode-map (kbd "s-g") 'isearch-repeat-forward)
(define-key key-minor-mode-map (kbd "s-k e e") 'fasd-find-file)
(define-key key-minor-mode-map (kbd "s-d") 'org-todo)
(define-key key-minor-mode-map (kbd "s-L") 'org-mac-link-chrome-insert-frontmost-url)
(define-key key-minor-mode-map (kbd "s-S") 'org-mac-link-skim-insert)
(define-key key-minor-mode-map (kbd "s-a") 'mark-whole-buffer) ; select all
(define-key key-minor-mode-map (kbd "s-w") 'delete-window) ; close
(define-key key-minor-mode-map (kbd "s-s") 'jay/save-some-buffers ) ; save all
(define-key key-minor-mode-map (kbd "C-s-r") 'consult-find)
;; (define-key key-minor-mode-map (kbd "s-A") 'available)
;; Define the available key bindings
;; (define-key key-minor-mode-map (kbd "s-H") 'available) ;; ⌘-H
;; (define-key key-minor-mode-map (kbd "s-n") 'available) ;; ⌘-n
;; (define-key key-minor-mode-map (kbd "s-N") 'available) ;; ⌘-N
;; (define-key key-minor-mode-map (kbd "s-P") 'available) ;; ⌘-P
;; (define-key key-minor-mode-map (kbd "s-U") 'available) ;; ⌘-U
;; (define-key key-minor-mode-map (kbd "s-X") 'available) ;; ⌘-X
;; (define-key key-minor-mode-map (kbd "s-Y") 'available) ;; ⌘-Y
;; (define-key key-minor-mode-map (kbd "s-.") 'available) ;; s-.
;; (define-key key-minor-mode-map (kbd "s-:") 'available) ;; s-:
;; (define-key key-minor-mode-map (kbd "C-\\") 'available) ;; C-\
;; available
;; (define-key key-minor-mode-map (kbd "C-\") 'available)
;;(define-key key-minor-mode-map (kbd "s-:") 'consult-outline)
Recognize the ⌘ key in both GNU Emacs and Aquamacs as hyper key:
(defvar gnuemacs-flag (string-match "GNU" (emacs-version)))
(defvar aquamacs-flag (string-match "Aquamacs" (emacs-version)))
(defun define-super-key (key fun)
(cond
(gnuemacs-flag
(define-key key-minor-mode-map (kbd (concat "s-" key)) fun))))
Deprecated in favor of (define-key key-minor-mode-map (kbd “s… in: /Users/jay/emacs/emacs-settings/gnu-emacs-startup.org
(define-super-key "h" 'replace-string) (define-super-key "m" 'mc/mark-all-like-this) (define-super-key "\\" 'visit-most-recent-file) (define-super-key "F" 'pasteboard-search-for-clipboard-contents) (define-super-key "R" 'projectile-find-file) (define-super-key "t" 'new-buffer) (define-super-key "T" 'org-new-scratch-buffer) (define-super-key "g" 'isearch-repeat-forward) (define-super-key "d" 'org-todo) (define-super-key "L" 'org-mac-link-chrome-insert-frontmost-url) (define-super-key "S" 'org-mac-link-skim-insert-page) (define-super-key "a" 'mark-whole-buffer) ; select all (define-super-key "w" 'delete-window) ; close (define-super-key "s" 'jay/save-some-buffers ) ; save all
Key bindings I don’t use much and should remember to learn:
(define-super-key "5" 'point-stack-push)
(define-super-key "6" 'point-stack-pop)
(define-super-key "7" 'point-stack-forward-stack-pop)
(define-super-key "8" 'search-open-buffers)
(define-super-key "F" 'pasteboard-search-for-clipboard-contents)
(define-super-key "(" 'org-velocity)
(define-super-key "{" 'path-copy-path-to-clipboard)
(define-super-key "}" 'path-copy-path-to-clipboard)
;; why not use N and P here? TODO
mkprefix: Key bindings for my own custom functions, using ⌘-m as a prefix:
(define-super-key "k rr" 'replace-regexp)
(define-super-key "k cf" 'customize-face)
(define-super-key "k dd" 'delete-duplicate-lines-keep-blanks)
(define-super-key "k cw" 'count-words)
(define-super-key "k bl" 'blue-light)
;; ;; Accountability
(defun keybinding-read-and-insert (key)
(interactive "kKey: ")
(insert "(define-key key-minor-mode-map ")
(insert (format "(kbd \"%s\")" (key-description key)))
(insert " '")
(save-excursion (insert ")")
))
(define-super-key "k kb" 'keybinding-read-and-insert)
(define-super-key "k mk" 'keybinding-read-and-insert)
Make kill-sentence
work in a more intuitive way:
(defun kill-sentence-to-period ()
"Leave the period in there."
(interactive)
(kill-sentence)
(push-mark)
(insert ".")
(backward-char)
)
(defun my/forward-to-sentence-end ()
"Move point to just before the end of the current sentence."
(forward-sentence)
(backward-char)
(unless (looking-back "[[:alnum:]]")
(backward-char)))
(defun my/beginning-of-sentence-p ()
"Return t if point is at the beginning of a sentence."
(let ((start (point))
(beg (save-excursion (forward-sentence) (forward-sentence -1))))
(eq start beg)))
(defun my/kill-sentence-dwim ()
"Kill the current sentence up to and possibly including the punctuation.
When point is at the beginning of a sentence, kill the entire
sentence. Otherwise kill forward but preserve any punctuation at the sentence end."
(interactive)
(smart-expand)
(if (my/beginning-of-sentence-p)
(progn
(kill-sentence)
(just-one-space)
(when (looking-back "^[[:space:]]+") (delete-horizontal-space)))
(kill-region (point) (progn (my/forward-to-sentence-end) (point)))
(just-one-space 0))
;; don't leave two periods in a row
(when
(or
(looking-at "\\.\\. ")
(and
(looking-at "\\.")
(looking-back "\\.")
)
)
(delete-forward-char 1))
(when
(and
(looking-at ".")
(looking-back ",")
)
(delete-backward-char 1)
(forward-char 1)
)
)
(defun my/kill-line-dwim ()
"Kill the current line."
(interactive)
;; don't leave stray stars behind when killing a line
(when
(or
(looking-back "\\[")
(looking-back "\* ")
(looking-back "\* TODO ")
(looking-back "^\*+")
(looking-back "- ")
(looking-back "# ")
)
(beginning-of-line)
)
;; (expand-abbrev)
(org-kill-line)
;; (save-excursion
;; (when (my/beginning-of-sentence-on)
;; (capitalize-unless-org-heading)))
)
(defun kill-sentence-maybe-else-kill-line ()
(interactive)
(when
(not (looking-at "$"))
(my/kill-sentence-dwim))
(when
(looking-at "$")
(my/kill-line-dwim))
)
;; and the keybinding
(global-set-key (kbd "M-k") 'kill-clause)
(setq browse-url-browser-function 'browse-url-default-macosx-browser)
(setq org-blank-before-new-entry
'((heading . always)
(plain-list-item . always)))
(defun call-rebinding-org-blank-behaviour (fn)
(let ((org-blank-before-new-entry
(copy-tree org-blank-before-new-entry)))
(when (org-at-heading-p)
(rplacd (assoc 'heading org-blank-before-new-entry) nil))
(call-interactively fn)))
(defun smart-org-meta-return-dwim ()
(interactive)
(if
(and
(looking-back "^")
(looking-at ".+")
) ; if
(org-toggle-heading-same-level) ; then
(call-rebinding-org-blank-behaviour 'org-meta-return)) ; else
)
(defun smart-org-insert-heading-respect-content-dwim ()
(interactive)
(call-rebinding-org-blank-behaviour 'org-insert-heading-respect-content)
)
(defun smart-org-insert-todo-heading-dwim ()
(interactive)
(let ((listitem-or-checkbox (org-plain-text-list-p)))
(call-rebinding-org-blank-behaviour 'org-insert-heading)
(if listitem-or-checkbox
(insert "[ ] ")
(insert "TODO ")))
)
(defun smart-org-insert-todo-heading-respect-content-dwim ()
(interactive)
(call-rebinding-org-blank-behaviour 'org-insert-todo-heading-respect-content)
)
(defun smart-org-insert-subheading ()
(interactive)
(call-rebinding-org-blank-behaviour 'org-meta-return)
(org-demote-subtree)
)
(defun smart-org-insert-todo-subheading ()
(interactive)
(call-rebinding-org-blank-behaviour 'org-insert-todo-subheading)
)
(define-key org-mode-map (kbd "M-<return>") 'smart-org-meta-return-dwim)
(define-key org-mode-map (kbd "M-S-<return>") 'smart-org-insert-todo-heading-dwim)
(define-key org-mode-map (kbd "C-<return>") 'return-insert-blank-line-before)
(define-key org-mode-map (kbd "C-S-<return>") 'smart-org-insert-todo-heading-respect-content-dwim)
(define-key org-mode-map (kbd "C-M-<return>") 'smart-org-insert-subheading)
(define-key org-mode-map (kbd "<C-S-M-return>") 'smart-org-insert-todo-subheading)
(define-key org-mode-map (kbd "<C-s-return>") 'smart-org-insert-todo-subheading)
(define-key key-minor-mode-map (kbd "<s-S-return>") 'smart-org-insert-todo-heading-dwim)
(define-key key-minor-mode-map (kbd "<s-return>") 'toggle-fullscreen)
(defun length-of-previous-line ()
(save-excursion
(forward-line -1)
(end-of-line)
(current-column)))
(defun kill-word-correctly ()
"Kill word."
(interactive)
(smart-expand)
(if (or (re-search-forward "\\=[ ]*\n" nil t)
(re-search-forward "\\=\\W*?[[:punct:]]+" nil t)) ; IF there's a sequence of punctuation marks at point
(kill-region (match-beginning 0) (match-end 0)) ; THEN just kill the punctuation marks
(kill-word 1)) ; ELSE kill word
(my/fix-space)
;; don't leave two periods in a row
(when
(or
(looking-at "\\,\\, ")
(and
(looking-at "\\,")
(looking-back "\\,")
)
)
(delete-forward-char 1))
)
(defun kill-word-correctly-and-capitalize ()
"Kill the word correctly and capitalize if at the beginning of a sentence and capitalist-mode is enabled."
(interactive)
;; Move forward if at a space
(when (looking-at " ")
(forward-char 1))
;; Check if at the beginning of a sentence
(let ((fix-capitalization (my/beginning-of-sentence-p)))
;; Kill the word correctly
(call-interactively 'kill-word-correctly)
;; Capitalize if needed and capitalist-mode is enabled
(when (and fix-capitalization capitalist-mode)
(save-excursion
(capitalize-unless-org-heading)))))
(defun jay/left-char ()
"Move point to the left or the beginning of the region.
Like `backward-char', but moves point to the beginning of the region
provided the (transient) mark is active."
(interactive)
(let ((this-command 'left-char)) ;; maintain compatibility
(let ((left (min (point)
;; `mark' returning nil is ok; we'll only use this
;; if `mark-active'
(or (mark t) 0))))
(if (and transient-mark-mode mark-active)
(progn
(goto-char left)
(setq deactivate-mark t))
(call-interactively 'left-char)))))
(defun jay/right-char ()
"Move point to the right or the end of the region.
Like `right-char', but moves point to the end of the region
provided the (transient) mark is active."
(interactive)
(let ((this-command 'right-char)) ;; maintain compatibility
(let ((right (max (point)
;; `mark' returning nil is ok; we'll only use this
;; if `mark-active'
(or (mark t) 0))))
(if (and transient-mark-mode mark-active)
(progn (goto-char right)
(setq deactivate-mark t))
(call-interactively 'right-char)))))
(define-key org-mode-map (kbd "<left>") 'jay/left-char)
(define-key org-mode-map (kbd "<right>") 'jay/right-char)
;; Save point position between sessions
;; Save point position between sessions
(use-package saveplace
:defer
:init (save-place-mode))
The saveplace package is part of Emacs, and remembers the position of point - even between emacs sessions.
The last line sets the path to where saveplace stores your position data. Change it at your peril!
(define-minor-mode embolden-next-word
"Make the next word you type bold."
nil
:lighter " EMBOLDEN"
:keymap (let ((map (make-sparse-keymap)))
(define-key map (kbd "SPC") (lambda ()
(interactive)
(expand-abbrev)
(save-excursion
(goto-char (get-register 'p))
(insert "*"))
(insert "* ")
(embolden-next-word -1)))
(define-key map (kbd ".") (lambda ()
(interactive)
(expand-abbrev)
(save-excursion
(goto-char (get-register 'p))
(insert "*"))
(insert "*. ")
(embolden-next-word -1)))
map)
(if embolden-next-word
(set-register 'p (point))
(set-register 'p nil)))
(global-set-key "\C-o" 'embolden-or-bold)
(define-key key-minor-mode-map (kbd "C-o") 'embolden-or-bold)
(defun cycle-hyphenation ()
(interactive)
(cond ((re-search-forward "\\=\\w*\\(-\\)\\w+" nil t)
(save-excursion (replace-match " " t t nil 1)))
((re-search-forward "\\=\\w*\\( +\\)\\w+" nil t)
(save-excursion (replace-match "-" t t nil 1)))))
(defvar *punctuation-markers-to-cycle-between* ".?!")
(defun cycle-punctuation ()
(interactive)
(save-excursion
(forward-sentence)
(when (re-search-backward (format "\\>\\([%s]\\)[[:space:]]*\\="
*punctuation-markers-to-cycle-between*)
nil t)
(let ((next (elt *punctuation-markers-to-cycle-between*
;; circular string; should be abstracted
(mod (1+ (position (elt (match-string 1) 0)
*punctuation-markers-to-cycle-between*))
(length *punctuation-markers-to-cycle-between*)))))
(replace-match (format "%c" next) t t nil 1)))))
;; (define-key key-minor-mode-map (kbd "M-.") 'cycle-punctuation)
(defun org-clone-subtree ()
(interactive)
(org-clone-subtree-with-time-shift 1)
(save-excursion
(org-goto-sibling)
;; This part was lifted partly and adapted from
;; http://orgmode.org/worg/org-hacks.html#orgheadline10.
;; There should be a better way to change the contents of an org heading
;; though...
(when (org-at-heading-p)
(let ((hl-text (nth 4 (org-heading-components)))
(buffer-undo-list))
(when hl-text
(beginning-of-line)
(search-forward hl-text (point-at-eol))
(replace-match (format "%s" hl-text) nil t)
;; (org-align-tags-here org-tags-column)
)))))
;; (load-file "/Users/jay/emacs/emacs-settings/fountain-mode.el")
;; (use-package fountain-mode)
;; (add-hook 'fountain-mode-hook 'turn-on-olivetti-mode)
(add-hook 'fountain-mode-hook #'(lambda () (orgalist-mode 1)))
;; (add-hook 'fountain-mode-hook 'turn-on-auto-capitalize-mode 'append)
(add-hook 'fountain-mode-hook (lambda () (imenu-list-minor-mode 1)))
(defcustom fountain-export-default-command
'fountain-export-shell-script
"\\<fountain-mode-map>Default function to call with \\[fountain-export-default]."
:type '(radio (function-item fountain-export-shell-script)
(function-item fountain-export-buffer-to-html))
:group 'fountain-export)
(defcustom fountain-export-shell-script
"afterwriting --config ~/.config/afterwriting/config.json --source %s --pdf --overwrite"
"Shell command string to convert Fountain source to ouput.
\"%s\" will be substituted with `buffer-file-name'"
:type 'string
:group 'fountain-export)
(defun fountain-export-shell-script (&optional buffer)
"Call shell script defined in `fountain-export-shell-script'."
(interactive)
(let* ((buffer (or buffer (current-buffer)))
(file (shell-quote-argument (buffer-file-name buffer)))
(command (format fountain-export-shell-script file)))
(async-shell-command command "*Fountain Export Process*")))
(setq fountain-export-include-title-page nil)
(setq fountain-export-html-replace-alist
(quote
(("&" "&")
("<" "<")
(">" ">")
("\\\\ " " ")
("^\\\\$" "<br>")
("\\\\_" "_")
("\\\\\\*" "*")
("\\\\`" "`")
("\\\\'" "'")
("``" "“")
("''" "”")
("`" "‘")
("'" "’")
("\\*\\*\\*\\(.+?\\)\\*\\*\\*" "<span class=\"underline\">\\1</span>")
("\\*\\*\\(.+?\\)\\*\\*" "<span class=\"underline\">\\1</span>")
("\\*\\(.+?\\)\\*" "<span class=\"underline\">\\1</span>")
("^~ *\\(.+?\\)$\\*\\*" "<i>\\1</i>")
("_\\(.+?\\)_" "<span class=\"underline\">\\1</span>")
("
+" "<br><br>")
("
" "<br>"))))
Integrating Emacs and Hook, with org-mode - Discussion & Help - Hook Productivity Forum
(setq frame-title-format '((:eval buffer-file-name)))
(defun my/hook (hook)
"Create an org-link target string using `hook://` url scheme."
(shell-command (concat "open \"" hook "\"")))
(org-add-link-type "hook" 'my/hook)
(define-key key-minor-mode-map (kbd "M-(") 'backward-word)
(define-key key-minor-mode-map (kbd "M-)") 'forward-word)
(defun capitalize-sentence ()
(interactive)
(unless (my/beginning-of-sentence-p)
(org-backward-sentence))
(endless/capitalize)
(org-forward-sentence 1)
(jay/right-char)
)
(define-key key-minor-mode-map (kbd "M-C") 'capitalize-word)
(defun downcase-sentence ()
(interactive)
(unless (my/beginning-of-sentence-p)
(org-backward-sentence))
(downcase-word 1)
(org-forward-sentence 1)
(jay/right-char)
)
(define-key key-minor-mode-map (kbd "M-L") 'downcase-sentence)
(defun return-insert-blank-line-before ()
(interactive)
(beginning-of-line)
(newline)
)
(defadvice load-theme (before theme-dont-propagate activate)
(mapc #'disable-theme custom-enabled-themes))
(defun toggle-item-or-hyphenation ()
(interactive "P")
(if
(region-active-p) ; if
(org-toggle-item) ; then
(cycle-hyphenation); else
)
)
(defun smart-forward-sentence ()
(interactive)
(org-forward-sentence)
(my/fix-space)
)
(defun replace-inner ()
(interactive)
(change-inner)
(pasteboard-paste-no-spaces)
)
doesn’t work.
;;advise swiper to recenter on exit (defun bjm-swiper-recenter (&rest args) "recenter display after swiper" (recenter) ) (advice-add 'swiper :after #'bjm-swiper-recenter)
(defun embolden-or-bold (arg)
(interactive "p")
(if (region-active-p)
;; (wrap-region-trigger arg "*")
(let ((s (replace-regexp-in-string
"[*]" "" (delete-and-extract-region (region-beginning) (region-end)))))
(insert "*")
(insert s)
(insert "*"))
(embolden-next-word)))
(defadvice load-theme (after load-theme-advice activate)
(custom-set-faces
'(bold ((t (:inherit font-lock-warning-face :weight bold))))
'(org-quote ((t (:inherit default))))
;; '(org-link ((t (:underline nil))))
'(org-done ((,class (:weight bold :box (:line-width 1 :color "#BBBBBB") :foreground "#BBBBBB" :background "green"))))
(org-mode)
))
(define-key key-minor-mode-map (kbd "] i t") 'org-inlinetask-insert-task)
(global-unset-key (kbd "] cr"))
(define-key key-minor-mode-map (kbd "] cr") 'load-roam-config)
(define-key key-minor-mode-map (kbd "] cs") 'load-search-config)
(define-key key-minor-mode-map (kbd "] ci") 'load-spacemacs-config)
(define-key key-minor-mode-map (kbd "] ]") 'insert-right-bracket)
(defun fix-image-links () (interactive) (goto-char 1) (while (search-forward-regexp "[[\(.*?\).jpg][\(.*?\).jpg]]" nil t) (replace-match "[[" (match-string 1) ".jpg]]" t nil)) (while (search-forward-regexp "[[\(.*?\).png][\(.*?\).png]]" nil t) (replace-match "[[" (match-string 1) ".png]]" t nil)) )
different → different
(defun replace-missing-ligatures ()
"Replace goofy MS and other garbage characters with latin1 equivalents."
(interactive)
(save-excursion ; save the current point
(replace-string "de cit" "deficit" nil (point-min) (point-max))
(replace-string "di eren" "differen" nil (point-min) (point-max))
(replace-string "e ective" "effective" nil (point-min) (point-max))
(replace-string "de ne" "define" nil (point-min) (point-max))
(replace-string "re ect" "reflect" nil (point-min) (point-max))
(replace-string "o er" "offer" nil (point-min) (point-max))
(replace-string "con den" "confiden" nil (point-min) (point-max))
(replace-string "con ict" "conflict" nil (point-min) (point-max))
;(replace-string "nd" "find" nil (point-min) (point-max)); whole word only
;(replace-string "ve" "five" nil (point-min) (point-max)); this one should be whole word only
; (replace-string "ve" "they" nil (point-min) (point-max)); this one should be whole word only
; (replace-string "ve" "the" nil (point-min) (point-max)); this one should be whole word only
(replace-string "scientifc" "scientific" nil (point-min) (point-max))
))
(use-package web-mode
:defer
:init
(add-hook 'web-mode-hook (lambda () (abbrev-mode -1)))
(rainbow-mode)
(rspec-mode)
(setq web-mode-markup-indent-offset 2)
:bind (:map web-mode-map
("s-O" . prelude-open-with)))
(setq flyspell-abbrev-p t)
(setq flyspell-use-global-abbrev-table-p t)
(setq global-flyspell-mode t)
(use-package mw-thesaurus
:defer)
(load "/Users/jay/emacs/emacs-secret/secret-codes.el")
(define-key key-minor-mode-map (kbd "M-s-t") 'mw-thesaurus-lookup-at-point)