48 KiB
[1/59]Reorganize this file to follow Emacs manual[2/8]Help[1/8]Completion- Repeating Minibuffer Commands
- Yes or No Prompts
[1/11]10 Help[7/29]18 File Handling[3/9]Buffers[3/22]21 Frames and Graphical Displays- 21.1 Mouse Commands for Editing
- 21.2 Mouse Commands for Words and Lines
- 21.3 Following References with the Mouse
- 21.4 Mouse Clicks for Menus
- 21.5 Mode Line Mouse Commands
- 21.6 Creating Frames
- 21.7 Frame Commands
- 21.8 Fonts
- 21.9 Speedbar Frames
- 21.10 Multiple Displays
- 21.11 Frame Parameters
- 21.12 Scroll Bars
- 21.13 Window Dividers
- 21.14 Drag and Drop
- 21.15 Menu Bars
- 21.16 Tool Bars
- 21.17 Tab Bars
- 21.18 Using Dialog Boxes
- 21.19 Tooltips
- 21.20 Mouse Avoidance
- 21.21 Non-Window Terminals
- 21.22 Using a Mouse in Text Terminals
[7/7]Frames[9/10]Windows[0/19]22 International Character Set Support- 22.1 Introduction to International Character Sets
- 22.2 Language Environments
- 22.3 Input Methods
- 22.4 Selecting an Input Method
- 22.5 Coding Systems
- 22.6 Recognizing Coding Systems
- 22.7 Specifying a File’s Coding System
- 22.8 Choosing Coding Systems for Output
- 22.9 Specifying a Coding System for File Text
- 22.10 Coding Systems for Interprocess Communication
- 22.11 Coding Systems for File Names
- 22.12 Coding Systems for Terminal I/O
- 22.13 Fontsets
- 22.14 Defining Fontsets
- 22.15 Modifying Fontsets
- 22.16 Undisplayable Characters
- 22.17 Unibyte Editing Mode
- 22.18 Charsets
- 22.19 Bidirectional Editing
[0/2]International[1/4]23 Major and Minor Modes[0/4]24 Indentation[0/16]25 Commands for Human Languages- 25.1 Words
- 25.2 Sentences
- 25.3 Paragraphs
- 25.4 Pages
- 25.5 Quotation Marks
[0/4]25.6 Filling Text- 25.7 Case Conversion Commands
- 25.8 Text Mode
[0/5]25.9 Outline Mode[0/2]25.10 Org Mode[0/4]25.11 TeX Mode- 25.12 SGML and HTML Modes
- 25.13 Nroff Mode
[0/7]25.14 Enriched Text[0/8]25.15 Editing Text-based Tables- 25.16 Two-Column Editing
[0/14]26 Editing Programs- 26.1 Major Modes for Programming Languages
[0/4]26.2 Top-Level Definitions, or Defuns[0/5]26.3 Indentation for Programs[0/3]26.4 Commands for Editing with Parentheses[0/3]26.5 Manipulating Comments[0/3]26.6 Documentation Lookup- 26.7 Hideshow minor mode
- 26.8 Completion for Symbol Names
- 26.9 MixedCase Words
- 26.10 Semantic
- 26.11 Other Features Useful for Editing Programs
[0/4]26.12 C and Related Modes- 26.13 Asm Mode
[0/6]26.14 Fortran Mode
[0/11]27 Compiling and Testing Programs- 27.1 Running Compilations under Emacs
- 27.2 Compilation Mode
- 27.3 Subshells for Compilation
- 27.4 Searching with Grep under Emacs
- 27.5 Finding Syntax Errors On The Fly
[0/5]27.6 Running Debuggers Under Emacs- 27.7 Executing Lisp Expressions
- 27.8 Libraries of Lisp Code for Emacs
- 27.9 Evaluating Emacs Lisp Expressions
- 27.10 Lisp Interaction Buffers
- 27.11 Running an External Lisp
[0/7]28 Maintaining Large Programs[0/13]28.1 Version Control[0/7]28.1.1 Introduction to Version Control- 28.1.1.1 Understanding the Problems it Addresses
- 28.1.1.2 Supported Version Control Systems
- 28.1.1.3 Concepts of Version Control
- 28.1.1.4 Merge-based vs Lock-based Version Control
- 28.1.1.5 Changeset-based vs File-based Version Control
- 28.1.1.6 Decentralized vs Centralized Repositories
- 28.1.1.7 Types of Log File
- 28.1.2 Version Control and the Mode Line
[0/3]28.1.3 Basic Editing under Version Control- 28.1.4 Features of the Log Entry Buffer
- 28.1.5 Registering a File for Version Control
- 28.1.6 Examining And Comparing Old Revisions
- 28.1.7 VC Change Log
- 28.1.8 Undoing Version Control Actions
- 28.1.9 Ignore Version Control Files
[0/2]28.1.10 VC Directory Mode[0/4]28.1.11 Version Control Branches[0/4]28.1.12 Miscellaneous Commands and Features of VC[0/3]28.1.13 Customizing VC
[0/4]28.2 Working with Projects[0/2]28.3 Change Logs[0/3]28.4 Find Identifier References- 28.5 Emacs Development Environment
[0/7]28.6 Merging Files with Emerge- 28.7 Bug Reference
[0/8]29 Abbrevs[0/22]30 Dired, the Directory Editor- 30.1 Entering Dired
- 30.2 Navigation in the Dired Buffer
- 30.3 Deleting Files with Dired
- 30.4 Flagging Many Files at Once
- 30.5 Visiting Files in Dired
- 30.6 Dired Marks vs. Flags
- 30.7 Operating on Files
- 30.8 Shell Commands in Dired
- 30.9 Transforming File Names in Dired
- 30.10 File Comparison with Dired
- 30.11 Subdirectories in Dired
- 30.12 Subdirectory Switches in Dired
- 30.13 Moving Over Subdirectories
- 30.14 Hiding Subdirectories
- 30.15 Updating the Dired Buffer
- 30.16 Dired and find
- 30.17 Editing the Dired Buffer
- 30.18 Viewing Image Thumbnails in Dired
- 30.19 Other Dired Features
- Basic settings
- Images in dired
- Icons in dired
- Date2name: add ISO timestamps to files in dired
[0/4]37 Document Viewing
TODO
[1/59] Reorganize this file to follow Emacs manual
TODO
[2/8] Help
TODO
[1/8] Completion
TODO
[0/1] Company
- State "DONE" from "TODO" [2023-07-05 Wed 16:46]
(use-package company
:diminish company-mode
:config
(defvar company-minimum-prefix-length 3)
(defvar company-idle-delay 0)
(defvar company-global-modes t)
(defvar company-selection-wrap-around t)
(defvar company-tooltip-align-annotations t)
(defvar company-backends '((
company-capf
company-dabbrev-code
company-dabbrev
company-ispell
company-files
company-web
company-shell
company-posframe
)))
(global-company-mode)
(add-hook 'after-init-hook 'global-company-mode)
(add-hook 'after-init-hook 'company-tng-mode)
(with-eval-after-load 'company
(define-key company-active-map (kbd "M-/") #'company-complete))
(with-eval-after-load 'company
(define-key company-active-map
(kbd "TAB")
#'company-complete-common-or-cycle)
(define-key company-active-map
(kbd "<backtab>")
(lambda ()
(interactive)
(company-complete-common-or-cycle -1))))
:bind (
( "<tab>" . company-indent-or-complete-common)
( "C-c C-l" . company-other-backend)
)
)
(use-package company-shell
:after company
:config
(add-to-list 'company-backends '(company-shell
company-shell-env
company-fish-shell
)
)
(setq company-transformers '(delete-consecutive-dups
company-sort-by-occurrence))
)
(use-package company-capf
:after company
:config
(add-to-list 'company-backends '(company-capf))
)
(use-package company-ispell
:after company
)
(add-to-list 'company-backends '(company-ispell))
(use-package company-files
:after company
)
(add-to-list 'company-backends '(company-files))
- State "DONE" from "TODO" [2023-07-05 Wed 16:46]
(use-package company-posframe
:diminish company-posframe-mode
:config (company-posframe-mode)
)
DONE
[5/5] Helm
- State "DONE" from "NEXT" [2023-08-18 Fri 12:57]
(use-package helm
:init (helm-mode)
:config
(defvar helm-M-x-fuzzy-match t)
(defvar helm-recentf-fuzzy-match t)
(defvar helm-buffers-fuzzy-matching t)
(defvar helm-locate-fuzzy-match t)
(defvar helm-mode-fuzzy-match t)
(defvar helm-split-window-inside-p nil) ; open helm buffer inside current window, not occupy whole other window
(defvar helm-lisp-fuzzy-completion t)
:bind (
("M-x" . helm-M-x) ;; Evaluate functions
("C-x C-f" . helm-find-files) ;; Open or create files
("C-x b" . helm-mini) ;; Select buffers
("C-x C-r" . helm-recentf) ;; Select recently saved files
("C-c i" . helm-imenu) ;; Select document heading
("M-y" . helm-show-kill-ring) ;; Show the kill ring
(:map helm-map
("C-z" . helm-select-action)
("<tab>" . helm-execute-persistent-action))
)
)
- State "DONE" from "TODO" [2024-02-12 Mon 16:13]
(use-package helm-ag)
- State "CNCL" from "TODO" [2023-08-18 Fri 12:56]
Not using Firefox bookmarks for now.
(use-package helm-firefox)
- State "DONE" from "TODO" [2023-07-07 Fri 16:50]
(setq org-refile-use-outline-path 'file)
- State "DONE" from "TODO" [2023-08-18 Fri 13:01]
(use-package helm-shell-history)
TODO
[4/5] Vertico, Marginalia, All-the-icons-completion, and Orderless
- State "DONE" from "DONE" [2024-07-19 Fri 14:12]
- State "DONE" from "TODO" [2024-07-19 Fri 13:56]
- State "DONE" from "TODO" [2024-07-19 Fri 13:34]
(use-package vertico
:demand t ; Otherwise won't get loaded immediately
:init (vertico-mode)
:straight (vertico :files (:defaults "extensions/*") ; Special recipe to load extensions conveniently
:includes (vertico-indexed
vertico-flat
vertico-grid
vertico-mouse
vertico-quick
vertico-buffer
vertico-repeat
vertico-reverse
vertico-directory
vertico-multiform
vertico-unobtrusive
))
:config
(setq vertico-cycle t)
(setq vertico-count 13)
(setq vertico-resize nil)
(setq vertico-cycle nil)
;; Extensions
(setq vertico-grid-separator " ")
(setq vertico-grid-lookahead 50)
(setq vertico-buffer-display-action '(display-buffer-reuse-window))
(setq vertico-multiform-categories
'((file reverse)
(consult-grep buffer)
(consult-location)
(imenu buffer)
(library reverse indexed)
(org-roam-node reverse indexed)
(t reverse)
)
)
(setq vertico-multiform-commands
'(("flyspell-correct-*" grid reverse)
(org-refile grid reverse indexed)
(consult-yank-pop indexed)
(consult-flycheck)
(consult-lsp-diagnostics)
)
)
;; Extensions
(vertico-multiform-mode)
:bind (:map vertico-map
("C-j" . vertico-next)
("C-k" . vertico-previous)
("C-f" . vertico-exit)
:map minibuffer-local-map
("M-h" . backward-kill-word))
)
(use-package savehist
:init
(savehist-mode)
)
;; A few more useful configurations...
(use-package emacs
:custom
;; Support opening new minibuffers from inside existing minibuffers.
(enable-recursive-minibuffers t)
;; Emacs 28 and newer: Hide commands in M-x which do not work in the current
;; mode. Vertico commands are hidden in normal buffers. This setting is
;; useful beyond Vertico.
(read-extended-command-predicate #'command-completion-default-include-p)
:init
;; Add prompt indicator to `completing-read-multiple'.
;; We display [CRM<separator>], e.g., [CRM,] if the separator is a comma.
(defun crm-indicator (args)
(cons (format "[CRM%s] %s"
(replace-regexp-in-string
"\\`\\[.*?]\\*\\|\\[.*?]\\*\\'" ""
crm-separator)
(car args))
(cdr args)))
(advice-add #'completing-read-multiple :filter-args #'crm-indicator)
;; Do not allow the cursor in the minibuffer prompt
(setq minibuffer-prompt-properties
'(read-only t cursor-intangible t face minibuffer-prompt))
(add-hook 'minibuffer-setup-hook #'cursor-intangible-mode))
- State "DONE" from "TODO" [2024-07-19 Fri 13:35]
(use-package marginalia
:init
(marginalia-mode)
:config
(setq marginalia-max-relative-age 0)
(setq marginalia-align 'right)
:bind (("M-A" . marginalia-cycle)
:map minibuffer-local-map
("M-A" . marginalia-cycle))
)
Seast space separated words with no order.
(use-package orderless
:config
(setq completion-styles '(orderless basic))
(setq completion-category-overrides '((file (styles basic partial-completion))))
)
- State "DONE" from "TODO" [2024-07-19 Fri 13:35]
;; Example configuration for Consult
(use-package consult
;; Replace bindings. Lazily loaded by `use-package'.
:bind (;; C-c bindings in `mode-specific-map'
("C-c M-x" . consult-mode-command)
("C-c h" . consult-history)
("C-c k" . consult-kmacro)
("C-c m" . consult-man)
("C-c i" . consult-info)
([remap Info-search] . consult-info)
;; C-x bindings in `ctl-x-map'
("C-x M-:" . consult-complex-command) ;; orig. repeat-complex-command
("C-x b" . consult-buffer) ;; orig. switch-to-buffer
("C-x 4 b" . consult-buffer-other-window) ;; orig. switch-to-buffer-other-window
("C-x 5 b" . consult-buffer-other-frame) ;; orig. switch-to-buffer-other-frame
("C-x t b" . consult-buffer-other-tab) ;; orig. switch-to-buffer-other-tab
("C-x r b" . consult-bookmark) ;; orig. bookmark-jump
("C-x p b" . consult-project-buffer) ;; orig. project-switch-to-buffer
;; Custom M-# bindings for fast register access
("M-#" . consult-register-load)
("M-'" . consult-register-store) ;; orig. abbrev-prefix-mark (unrelated)
("C-M-#" . consult-register)
;; Other custom bindings
("M-y" . consult-yank-pop) ;; orig. yank-pop
;; M-g bindings in `goto-map'
("M-g e" . consult-compile-error)
("M-g f" . consult-flymake) ;; Alternative: consult-flycheck
("M-g g" . consult-goto-line) ;; orig. goto-line
("M-g M-g" . consult-goto-line) ;; orig. goto-line
("M-g o" . consult-outline) ;; Alternative: consult-org-heading
("M-g m" . consult-mark)
("M-g k" . consult-global-mark)
("M-g i" . consult-imenu)
("M-g I" . consult-imenu-multi)
;; M-s bindings in `search-map'
("M-s d" . consult-find) ;; Alternative: consult-fd
("M-s c" . consult-locate)
("M-s g" . consult-grep)
("M-s G" . consult-git-grep)
("M-s r" . consult-ripgrep)
("M-s l" . consult-line)
("M-s L" . consult-line-multi)
("M-s k" . consult-keep-lines)
("M-s u" . consult-focus-lines)
;; Isearch integration
("M-s e" . consult-isearch-history)
:map isearch-mode-map
("M-e" . consult-isearch-history) ;; orig. isearch-edit-string
("M-s e" . consult-isearch-history) ;; orig. isearch-edit-string
("M-s l" . consult-line) ;; needed by consult-line to detect isearch
("M-s L" . consult-line-multi) ;; needed by consult-line to detect isearch
;; Minibuffer history
:map minibuffer-local-map
("M-s" . consult-history) ;; orig. next-matching-history-element
("M-r" . consult-history)) ;; orig. previous-matching-history-element
;; Enable automatic preview at point in the *Completions* buffer. This is
;; relevant when you use the default completion UI.
:hook (completion-list-mode . consult-preview-at-point-mode)
;; The :init configuration is always executed (Not lazy)
:init
;; Optionally configure the register formatting. This improves the register
;; preview for `consult-register', `consult-register-load',
;; `consult-register-store' and the Emacs built-ins.
(setq register-preview-delay 0.5
register-preview-function #'consult-register-format)
;; Optionally tweak the register preview window.
;; This adds thin lines, sorting and hides the mode line of the window.
(advice-add #'register-preview :override #'consult-register-window)
;; Use Consult to select xref locations with preview
(setq xref-show-xrefs-function #'consult-xref
xref-show-definitions-function #'consult-xref)
;; Configure other variables and modes in the :config section,
;; after lazily loading the package.
:config
;; Optionally configure preview. The default value
;; is 'any, such that any key triggers the preview.
;; (setq consult-preview-key 'any)
;; (setq consult-preview-key "M-.")
;; (setq consult-preview-key '("S-<down>" "S-<up>"))
;; For some commands and buffer sources it is useful to configure the
;; :preview-key on a per-command basis using the `consult-customize' macro.
(consult-customize
consult-theme :preview-key '(:debounce 0.2 any)
consult-ripgrep consult-git-grep consult-grep
consult-bookmark consult-recent-file consult-xref
consult--source-bookmark consult--source-file-register
consult--source-recent-file consult--source-project-recent-file
;; :preview-key "M-."
:preview-key '(:debounce 0.4 any))
;; Optionally configure the narrowing key.
;; Both < and C-+ work reasonably well.
(setq consult-narrow-key "<") ;; "C-+"
;; Optionally make narrowing help available in the minibuffer.
;; You may want to use `embark-prefix-help-command' or which-key instead.
;; (keymap-set consult-narrow-map (concat consult-narrow-key " ?") #'consult-narrow-help)
)
- State "DONE" from "TODO" [2024-07-19 Fri 13:35]
(use-package all-the-icons-completion
:after (marginalia all-the-icons)
:hook (marginalia-mode . all-the-icons-completion-marginalia-setup)
:init
(all-the-icons-completion-mode)
)
DONE Repeating Minibuffer Commands
- State "DONE" from "TODO" [2024-07-24 Wed 11:30]
Instead of C-x o, C-x o, C-x o, you can use C-x o o o.
(repeat-mode)
DONE Yes or No Prompts
- State "DONE" from "TODO" [2024-07-24 Wed 11:30]
(defalias 'yes-or-no-p 'y-or-n-p)
TODO
[1/11] 10 Help
DONE Add ~/org/info to when searching for INFO documentation after Info-mode has started
;; Define the variable globally (outside any hook)
(defvar info-additiononal-directory-list nil
"List of additional directories to search for Info files.")
;; Set the variable inside the hook
(add-hook 'info-mode-hook
(lambda ()
(setq info-additional-directory-list (list (concat org-directory "/info")))
)
)
(global-set-key (kbd "C-c l") #'dictionary-lookup-definition)
TODO
[7/29] 18 File Handling
TODO 18.20 Filesets
DONE Recent files
;; Recentf mode changes
(defvar recentf-max-saved-items 1000)
(defvar recentf-exclude '("/tmp/" "/ssh:"))
(recentf-mode)
DONE Backup
Keep folders clean (create new directory when not yet existing)
(make-directory (expand-file-name "backups/" org-directory) t)
(setq backup-directory-alist `(("." . ,(expand-file-name "backups/" org-directory))))
DONE Save versions
- State "DONE" from "TODO" [2023-07-05 Wed 14:10]
I am not sure if I will end up using this or git, but here we are for now
(setq delete-old-versions -1)
(setq version-control t)
(setq vc-make-backup-files t)
(setq auto-save-file-name-transforms '((".*" "~/.emacs.d/auto-save-list/" t)))
DONE Auto saving
Away from my file tree
(setq auto-save-file-name-transforms `((".*" ,temporary-file-directory t))
create-lockfiles nil)
DONE Large file warning
- State "DONE" from "TODO" [2024-07-19 Fri 15:11]
(setq large-file-warning-threshold (* 15 1024 1024))
DONE Move deleted files to trash
- State "DONE" from "TODO" [2024-07-19 Fri 15:15]
(setq delete-by-moving-to-trash t)
DONE Magit
- State "DONE" from "TODO" [2024-07-19 Fri 15:15]
(use-package magit)
TODO Filetags: manage filetags in the filename
- State "DONE" from "TODO" [2023-07-12 Wed 12:43]
(use-package filetags
:config
(setq filetags-enforce-controlled-vocabulary nil)
(setq filetags-controlled-vocabulary '(("winter" "summer") ("emacs")))
(setq filetags-load-controlled-vocabulary-from-file nil)
)
TODO pandoc-mode
- State "DONE" from "TODO" [2023-08-18 Fri 13:04]
- State "DONE" from "WAIT" [2023-07-07 Fri 15:00]
- State "DONE" from "TODO" [2023-07-07 Fri 14:53]
(use-package pandoc-mode
:after hydra
:config
(add-hook 'markdown-mode-hook 'pandoc-mode) ;; Pandoc minor mode in markdown
(add-hook 'pandoc-mode-hook 'pandoc-load-default-settings) ;; if a settings file for this format exists
)
CLOSED: [2023-01-31 Tue 05:11]
TODO
[3/9] Buffers
TODO
[1/2] Icons
- State "DONE" from "TODO" [2024-07-09 Tue 17:08]
- State "DONE" from "TODO" [2024-07-19 Fri 14:01]
- State "DONE" from "TODO" [2024-06-27 Thu 11:02]
- State "DONE" from "TODO" [2023-08-28 Mon 18:55]
- State "DONE" from "DONE" [2023-08-18 Fri 12:31]
(use-package all-the-icons
:if (display-graphic-p)
)
[0/4] all-the-icons Mode Line
- State "DONE" from "TODO" [2024-07-09 Tue 17:07]
- State "DONE" from "TODO" [2024-07-09 Tue 15:57]
- State "DONE" from "TODO" [2023-08-28 Mon 18:54]
(setq mode-line-format '("%e"
(:eval
(concat
(custom-modeline-modified)
(custom-modeline-region-info)
(custom-modeline-flycheck-status)
(custom-modeline-icon-vc)
)
)
)
)
- State "DONE" from "TODO" [2024-06-27 Thu 11:15]
(defun custom-modeline-modified ()
(let* ((config-alist
'(
("*" all-the-icons-faicon-family all-the-icons-faicon "chain-broken" :height 1.2 :v-adjust -0.0)
("-" all-the-icons-faicon-family all-the-icons-faicon "link" :height 1.2 :v-adjust -0.0)
("%" all-the-icons-octicon-family all-the-icons-octicon "lock" :height 1.2 :v-adjust 0.1)
)
)
(result (cdr (assoc (format-mode-line "%*") config-alist)))
)
(propertize (apply (cadr result) (cddr result))
'face `(:family ,(funcall (car result)))
)
)
)
- State "DONE" from "TODO" [2024-06-27 Thu 11:15]
- State "DONE" from "TODO" [2023-08-18 Fri 12:16]
(defun custom-modeline-region-info ()
(when mark-active
(let ((words (count-lines (region-beginning) (region-end)))
(chars (count-words (region-end) (region-beginning))))
(concat
(propertize (format " %s" (all-the-icons-octicon "pencil") words chars)
'face `(:family ,(all-the-icons-octicon-family))
'display '(raise -0.0))
(propertize (format " (%s, %s)" words chars)
'face `(:height 0.9))))))
- State "DONE" from "TODO" [2024-06-27 Thu 11:15]
- State "DONE" from "TODO" [2023-08-18 Fri 12:16]
- State "DONE" from "TODO" [2023-07-07 Fri 12:17]
(defun -custom-modeline-github-vc ()
(let ((branch (mapconcat 'concat (cdr (split-string vc-mode "[:-]")) "-")))
(concat
(propertize (format " %s" (all-the-icons-alltheicon "git")) 'face `(:height 1.2) 'display '(raise -0.1))
" · "
(propertize (format "%s" (all-the-icons-octicon "git-branch"))
'face `(:height 1.3 :family ,(all-the-icons-octicon-family))
'display '(raise -0.1))
(propertize (format " %s" branch) 'face `(:height 0.9)))))
(defun -custom-modeline-svn-vc ()
(let ((revision (cadr (split-string vc-mode "-"))))
(concat
(propertize (format " %s" (all-the-icons-faicon "cloud")) 'face `(:height 1.2) 'display '(raise -0.1))
(propertize (format " · %s" revision) 'face `(:height 0.9)))))
(defun custom-modeline-icon-vc ()
(when vc-mode
(cond
((string-match "Git[:-]" vc-mode) (-custom-modeline-github-vc))
((string-match "SVN-" vc-mode) (-custom-modeline-svn-vc))
(t (format "%s" vc-mode)))))
- State "DONE" from "TODO" [2024-06-27 Thu 11:16]
- State "DONE" from "TODO" [2023-08-18 Fri 11:49]
(defun custom-modeline-flycheck-status ()
(let* ((text (pcase flycheck-last-status-change
(`finished (if flycheck-current-errors
(let ((count (let-alist (flycheck-count-errors flycheck-current-errors)
(+ (or .warning 0) (or .error 0)))))
(format "✖ %s Issue%s" count (unless (eq 1 count) "s")))
"✔ No Issues"))
(`running "⟲ Running")
(`no-checker "⚠ No Checker")
(`not-checked "✖ Disabled")
(`errored "⚠ Error")
(`interrupted "⛔ Interrupted")
(`suspicious ""))))
(propertize text
'help-echo "Show Flycheck Errors"
'mouse-face '(:box 1)
'local-map (make-mode-line-mouse-map
'mouse-1 (lambda () (interactive) (flycheck-list-errors))))))
TODO Scroll to the first and last line of the buffer
(setq scroll-error-top-bottom t)
DONE Narrow to region
(put 'narrow-to-region 'disabled nil)
DONE Paragraph text wrapping
(setq global-visual-line-mode t)
TODO Increase line spacing
(setq line-spacing 6)
TODO RTL Support
- State "DONE" from "TODO" [2023-07-05 Wed 12:19]
For a correct RTL display you can add the following snippet to your init file:
(defun set-bidi-env ()
(interactive)
(setq bidi-paragraph-direction 'nil)
)
(add-hook 'org-mode-hook 'set-bidi-env)
TODO File encoding system
(prefer-coding-system 'utf-8)
(setq buffer-file-coding-system 'utf-8-auto-unix)
DONE Overwrite selected text
(delete-selection-mode t)
TODO Expand region
- State "DONE" from "NEXT" [2023-08-03 Thu 13:11]
(use-package expand-region
:bind ("C-=" . er/expand-region)
)
TODO
[3/22] 21 Frames and Graphical Displays
TODO 21.1 Mouse Commands for Editing
TODO 21.2 Mouse Commands for Words and Lines
TODO 21.3 Following References with the Mouse
TODO 21.4 Mouse Clicks for Menus
TODO 21.5 Mode Line Mouse Commands
TODO 21.6 Creating Frames
TODO 21.7 Frame Commands
TODO 21.8 Fonts
TODO 21.9 Speedbar Frames
TODO 21.10 Multiple Displays
TODO 21.11 Frame Parameters
DONE 21.12 Scroll Bars
- State "DONE" from "TODO" [2024-07-29 Mon 16:50]
(when window-system
(scroll-bar-mode 0)
)
TODO 21.13 Window Dividers
TODO 21.14 Drag and Drop
DONE 21.15 Menu Bars
- State "DONE" from "TODO" [2024-07-29 Mon 16:49]
(when window-system
(menu-bar-mode 0)
)
DONE 21.16 Tool Bars
- State "DONE" from "TODO" [2024-07-29 Mon 16:49]
(when window-system
(tool-bar-mode 0)
)
TODO 21.17 Tab Bars
TODO 21.18 Using Dialog Boxes
TODO 21.19 Tooltips
TODO 21.20 Mouse Avoidance
TODO 21.21 Non-Window Terminals
TODO 21.22 Using a Mouse in Text Terminals
DONE
[7/7] Frames
- State "DONE" from "TODO" [2024-07-20 Sat 11:07]
DONE Set the initial frame size and position
- State "DONE" from "TODO" [2024-07-20 Sat 11:03]
- State "DONE" from "TODO" [2024-07-08 Mon 22:11]
;; initial frame
(setq initial-frame-alist
'((width . 192) ; characters in a line
(height . 37) ; number of lines
(top . 1) ; top position
(left . 1) ; left position
)
)
;; sebsequent frame
(setq default-frame-alist
'((width . 192) ; characters in a line
(height . 37) ; number of lines
)
)
DONE Set frame margins to zero, window margins to zero
(modify-all-frames-parameters '((internal-border-width . 0)))
DONE Initial screen
- State "DONE" from "TODO" [2024-07-19 Fri 13:59]
(setq inhibit-splash-screen t)
(setq inhibit-startup-message t)
(setq initial-scratch-message "")
(setq initial-major-mode 'org-mode)
DONE Startup echo message
(defun display-startup-echo-area-message ()
"Display a welcome message."
(message "Ladies and gentlemen, we are floating in space!")
)
DONE Theme
- State "DONE" from "TODO" [2024-07-16 Tue 19:50]
- State "DONE" from "TODO" [2024-07-10 Wed 17:06]
;; Make customisations that affect Emacs faces BEFORE loading a theme
;; (any change needs a theme re-load to take effect).
;; (require 'ef-themes)
(use-package ef-themes
:config
;; If you like two specific themes and want to switch between them, you
;; can specify them in `ef-themes-to-toggle' and then invoke the command
;; `ef-themes-toggle'. All the themes are included in the variable
;; `ef-themes-collection'.
(defvar ef-themes-to-toggle '(ef-summer ef-winter))
(defvar ef-themes-headings ; read the manual's entry or the doc string
'((0 variable-pitch light 1.9)
(1 variable-pitch light 1.8)
(2 variable-pitch regular 1.7)
(3 variable-pitch regular 1.6)
(4 variable-pitch regular 1.5)
(5 variable-pitch 1.4) ; absence of weight means `bold'
(6 variable-pitch 1.3)
(7 variable-pitch 1.2)
(t variable-pitch 1.1)))
;; They are nil by default...
(defvar ef-themes-mixed-fonts t)
(defvar ef-themes-variable-pitch-ui t)
;; Disable all other themes to avoid awkward blending:
(mapc #'disable-theme custom-enabled-themes)
;; Load the theme of choice:
(load-theme 'ef-winter :no-confirm)
;; OR use this to load the theme which also calls `ef-themes-post-load-hook':
(ef-themes-select 'ef-winter)
;; The themes we provide are recorded in the `ef-themes-dark-themes',
;; `ef-themes-light-themes'.
;; We also provide these commands, but do not assign them to any key:
;;
;; - `ef-themes-toggle'
;; - `ef-themes-select'
;; - `ef-themes-select-dark'
;; - `ef-themes-select-light'
;; - `ef-themes-load-random'
;; - `ef-themes-preview-colors'
;; - `ef-themes-preview-colors-current'
)
DONE Set the cursor shape and blinking
- State "DONE" from "TODO" [2024-07-20 Sat 11:05]
(setq-default cursor-type '(box . 1)) ; Bar cursor
(blink-cursor-mode -1) ; Don't blink the cursor
TODO
[9/10] Windows
- State "DONE" from "DONE" [2024-07-16 Tue 20:04]
DONE Save windows arrangement
(when (fboundp 'winner-mode)
(winner-mode t)
)
DONE Switch to other-window
- State "DONE" from "TODO" [2024-07-16 Tue 20:04]
(use-package ace-window
:config
(defvar aw-dispatch-always nil) ; works for less than three buffers
:bind
("M-o" . ace-window)
)
DONE Neotree
- State "DONE" from "TODO" [2024-07-19 Fri 15:22]
- State "DONE" from "TODO" [2023-07-05 Wed 16:48]
(use-package neotree
:init (defvar neo-smart-open t)
:config (defvar neo-theme (if (display-graphic-p) 'icons 'arrow))
)
DONE Tab Line
- State "DONE" from "TODO" [2024-07-16 Tue 19:51]
(global-tab-line-mode)
DONE
[3/3] Mode Line
- State "DONE" from "TODO" [2024-07-20 Sat 11:10]
- State "DONE" from "DONE" [2024-07-09 Tue 17:08]
(use-package mood-line
;; Enable mood-line
:config
(mood-line-mode)
;; Use pretty Fira Code-compatible glyphs
(defvar mood-line-glyph-alist mood-line-glyphs-fira-code)
)
[3/3] Format
- State "DONE" from "TODO" [2024-07-19 Fri 15:26]
;; Default format:
;; * init.el 4:32 Top ELisp ! Issues: 2
(defvar mood-line-format mood-line-format-default)
;; Extended format:
;; * init.el 4:32:52 Top SPCx2 LF UTF-8 ELisp ! Issues: 2
(defvar mood-line-format mood-line-format-default-extended)
;; Custom format:
;; * init.el : ELisp Top 4:32 | ! Issues: 2
(setq mood-line-format
(mood-line-defformat
:left
(((mood-line-segment-buffer-status) . " ")
((mood-line-segment-buffer-name) . " : ")
(mood-line-segment-major-mode))
:right
(((mood-line-segment-scroll) . " ")
((mood-line-segment-cursor-position) . " ")
((when (mood-line-segment-checker) "|") . " ")
((mood-line-segment-checker) . " "))))
[3/3] Glyphs
;; The default set of glyphs:
;; * myModifiedFile.js Replace*3 + main JavaScript ! Issues: 2
(defvar mood-line-glyph-alist mood-line-glyphs-ascii)
;; A set of Fira Code-compatible Unicode glyphs:
;; ● myModifiedFile.js Replace×3 + main JavaScript → Issues: 2
(setq mood-line-glyph-alist mood-line-glyphs-fira-code)
;; A set of Unicode glyphs:
;; ● myModifiedFile.js Replace✕3 🞤 main JavaScript ⚑ Issues: 2
(defvar mood-line-glyph-alist mood-line-glyphs-unicode)
CNCL Add clock
- State "DONE" from "TODO" [2023-07-05 Wed 16:48]
Modify this later to show clock only in full-screen mode
(display-time-mode nil)
DONE Diminish minor modes from the mode line
- State "DONE" from "NEXT" [2023-08-03 Thu 13:05]
(use-package diminish
:demand t
:diminish (visual-line-mode . "ω")
:diminish abbrev-mode
:diminish auto-fill-function
)
DONE Which-key
Figure out the next keystroke. which-key package opens a small buffer at the bottom with suggestions for next keystroke and possible commands that are available
(use-package which-key
:config
(defvar which-key-sort-order 'which-key-key-order-alpha)
(defvar which-key-idle-delay 0.05)
(which-key-mode)
(which-key-setup-minibuffer)
(which-key-setup-side-window-right)
)
TODO
[0/19] 22 International Character Set Support
TODO 22.1 Introduction to International Character Sets
TODO 22.2 Language Environments
TODO 22.3 Input Methods
TODO 22.4 Selecting an Input Method
TODO 22.5 Coding Systems
TODO 22.6 Recognizing Coding Systems
TODO 22.7 Specifying a File’s Coding System
TODO 22.8 Choosing Coding Systems for Output
TODO 22.9 Specifying a Coding System for File Text
TODO 22.10 Coding Systems for Interprocess Communication
TODO 22.11 Coding Systems for File Names
TODO 22.12 Coding Systems for Terminal I/O
TODO 22.13 Fontsets
TODO 22.14 Defining Fontsets
TODO 22.15 Modifying Fontsets
TODO 22.16 Undisplayable Characters
TODO 22.17 Unibyte Editing Mode
TODO 22.18 Charsets
TODO 22.19 Bidirectional Editing
TODO
[0/2] International
TODO
[0/1] Fonts
- State "DONE" from [2023-08-22 Tue 11:10]
(set-face-attribute 'default nil :font "Cantarell") ;; default font
; (set-fontset-font t nil "sans-serif" nil 'append) ;; fallback font
(set-face-attribute 'fixed-pitch nil :family "Monospace")
; (set-fontset-font t 'arabic "Amiri") ;; default Arabic font
; (set-fontset-font t 'arabic "Simplified Arabic" nil 'append) ;; default Arabic fallback
; (set-fontset-font t 'arabic (font-spec :script 'arabic) nil 'append) ;; if font not available, don't display boxes
TODO Unicode Fonts
EmacsWiki: If you are using a language written in Chinese or Arabic script, try customizing ‘unicode-fonts-skip-font-groups’ to control which script you see, and send a friendly bug report.
(use-package unicode-fonts
:config
(defvar unicode-fonts-block-font-mapping
'(("Emoticons" ("Apple Color Emoji" "Symbola" "Quivira"))))
(defvar unicode-fonts-fontset-names '("fontset-default"))
(defvar unicode-skip-font-groups '(""))
(unicode-fonts-setup)
)
TODO
[1/4] 23 Major and Minor Modes
TODO 23.1 Major Modes
TODO 23.2 Minor Modes
TODO 23.3 Choosing File Modes
CNCL Discover major mode
- State "CNCL" from "DONE" [2024-07-10 Wed 11:30]
Not needed - State "DONE" from "TODO" [2023-07-05 Wed 16:48]
(use-package discover-my-major
:bind (("C-h C-m" . discover-my-major)
("C-h M-m" . discover-my-mode)
)
)
TODO
[0/4] 24 Indentation
TODO 24.1 Indentation Commands
TODO 24.2 Tab Stops
TODO 24.3 Tabs vs. Spaces
TODO 24.4 Convenience Features for Indentation
TODO
[0/16] 25 Commands for Human Languages
TODO 25.1 Words
TODO 25.2 Sentences
TODO 25.3 Paragraphs
TODO 25.4 Pages
TODO 25.5 Quotation Marks
TODO
[0/4] 25.6 Filling Text
TODO 25.7 Case Conversion Commands
TODO 25.8 Text Mode
TODO
[0/5] 25.9 Outline Mode
TODO
[0/2] 25.10 Org Mode
TODO
[0/4] 25.11 TeX Mode
TODO 25.12 SGML and HTML Modes
TODO 25.13 Nroff Mode
TODO
[0/7] 25.14 Enriched Text
TODO
[0/8] 25.15 Editing Text-based Tables
TODO 25.16 Two-Column Editing
TODO
[0/14] 26 Editing Programs
TODO 26.1 Major Modes for Programming Languages
TODO
[0/4] 26.2 Top-Level Definitions, or Defuns
TODO
[0/5] 26.3 Indentation for Programs
TODO
[0/3] 26.4 Commands for Editing with Parentheses
TODO
[0/3] 26.5 Manipulating Comments
TODO
[0/3] 26.6 Documentation Lookup
TODO 26.7 Hideshow minor mode
TODO 26.8 Completion for Symbol Names
TODO 26.9 MixedCase Words
TODO 26.10 Semantic
TODO 26.11 Other Features Useful for Editing Programs
TODO
[0/4] 26.12 C and Related Modes
TODO 26.13 Asm Mode
TODO
[0/6] 26.14 Fortran Mode
[0/5] 26.14.2 Fortran Indentation
TODO
[0/11] 27 Compiling and Testing Programs
TODO 27.1 Running Compilations under Emacs
TODO 27.2 Compilation Mode
TODO 27.3 Subshells for Compilation
TODO 27.4 Searching with Grep under Emacs
TODO 27.5 Finding Syntax Errors On The Fly
TODO
[0/5] 27.6 Running Debuggers Under Emacs
[0/8] 27.6.5 GDB Graphical Interface
TODO 27.7 Executing Lisp Expressions
TODO 27.8 Libraries of Lisp Code for Emacs
TODO 27.9 Evaluating Emacs Lisp Expressions
TODO 27.10 Lisp Interaction Buffers
TODO 27.11 Running an External Lisp
TODO
[0/7] 28 Maintaining Large Programs
TODO
[0/13] 28.1 Version Control
[0/7] 28.1.1 Introduction to Version Control
[0/3] 28.1.3 Basic Editing under Version Control
[0/2] 28.1.10 VC Directory Mode
[0/4] 28.1.11 Version Control Branches
[0/4] 28.1.12 Miscellaneous Commands and Features of VC
[0/3] 28.1.13 Customizing VC
TODO
[0/4] 28.2 Working with Projects
TODO
[0/2] 28.3 Change Logs
TODO
[0/3] 28.4 Find Identifier References
[0/4] 28.4.1 Find Identifiers
[0/3] 28.4.2 Tags Tables
TODO 28.5 Emacs Development Environment
TODO
[0/7] 28.6 Merging Files with Emerge
TODO 28.7 Bug Reference
TODO
[0/8] 29 Abbrevs
TODO 29.1 Abbrev Concepts
TODO 29.2 Defining Abbrevs
TODO 29.3 Controlling Abbrev Expansion
TODO 29.4 Abbrevs Suggestions
TODO 29.5 Examining and Editing Abbrevs
TODO 29.6 Saving Abbrevs
TODO 29.7 Dynamic Abbrev Expansion
TODO 29.8 Customizing Dynamic Abbreviation
TODO
[0/22] 30 Dired, the Directory Editor
TODO 30.1 Entering Dired
TODO 30.2 Navigation in the Dired Buffer
TODO 30.3 Deleting Files with Dired
TODO 30.4 Flagging Many Files at Once
TODO 30.5 Visiting Files in Dired
TODO 30.6 Dired Marks vs. Flags
TODO 30.7 Operating on Files
TODO 30.8 Shell Commands in Dired
TODO 30.9 Transforming File Names in Dired
TODO 30.10 File Comparison with Dired
TODO 30.11 Subdirectories in Dired
TODO 30.12 Subdirectory Switches in Dired
TODO 30.13 Moving Over Subdirectories
TODO 30.14 Hiding Subdirectories
TODO 30.15 Updating the Dired Buffer
TODO 30.16 Dired and find
TODO 30.17 Editing the Dired Buffer
TODO 30.18 Viewing Image Thumbnails in Dired
TODO 30.19 Other Dired Features
TODO Basic settings
(use-package dired
:init
(setq dired-dwim-target t)
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top)
(setq dired-listing-switches "-alh")
(setq dired-listing-switches "-agho --group-directories-first") ; Sort Dired buffers
(setq dired-dwim-target t) ; Copy and move files netween dired buffers
:config
(add-hook 'dired-mode-hook 'dired-hide-details-mode)
(add-hook 'dired-mode-hook 'all-the-icons-dired-mode)
:bind (:map dired-mode-map
("C-c C-e" . wdired-change-to-wdired-mode))
)
TODO Images in dired
;; Image-dired Keyboard shortcuts
(with-eval-after-load 'dired
(define-key dired-mode-map (kbd "C-t C-d") 'image-dired)
(define-key dired-mode-map (kbd "C-<return>") 'image-dired-dired-display-external)
)
(setq image-dired-external-viewer "/usr/bin/gimp") ; Define external image viewer/edito
(put 'dired-find-alternate-file 'disabled nil) ; Open dired in same buffer
TODO Icons in dired
(use-package all-the-icons-dired
:after dired all-the-icons
:if (display-graphic-p)
)
TODO Date2name: add ISO timestamps to files in dired
- State "DONE" from "TODO" [2023-07-12 Wed 12:44]
(use-package date2name)
TODO
[0/4] 37 Document Viewing
TODO 37.3 DocView Slicing
(setq doc-view-continuous t)