* TODO [1/59] Reorganize this file to follow Emacs manual
:PROPERTIES:
:CREATED:  [2026-03-25 Wed 12:28]
:ID:       94287925-725f-49da-9c7a-961e1b4189b7
:EDITED:   [2026-04-07 Tue 13:42]
:END:
*** TODO [2/8] Help
**** TODO [1/8] Completion
***** TODO [0/1] Company
:LOGBOOK:
- State "DONE"       from "TODO"       [2023-07-05 Wed 16:46]
:END:
#+begin_src elisp :tangle no
  (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)
  	   )
      )
  #+end_src
  
#+begin_src elisp :tangle no
  (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))

    )
#+end_src

#+begin_src elisp :tangle no
  (use-package company-capf
    :after company
    :config
    (add-to-list 'company-backends '(company-capf))
    )
#+end_src

#+begin_src elisp :tangle no
  (use-package company-ispell
    :after company
    )
  (add-to-list 'company-backends '(company-ispell))
#+end_src

#+begin_src elisp :tangle no
  (use-package company-files
    :after company
    )
  (add-to-list 'company-backends '(company-files))
#+end_src

****** TODO Required for proportional font
:LOGBOOK:
- State "DONE"       from "TODO"       [2023-07-05 Wed 16:46]
:END:
#+begin_src elisp :tangle no
  (use-package company-posframe
    :diminish company-posframe-mode
    :config (company-posframe-mode)
    )
#+end_src

***** DONE [5/5] [[https://tuhdo.github.io/helm-intro.html][Helm]]
:LOGBOOK:
- State "DONE"       from "NEXT"       [2023-08-18 Fri 12:57]
:END:

****** CNCL Basic Helm
#+begin_src elisp :tangle no
  (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))
  	 )
    )
#+end_src

****** CNCL Interface to silversearch-ag for fast search among entire folders
    :LOGBOOK:
    - State "DONE"       from "TODO"       [2024-02-12 Mon 16:13]
    :END:

#+begin_src elisp :tangle no
  (use-package helm-ag)
#+end_src

****** CNCL [[https://github.com/emacs-helm/helm-firefox][Display firefox bookmarks with emacs helm interface]] :emacs:web:archive:
:PROPERTIES:
:TITLE:    GitHub - emacs-helm/helm-firefox: Display firefox bookmarks with emacs helm interface
:URI:      tps://github.com/emacs-helm/helm-firefox
:CREATED:  [2023-01-28 Sat 09:11]
:END:
:LOGBOOK:
- State "CNCL"   from "TODO"       [2023-08-18 Fri 12:56] \\
  Not using Firefox bookmarks for now.
:END:

#+begin_src elisp :tangle no
  (use-package helm-firefox)
#+end_src

****** CNCL Allow refiling to level, override Helm to complete refiling target
:LOGBOOK:
- State "DONE"       from "TODO"       [2023-07-07 Fri 16:50]
:END:
#+begin_src elisp :tangle no
  (setq org-refile-use-outline-path 'file)
#+end_src

****** CNCL Shell history
:LOGBOOK:
- State "DONE"       from "TODO"       [2023-08-18 Fri 13:01]
:END:

#+begin_src elisp :tangle no
  (use-package helm-shell-history)
#+end_src

***** TODO [4/5] [[https://kristofferbalintona.me/posts/202202211546/][Vertico, Marginalia, All-the-icons-completion, and Orderless]]
:LOGBOOK:
- State "DONE"       from "DONE"       [2024-07-19 Fri 14:12]
- State "DONE"       from "TODO"       [2024-07-19 Fri 13:56]
:END:
****** DONE [[https://github.com/minad/vertico][Vertico]]
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-19 Fri 13:34]
:END:

#+begin_src elisp
  (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))
  )
#+end_src

#+begin_src elisp
  (use-package savehist
    :init
    (savehist-mode)
    )
#+end_src

#+begin_src elisp
;; 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))
#+end_src

****** DONE [[https://github.com/minad/marginalia/][Marginalia]]
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-19 Fri 13:35]
:END:

#+begin_src elisp
  (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))
    )
#+end_src

****** DONE [[https://github.com/oantolin/orderless][Orderless]]

Seast space separated words with no order.

#+begin_src elisp
  (use-package orderless
    :config
    (setq completion-styles '(orderless basic))
    (setq completion-category-overrides '((file (styles basic partial-completion))))
    )
#+end_src

****** DONE [[https://github.com/minad/consult][Consult]]
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-19 Fri 13:35]
:END:

#+begin_src elisp
  ;; 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)
)
#+end_src

****** TODO All the icons completion
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-19 Fri 13:35]
:END:

#+begin_src elisp :tangle no
  (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)
  )
#+end_src

**** DONE Repeating Minibuffer Commands
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-24 Wed 11:30]
:END:

Instead of C-x o, C-x o, C-x o, you can use C-x o o o.

#+begin_src elisp
  (repeat-mode)
#+end_src

**** DONE Yes or No Prompts
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-24 Wed 11:30]
:END:

#+begin_src elisp
  (defalias 'yes-or-no-p 'y-or-n-p)
#+end_src

**** TODO [1/11] 10 Help
***** DONE Add ~/org/info to when searching for INFO documentation after Info-mode has started

 #+begin_src elisp
   ;; 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)
#+end_src

**** TODO [7/29] 18 File Handling
***** TODO 18.20 Filesets
***** DONE Recent files

#+begin_src elisp
  ;; Recentf mode changes
  (defvar recentf-max-saved-items 1000)
  (defvar recentf-exclude '("/tmp/" "/ssh:"))
  (recentf-mode)
#+end_src

***** DONE Backup

Keep folders clean (create new directory when not yet existing)

#+begin_src elisp
  (make-directory (expand-file-name "backups/" org-directory) t)
  (setq backup-directory-alist `(("." . ,(expand-file-name "backups/" org-directory))))
#+end_src

***** DONE Save versions
:LOGBOOK:
- State "DONE"       from "TODO"       [2023-07-05 Wed 14:10]
:END:
I am not sure if I will end up using this or git, but here we are for now

#+begin_src elisp
(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)))
#+end_src

***** DONE Auto saving

Away from my file tree

#+begin_src elisp
  (setq auto-save-file-name-transforms `((".*" ,temporary-file-directory t))
        create-lockfiles nil)
#+end_src

***** DONE Large file warning
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-19 Fri 15:11]
:END:

#+begin_src elisp
  (setq large-file-warning-threshold (* 15 1024 1024))
#+end_src

***** DONE Move deleted files to trash
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-19 Fri 15:15]
:END:

#+begin_src elisp
  (setq delete-by-moving-to-trash t)
#+end_src

***** DONE [[https://github.com/magit/magit][Magit]]
:PROPERTIES:
:CREATED:  [2023-01-29 Sun 10:12]
:CLOSED:   [2023-02-01 Wed 21:58]
:END:
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-19 Fri 15:15]
:END:

#+begin_src elisp
  (use-package magit)
#+end_src

***** TODO [[https://github.com/DerBeutlin/filetags.el][Filetags: manage filetags in the filename]]
:PROPERTIES:
:TITLE:    Filetags: Emacs package to manage filetags in the filename
:URI:      https://github.com/DerBeutlin/filetags.el
:CREATED:  [2023-01-28 Sat 08:58]
:END:
:LOGBOOK:
- State "DONE"       from "TODO"       [2023-07-12 Wed 12:43]
:END:

#+begin_src elisp :tangle no
  (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)
    )
#+end_src

***** TODO [[https://github.com/joostkremers/pandoc-mode][pandoc-mode]]
:PROPERTIES:
:TITLE:    GitHub - joostkremers/pandoc-mode: An Emacs minor mode for interacting with Pandoc.
:URI:      https://github.com/joostkremers/pandoc-mode
:CREATED:  [2023-01-29 Sun 10:20]
:END:
:LOGBOOK:
- 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]
:END:

#+begin_src elisp :tangle no
  (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
    )
#+end_src

****** DONE Install [[https://pandoc.org/index.html][Pandoc - index]]
CLOSED: [2023-01-31 Tue 05:11]
:PROPERTIES:
:CREATED:  [2023-01-29 Sun 10:15]
:CLOSED:   [2023-01-31 Tue 05:11]
:END:

**** TODO [3/9] Buffers
***** TODO [1/2] Icons
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-09 Tue 17:08]
:END:

****** DONE [[https://github.com/domtronn/all-the-icons.el][all-the-icons.el]]
:LOGBOOK:
- 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]
:END:

#+begin_src elisp
  (use-package all-the-icons
    :if (display-graphic-p)
    )
#+end_src

****** TODO [0/4] all-the-icons Mode Line
     :LOGBOOK:
     - 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]
     :END:

#+begin_src elisp :tangle no
  (setq mode-line-format '("%e"
  			 (:eval
  			  (concat
  			   (custom-modeline-modified)
  			   (custom-modeline-region-info)
  			   (custom-modeline-flycheck-status)
  			   (custom-modeline-icon-vc)
  			   )
  			  )
  			 )
        )
#+end_src

******* TODO Modified or read only
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-06-27 Thu 11:15]
:END:
#+begin_src elisp :tangle no
     (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)))
                     )
         )
       )
#+end_src

******* TODO Region marking
   :LOGBOOK:
   - State "DONE"       from "TODO"       [2024-06-27 Thu 11:15]
   - State "DONE"       from "TODO"       [2023-08-18 Fri 12:16]
   :END:

#+begin_src elisp :tangle no
  (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))))))
#+end_src

******* TODO Version control icon
   :LOGBOOK:
   - 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]
   :END:
#+begin_src elisp :tangle no
  (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)))))
#+end_src

******* TODO Flycheck checker information
   :LOGBOOK:
   - State "DONE"       from "TODO"       [2024-06-27 Thu 11:16]
   - State "DONE"       from "TODO"       [2023-08-18 Fri 11:49]
   :END:

#+begin_src elisp :tangle no
  (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))))))
#+end_src

***** TODO Scroll to the first and last line of the buffer

#+begin_src elisp :tangle no
 (setq scroll-error-top-bottom t)
#+end_src
  
***** DONE Narrow to region

#+begin_src elisp
  (put 'narrow-to-region 'disabled nil)
#+end_src

***** DONE Paragraph text wrapping

#+begin_src elisp
  (setq global-visual-line-mode t)
#+end_src

***** TODO Increase line spacing

#+begin_src elisp :tangle no
  (setq line-spacing 6)
#+end_src

***** TODO RTL Support
:LOGBOOK:
- State "DONE"       from "TODO"       [2023-07-05 Wed 12:19]
:END:

For a correct RTL display you can add the following snippet to your init file:

#+begin_src elisp :tangle no
    (defun set-bidi-env ()
      (interactive)
      (setq bidi-paragraph-direction 'nil)
      )

  (add-hook 'org-mode-hook 'set-bidi-env)
#+end_src

***** TODO File encoding system

#+begin_src elisp :tangle no
  (prefer-coding-system 'utf-8)
  (setq buffer-file-coding-system 'utf-8-auto-unix)
#+end_src

***** DONE Overwrite selected text

#+begin_src elisp
  (delete-selection-mode t)
#+end_src

***** TODO Expand region
:LOGBOOK:
- State "DONE"       from "NEXT"       [2023-08-03 Thu 13:11]
:END:

#+begin_src elisp :tangle no
  (use-package expand-region
    :bind ("C-=" . er/expand-region)
    )
#+end_src

**** 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
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-29 Mon 16:50]
:END:
#+begin_src elisp
  (when window-system
    (scroll-bar-mode 0)
    )
#+end_src
***** TODO 21.13 Window Dividers
***** TODO 21.14 Drag and Drop
***** DONE 21.15 Menu Bars
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-29 Mon 16:49]
:END:
#+begin_src elisp
  (when window-system
    (menu-bar-mode 0)
    )
#+end_src
***** DONE 21.16 Tool Bars
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-29 Mon 16:49]
:END:
#+begin_src elisp
  (when window-system
    (tool-bar-mode 0)
    )
#+end_src
***** 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
:LOGBOOK:

- State "DONE"       from "TODO"       [2024-07-20 Sat 11:07]
:END:
***** DONE Set the initial frame size and position
 :LOGBOOK:
 - State "DONE"       from "TODO"       [2024-07-20 Sat 11:03]
 - State "DONE"       from "TODO"       [2024-07-08 Mon 22:11]
 :END:

 #+begin_src elisp
   ;; 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
           )
         )
 #+end_src

***** DONE Set frame margins to zero, window margins to zero

 #+begin_src elisp
   (modify-all-frames-parameters '((internal-border-width . 0)))
 #+end_src

***** DONE Initial screen
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-19 Fri 13:59]
:END:

#+begin_src elisp
  (setq inhibit-splash-screen t)
  (setq inhibit-startup-message t)
  (setq initial-scratch-message "")
  (setq initial-major-mode 'org-mode)
#+end_src

***** DONE Startup echo message

#+begin_src elisp
  (defun display-startup-echo-area-message ()
    "Display a welcome message."
    (message "Ladies and gentlemen, we are floating in space!")
    )
#+end_src

***** DONE [[https://protesilaos.com/emacs/ef-themes][Theme]]
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-16 Tue 19:50]
- State "DONE"       from "TODO"       [2024-07-10 Wed 17:06]
:END:

#+begin_src elisp
   ;; 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'
    )
#+end_src

***** DONE Set the cursor shape and blinking
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-20 Sat 11:05]
:END:

#+begin_src elisp
  (setq-default cursor-type '(box . 1)) ; Bar cursor
  (blink-cursor-mode -1) ; Don't blink the cursor
#+end_src

**** TODO [9/10] Windows
:LOGBOOK:
- State "DONE"       from "DONE"       [2024-07-16 Tue 20:04]
:END:

***** DONE Save windows arrangement
#+begin_src elisp
  (when (fboundp 'winner-mode)
    (winner-mode t)
    )
#+end_src
  
***** DONE Switch to other-window
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-16 Tue 20:04]
:END:

#+begin_src elisp
  (use-package ace-window
    :config
    (defvar aw-dispatch-always nil) ; works for less than three buffers
    :bind
    ("M-o" . ace-window)
      )
#+end_src

***** DONE Neotree
 :LOGBOOK:
 - State "DONE"       from "TODO"       [2024-07-19 Fri 15:22]
 - State "DONE"       from "TODO"       [2023-07-05 Wed 16:48]
 :END:

 #+begin_src elisp
   (use-package neotree
     :init (defvar neo-smart-open t)
     :config (defvar neo-theme (if (display-graphic-p) 'icons 'arrow))
   )
 #+end_src

***** DONE Tab Line
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-16 Tue 19:51]
:END:
    
#+begin_src elisp
  (global-tab-line-mode)
#+end_src

***** DONE [3/3] Mode Line
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-20 Sat 11:10]
- State "DONE"       from "DONE"       [2024-07-09 Tue 17:08]
:END:

****** DONE Basic settings

#+begin_src elisp
  (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)
  )
#+end_src

****** DONE [3/3] Format
:LOGBOOK:
- State "DONE"       from "TODO"       [2024-07-19 Fri 15:26]
:END:

******** DONE Default format

#+begin_src elisp
  ;; Default format:
  ;;   * init.el  4:32 Top                                         ELisp  ! Issues: 2
  (defvar mood-line-format mood-line-format-default)
#+end_src

******** CNCL Extended format

#+begin_src elisp :tangle no
  ;; Extended format:
  ;;   * init.el  4:32:52 Top                    SPCx2  LF  UTF-8  ELisp  ! Issues: 2
  (defvar mood-line-format mood-line-format-default-extended)
#+end_src

******** CNCL Custom format

#+begin_src elisp :tangle no
  ;; 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)            . "  "))))
#+end_src

****** DONE [3/3] Glyphs
******** CNCL Default glyphs

#+begin_src elisp :tangle no
  ;; The default set of glyphs:
  ;;   * myModifiedFile.js  Replace*3                 + main  JavaScript  ! Issues: 2
  (defvar mood-line-glyph-alist mood-line-glyphs-ascii)
#+end_src

******** CNCL Fira Code-compatible Unicode glyphs

#+begin_src elisp :tangle no
  ;; 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)
#+end_src

********  DONE Unicode glyphs

#+begin_src elisp
  ;; A set of Unicode glyphs:
  ;;   ● myModifiedFile.js  Replace✕3                 🞤 main  JavaScript  ⚑ Issues: 2
  (defvar mood-line-glyph-alist mood-line-glyphs-unicode)
#+end_src

***** CNCL Add clock
:LOGBOOK:
- State "DONE"       from "TODO"       [2023-07-05 Wed 16:48]
:END:
Modify this later to show clock only in full-screen mode

#+begin_src elisp :tangle no
(display-time-mode nil)
#+end_src

***** DONE [[https://github.com/emacsmirror/diminish][Diminish]] minor modes from the mode line
:LOGBOOK:
- State "DONE"       from "NEXT"       [2023-08-03 Thu 13:05]
:END:

#+begin_src elisp
   (use-package diminish
     :demand t
     :diminish (visual-line-mode . "ω")
     :diminish abbrev-mode
     :diminish auto-fill-function
     )
#+end_src

***** DONE [[https://github.com/justbur/emacs-which-key][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

#+begin_src elisp
  (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)
    )
#+end_src

**** 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
:LOGBOOK:
- State "DONE"       from              [2023-08-22 Tue 11:10]
:END:

#+begin_src elisp
  (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
#+end_src

***** TODO [[https://github.com/rolandwalker/unicode-fonts][Unicode Fonts]]

[[https://www.emacswiki.org/emacs/UnicodeFonts][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.

#+begin_src elisp :tangle no
  (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)
    )
#+end_src

**** 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
:LOGBOOK:
- State "CNCL"       from "DONE"       [2024-07-10 Wed 11:30] \\
  Not needed
- State "DONE"       from "TODO"       [2023-07-05 Wed 16:48]
:END:

#+begin_src elisp :tangle no
  (use-package discover-my-major
    :bind (("C-h C-m" . discover-my-major)
           ("C-h M-m" . discover-my-mode)
           )
    )
#+end_src

**** 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.6.1 Auto Fill Mode
****** TODO 25.6.2 Explicit Fill Commands
****** TODO 25.6.3 The Fill Prefix
****** TODO 25.6.4 Adaptive Filling
***** TODO 25.7 Case Conversion Commands
***** TODO 25.8 Text Mode
***** TODO [0/5] 25.9 Outline Mode
****** TODO 25.9.1 Format of Outlines
****** TODO 25.9.2 Outline Motion Commands
****** TODO 25.9.3 Outline Visibility Commands
****** TODO 25.9.4 Viewing One Outline in Multiple Views
****** TODO 25.9.5 Folding Editing
***** TODO [0/2] 25.10 Org Mode
****** TODO 25.10.1 Org as an organizer
****** TODO 25.10.2 Org as an authoring system
***** TODO [0/4] 25.11 TeX Mode
****** TODO 25.11.1 TeX Editing Commands
****** TODO 25.11.2 LaTeX Editing Commands
****** TODO 25.11.3 TeX Printing Commands
****** TODO 25.11.4 TeX Mode Miscellany
***** TODO 25.12 SGML and HTML Modes
***** TODO 25.13 Nroff Mode
***** TODO [0/7] 25.14 Enriched Text
****** TODO 25.14.1 Enriched Mode
****** TODO 25.14.2 Hard and Soft Newlines
****** TODO 25.14.3 Editing Format Information
****** TODO 25.14.4 Faces in Enriched Text
****** TODO 25.14.5 Indentation in Enriched Text
****** TODO 25.14.6 Justification in Enriched Text
****** TODO 25.14.7 Setting Other Text Properties
***** TODO [0/8] 25.15 Editing Text-based Tables
****** TODO 25.15.1 What is a Text-based Table?
****** TODO 25.15.2 Creating a Table
****** TODO 25.15.3 Table Recognition
****** TODO 25.15.4 Commands for Table Cells
****** TODO 25.15.5 Cell Justification
****** TODO 25.15.6 Table Rows and Columns
****** TODO 25.15.7 Converting Between Plain Text and Tables
****** TODO 25.15.8 Table Miscellany
***** 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 26.2.1 Left Margin Convention
****** TODO 26.2.2 Moving by Defuns
****** TODO 26.2.3 Imenu
****** TODO 26.2.4 Which Function Mode
***** TODO [0/5] 26.3 Indentation for Programs
****** TODO 26.3.1 Basic Program Indentation Commands
****** TODO 26.3.2 Indenting Several Lines
****** TODO 26.3.3 Customizing Lisp Indentation
****** TODO 26.3.4 Commands for C Indentation
****** TODO 26.3.5 Customizing C Indentation
***** TODO [0/3] 26.4 Commands for Editing with Parentheses
****** TODO 26.4.1 Expressions with Balanced Parentheses
****** TODO 26.4.2 Moving in the Parenthesis Structure
****** TODO 26.4.3 Matching Parentheses
***** TODO [0/3] 26.5 Manipulating Comments
****** TODO 26.5.1 Comment Commands
****** TODO 26.5.2 Multiple Lines of Comments
****** TODO 26.5.3 Options Controlling Comments
***** TODO [0/3] 26.6 Documentation Lookup
****** TODO 26.6.1 Info Documentation Lookup
****** TODO 26.6.2 Man Page Lookup
****** TODO 26.6.3 Emacs Lisp 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.12.1 C Mode Motion Commands
****** TODO 26.12.2 Electric C Characters
****** TODO 26.12.3 Hungry Delete Feature in C
****** TODO 26.12.4 Other Commands for C Mode
***** TODO 26.13 Asm Mode
***** TODO [0/6] 26.14 Fortran Mode
****** TODO 26.14.1 Motion Commands
****** TODO [0/5] 26.14.2 Fortran Indentation
******* TODO 26.14.2.1 Fortran Indentation and Filling Commands
******* TODO 26.14.2.2 Continuation Lines
******* TODO 26.14.2.3 Line Numbers
******* TODO 26.14.2.4 Syntactic Conventions
******* TODO 26.14.2.5 Variables for Fortran Indentation
****** TODO 26.14.3 Fortran Comments
****** TODO 26.14.4 Auto Fill in Fortran Mode
****** TODO 26.14.5 Checking Columns in Fortran
****** TODO 26.14.6 Fortran Keyword Abbrevs
**** 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
****** TODO 27.6.1 Starting GUD
****** TODO 27.6.2 Debugger Operation
****** TODO 27.6.3 Commands of GUD
****** TODO 27.6.4 GUD Customization
****** TODO [0/8] 27.6.5 GDB Graphical Interface
******* TODO 27.6.5.1 GDB User Interface Layout
******* TODO 27.6.5.2 Source Buffers
******* TODO 27.6.5.3 Breakpoints Buffer
******* TODO 27.6.5.4 Threads Buffer
******* TODO 27.6.5.5 Stack Buffer
******* TODO 27.6.5.6 Other GDB Buffers
******* TODO 27.6.5.7 Watch Expressions
******* TODO 27.6.5.8 Multithreaded Debugging
***** 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
****** TODO [0/7] 28.1.1 Introduction to Version Control
******* TODO 28.1.1.1 Understanding the Problems it Addresses
******* TODO 28.1.1.2 Supported Version Control Systems
******* TODO 28.1.1.3 Concepts of Version Control
******* TODO 28.1.1.4 Merge-based vs Lock-based Version Control
******* TODO 28.1.1.5 Changeset-based vs File-based Version Control
******* TODO 28.1.1.6 Decentralized vs Centralized Repositories
******* TODO 28.1.1.7 Types of Log File
****** TODO 28.1.2 Version Control and the Mode Line
****** TODO [0/3] 28.1.3 Basic Editing under Version Control
******* TODO 28.1.3.1 Basic Version Control with Merging
******* TODO 28.1.3.2 Basic Version Control with Locking
******* TODO 28.1.3.3 Advanced Control in C-x v v
****** TODO 28.1.4 Features of the Log Entry Buffer
****** TODO 28.1.5 Registering a File for Version Control
****** TODO 28.1.6 Examining And Comparing Old Revisions
****** TODO 28.1.7 VC Change Log
****** TODO 28.1.8 Undoing Version Control Actions
****** TODO 28.1.9 Ignore Version Control Files
****** TODO [0/2] 28.1.10 VC Directory Mode
******* TODO 28.1.10.1 The VC Directory Buffer
******* TODO 28.1.10.2 VC Directory Commands
****** TODO [0/4] 28.1.11 Version Control Branches
******* TODO 28.1.11.1 Switching between Branches
******* TODO 28.1.11.2 Pulling/Pushing Changes into/from a Branch
******* TODO 28.1.11.3 Merging Branches
******* TODO 28.1.11.4 Creating New Branches
****** TODO [0/4] 28.1.12 Miscellaneous Commands and Features of VC
******* TODO 28.1.12.1 Change Logs and VC
******* TODO 28.1.12.2 Deleting and Renaming Version-Controlled Files
******* TODO 28.1.12.3 Revision Tags
******* TODO 28.1.12.4 Inserting Version Control Headers
****** TODO [0/3] 28.1.13 Customizing VC
******* TODO 28.1.13.1 General Options
******* TODO 28.1.13.2 Options for RCS and SCCS
******* TODO 28.1.13.3 Options specific for CVS
***** TODO [0/4] 28.2 Working with Projects
****** TODO 28.2.1 Project Commands That Operate on Files
****** TODO 28.2.2 Project Commands That Operate on Buffers
****** TODO 28.2.3 Switching Projects
****** TODO 28.2.4 Managing the Project List File
***** TODO [0/2] 28.3 Change Logs
****** TODO 28.3.1 Change Log Commands
****** TODO 28.3.2 Format of ChangeLog
***** TODO [0/3] 28.4 Find Identifier References
****** TODO [0/4] 28.4.1 Find Identifiers
******* TODO 28.4.1.1 Looking Up Identifiers
******* TODO 28.4.1.2 Commands Available in the *xref* Buffer
******* TODO 28.4.1.3 Searching and Replacing with Identifiers
******* TODO 28.4.1.4 Identifier Inquiries
****** TODO [0/3] 28.4.2 Tags Tables
******* TODO 28.4.2.1 Source File Tag Syntax
******* TODO 28.4.2.2 Creating Tags Tables
******* TODO 28.4.2.3 Etags Regexps
****** TODO 28.4.3 Selecting a Tags Table
***** TODO 28.5 Emacs Development Environment
***** TODO [0/7] 28.6 Merging Files with Emerge
****** TODO 28.6.1 Overview of Emerge
****** TODO 28.6.2 Submodes of Emerge
****** TODO 28.6.3 State of a Difference
****** TODO 28.6.4 Merge Commands
****** TODO 28.6.5 Exiting Emerge
****** TODO 28.6.6 Combining the Two Versions
****** TODO 28.6.7 Fine Points of 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

#+begin_src elisp :tangle no
  (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))
    )
#+end_src

***** TODO Images in dired

#+begin_src elisp :tangle no
  ;; 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
#+end_src

***** TODO Icons in dired

#+begin_src elisp :tangle no
  (use-package all-the-icons-dired
    :after dired all-the-icons
    :if (display-graphic-p)
    )
#+end_src

***** TODO [[https://github.com/DerBeutlin/date2name.el][Date2name: add ISO timestamps to files in dired]]
:PROPERTIES:
:TITLE:    GitHub - DerBeutlin/date2name.el: Emacs package to add ISO timestamps to files in dired
:URI:      https://github.com/DerBeutlin/date2name.el
:CREATED:  [2023-01-28 Sat 06:20]
:END:
:LOGBOOK:
- State "DONE"       from "TODO"       [2023-07-12 Wed 12:44]
:END:

#+begin_src elisp :tangle no
  (use-package date2name)
#+end_src




**** TODO [0/4] 37 Document Viewing
***** TODO 37.3 DocView Slicing
#+begin_src elisp
  (setq doc-view-continuous t)
#+end_src
















