Emacs. Desire. Конфигурация

2024-06-11 · 41 мин. для прочтения

Конфигурация для пакета desire.

Содержание

1 Каталоги конфигурации

2 Установка переменных

3 Конфигурационные файлы

3.1 Заголовок

  • В файле rc.packages.el находится список используемых пакетов.

  • Заголовок файла:

    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; origami-fold-style: triple-braces; -*-
    ;;; rc.packages.el
    
    ;;; Commentary:
    
    ;;
    ;;  File id
    ;;
    ;;      Copyright (C)  2002-2025 Dmitry S. Kulyabov
    ;;      Keywords:      rc.packages
    ;;      Author:        Dmitry S. Kulyabov <yamadharma@gmail.com>
    ;;      Maintainer:    Dmitry S. Kulyabov <yamadharma@gmail.com>
    ;;
    ;;      This code is free software in terms of GNU Gen. pub. Lic. v3 or later
    ;;
    
    ;;;  Description:
    
    ;;; Change Log:
    
    ;;; Code:
    
    Распечатка 1: rc.packages.el
  • Файл:

;; (desire-conf 'tiny)
(desire-conf 'personal)
;;
;; Mule
;;
(desire-conf 'mule)
;;(desire-conf 'mule-fontset)
;; ----------------------------------------------------------------------
;;
;;{{{ Xemacs

(if (string-match "XEmacs" emacs-version)
    (desired 'xemacs))

;;}}}

3.2 Управление пакетами

;;; Package management

3.2.1 Встроенный пакетный менеджер

;;; Packaging
(desire 'package)

3.2.2 Пакетный менеджер quelpa

  • Необходим для emacs-29 и старше.
  • Начиная с emacs-30 можно использовать package-vc.
  • Подключение:
    ;;; Build and install your Emacs Lisp packages on-the-fly and directly from source
    ;; (desire 'quelpa)
    
    Распечатка 2: rc.packages.el
  • Загружаем:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Build and install your Emacs Lisp packages on-the-fly directly from source
    ;; https://github.com/quelpa/quelpa
    
    (require 'quelpa)
    
    ;;;
    
    Распечатка 3: packages/quelpa/loaddefs.ecf
  • Асинхронные операции:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Build and install your Emacs Lisp packages on-the-fly directly from source
    ;; https://github.com/quelpa/quelpa
    
    ;;; If non-nil, quelpa operation will not block Emacs input
    ;; (setq quelpa-async-p t)
    
    ;;;
    
    Распечатка 4: packages/quelpa/desire.ecf
  • Обновление пакетов:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Build and install your Emacs Lisp packages on-the-fly directly from source
    ;; https://github.com/quelpa/quelpa
    
    ;;; To run quelpa-upgrade-all at most every 14 days
    ;; (setq quelpa-upgrade-interval 14)
    ;; (add-hook #'after-init-hook #'quelpa-upgrade-all-maybe)
    
    ;;;
    
    Распечатка 5: packages/quelpa/personal.ecf

3.2.3 Пакетный менеджер straight

;;; A declarative package management system with a command line interface
(desire 'straight)

3.2.4 Автообновление пакетов

;;; Auto update packages
(desire 'auto-package-update)

;;;}}}

3.3 Компиляция файлов

3.3.1 compile-angel

  • Подключим пакет:
    ;;; compile-angel.el
    (desire 'compile-angel)
    
    Распечатка 6: rc.packages.el
  • Настроим начальную конфигурацию:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Compile Emacs Lisp libraries automatically.
    ;;; https://github.com/jamescherti/compile-angel.el
    
    ;; (require 'compile-angel)
    
    ;;;
    
    Распечатка 7: packages/compile-angel/loaddefs.ecf
  • Настроим основные параметры:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Compile Emacs Lisp libraries automatically.
    ;;; https://github.com/jamescherti/compile-angel.el
    
    ;;; Ensure Emacs loads the most recent byte-compiled files.
    (setq load-prefer-newer t)
    
    ;;; Ensure JIT compilation is enabled for improved performance by
    ;;; native-compiling loaded .elc files asynchronously
    (setq native-comp-jit-compilation t)
    (setq native-comp-deferred-compilation t) ; Deprecated in Emacs > 29.1
    
    ;;; Enable/Disable byte compilation and native compilation
    (setq compile-angel-enable-byte-compile t)
    (setq compile-angel-enable-native-compile t)
    
    ;;; Enable verbose (Set it to t while debugging)
    (setq compile-angel-verbose nil)
    
    ';; Display the *Compile-Log* buffer (Set it to t while writing elisp)
    (setq compile-angel-display-buffer nil)
    
    ;;; Perform byte/native compilation of .el files only once during initial loading
    ;;; (Setting this to nil will try to compile each time an .el file is loaded)
    (setq compile-angel-on-load-mode-compile-once t)
    
    ;;; Ignore certain files, for example, for users of the `dir-config` package:
    (setq compile-angel-excluded-files-regexps '("/\\.dir-config\\.el$"))
    
    ;;; Function that determines if an .el file should be compiled. It takes one
    ;;; argument (an EL file) and returns t if the file should be compiled,
    ;;; (By default, `compile-angel-predicate-function` is set to nil, which
    ;;; means that the predicate function is not called.)
    (setq compile-angel-predicate-function
          #'(lambda(el-file)
           ;; Show a message
           (message "PREDICATE: %s" el-file)
           ;; Return t (Compile all)
           t))
    
    ;; Ensure that quitting only occurs once Emacs finishes native compiling,
    ;; preventing incomplete or leftover compilation files in `/tmp`.
    (setq native-comp-async-query-on-exit t)
    (setq confirm-kill-processes t)
    
    ;;; Show buffer when there is a warning.
    ;;; (NOT RECOMMENDED, except during development).
    ;; (setq warning-minimum-level :warning)
    ;; (setq byte-compile-verbose t)
    ;; (setq byte-compile-warnings t)
    ;; (setq native-comp-async-report-warnings-errors t)
    ;; (setq native-comp-warning-on-missing-source t)
    
    ;;; Non-nil means to natively compile packages as part of their installation.
    (setq package-native-compile t)
    
    (add-hook 'emacs-lisp-mode-hook #'compile-angel-on-save-local-mode)
    
    (compile-angel-on-save-mode)
    (compile-angel-on-load-mode)
    
    ;;;
    
    Распечатка 8: packages/compile-angel/desire.ecf

3.4 Системные настройки


;; (desire 'esup)

3.4.1 Разные настройки

  • Покидал сюда разные настройки, которые не знаю, куда разместить.
  • Подключение:
    (desire-conf 'site-stuff)
    
    Распечатка 9: rc.packages.el
  • Подключение:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    
    ;;; Code:
    
    Распечатка 10: packages/site-stuff.ecf
  • Изменение поведения C-g:
    ;;;; Make C-g a bit more helpful
    ;;;;; https://protesilaos.com/codelog/2024-11-28-basic-emacs-configuration/
    
    (defun ecf/keyboard-quit-dwim ()
      "Do-What-I-Mean behaviour for a general `keyboard-quit'.
    
    The generic `keyboard-quit' does not do the expected thing when
    the minibuffer is open.  Whereas we want it to close the
    minibuffer, even without explicitly focusing it.
    
    The DWIM behaviour of this command is as follows:
    
    - When the region is active, disable it.
    ​- When a minibuffer is open, but not focused, close the minibuffer.
    ​- When the Completions buffer is selected, close it.
    ​- In every other case use the regular `keyboard-quit'."
      (interactive)
      (cond
       ((region-active-p)
        (keyboard-quit))
       ((derived-mode-p 'completion-list-mode)
        (delete-completion-window))
       ((> (minibuffer-depth) 0)
        (abort-recursive-edit))
       (t
        (keyboard-quit))))
    
    (define-key global-map (kbd "C-g") #'ecf/keyboard-quit-dwim)
    
    Распечатка 11: packages/site-stuff.ecf
  • Оформление интерфейса:
    ;;;; Scroll bar mode
    (set-scroll-bar-mode 'left)
    (scroll-bar-mode -1)
    
    ;;;; Disable the toolbar
    (tool-bar-mode -1)
    
    ;;;; Menu bar
    (menu-bar-mode 1)
    
    Распечатка 12: packages/site-stuff.ecf
;;; Automatic decompression, hooks for tar-mode
;;;
;;(require 'jka-compr)
(auto-compression-mode t)

(require 'icomplete) ; Interactive completion in minibuffer.

;; Strip hostname from domain when posting news
                                      ;(setq gnus-use-generic-from t)

                                      ;(auto-compression-mode t)
;; Time in 24 hour format, plus day and date.
;;
(add-hook 'write-file-hooks 'time-stamp)
                                      ; (require 'mc)


(setq max-specpdl-size 1000)


;;; Set the fringe a little wider to ensure the text isn’t too close to the window border
;; (fringe-mode 16 . nil)

;; Strip iccc encoding when paste from clipboard
                                      ;(defun fix-rus-letter ()
                                      ;  (interactive)
                                      ;  (goto-char (point-min))
                                      ;  (while (search-forward-regexp ".%/1..koi8-r." nil t)
                                      ;    (replace-match ""))
                                      ;)

;;; Показывает пробелы и табы в конце строк
(setq show-trailing-whitespace t)

;;; Prevent horizontal window splitting for Emacs 23
;; (setq split-width-threshold 9999)

(setq inhibit-startup-message t)

(fset 'yes-or-no-p 'y-or-n-p)

;;; Отключить создание резервных копий
(custom-set-variables '(make-backup-files nil "Отключить создание резервных копий"))

;;; Cursor
(custom-set-variables '(cursor-type 'bar "Внешний вид курсора — вертикальная черта"))
;; Отключить мерцание курсора
(blink-cursor-mode 0)

;;; Highlight Current Line
(global-hl-line-mode 1)

;;; Warnings
;;; Disable report warnings and errors from asynchronous native compilation
(setq native-comp-async-report-warnings-errors nil)

;;; Not to warn you about anything except problems
;;; :debug | :warning | :error | :emergency
(setq warning-minimum-level :error)

;;; Don't pop up UI dialogs when prompting
(setq use-dialog-box nil)

;;; Revert buffers when the underlying file has changed
(global-auto-revert-mode 1)
;;; Revert Dired and other buffers
(setq global-auto-revert-non-file-buffers t)

;;; Make searches case insensitive
(setq case-fold-search t)

;;; Tab completion in minibuffer: case insensitive
(setq completion-ignore-case  t)

;;;

3.4.2 Разное


;;{{{ Window System

(if (null window-system)
    ()
  (progn
    (desire-conf 'window-system)
                                      ;    (desire-conf  'faces)
                                      ;    (desire-conf  'multi-frame)
    )
  )


;; (if (null window-system)
;;  ()
;;  (desire-conf 'window-system)
;; )

;; (desire-conf 'window-system)
;; (desire-conf 'test)

;; (if (eq window-system 'w32)
;;  (progn
;;    (desired 'window-system)
;;    (desired 'window-system-w32)
;;  )
;; )

;; (if (and window-system
;;	 (member window-system '(x gtk))
;;	 (x-display-color-p)
;;    )
;;    (progn
;;      (desired 'window-system)
;;      (desire-conf  'faces)
;;      (desire-conf  'multi-frame)
;;    )
;; )

;;}}}
;;{{{ Serve

;;; Gnuserv
;;(desire-conf 'gnuserv nil "gnuserv")
;; Rely on dtemacs to do this, otherwise a race condition can cause
;; dtemacs to fail.
;; (gnuserv-start)

;;; Emacs daemon
;; (desire-conf 'emacs-daemon)

;;; Emacs server
(desire 'server)

;;}}}

(desire 'general)

(desire 'exec-path-from-shell)
(desire 'compat)

(desire 'async)
;; (desire 'gcmh)

;; ----------------------------------------------------------------------

3.5 Общие настройки мод

3.6 Поддержка LSP

3.6.1 Начало

  • Файл rc.packages.el:
    ;;; LSP mode {{{
    
    Распечатка 13: rc.packages.el

3.6.2 emacs-lsp-booster

  • Включаем поддержку emacs-lsp-booster:
    (desired 'emacs-lsp-booster :precondition-system-executable "emacs-lsp-booster")
    
    Распечатка 14: rc.packages.el

3.6.3 Eglog

  1. Сам Eglot

    • Файл rc.packages.el:
      ;; (desire 'eglot)
      
      Распечатка 15: rc.packages.el
    • Начальная загрузка:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; A client for Language Server Protocol servers
      ;;; https://github.com/joaotavora/eglot
      
      ;;;
      
      Распечатка 16: packages/eglot/loaddefs.ecf
    • Загрузка самого пакета:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; A client for Language Server Protocol servers
      ;;; https://github.com/joaotavora/eglot
      
      (require 'eglot)
      
      ;;; Control blocking of LSP connection attempts
      (setq eglot-sync-connect nil)
      
      (setq eglot-connect-timeout 10)
      (setq eglot-autoshutdown t)
      (setq eglot-send-changes-idle-time 0.5)
      
      ;;; Disable `eglot-auto-display-help-buffer` because :select t in its popup rule causes eglot to steal focus too often.
      (setq eglot-auto-display-help-buffer nil)
      
      ;;; Disable any debug logging and may speed things up
      (setq eglot-events-buffer-size 0)
      
      ;;;
      
      Распечатка 17: packages/eglot/desire.ecf
    • Загрузка emacs-lsp-booster:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Boost eglot using lsp-booster
      ;;; https://github.com/jdtsmith/eglot-booster
      
      (desire 'eglot-booster :recipe '(:fetcher github :repo "jdtsmith/eglot-booster" :branch "main" :files ("*.el")))
      (require 'eglot-booster)
      (eglot-booster-mode)
      
      ;;;
      
      Распечатка 18: packages/eglot/emacs-lsp-booster.ecf
  1. Дополнительные пакеты

    1. LaTeX

      • Загрузим поддержку LSP для LaTeX:
        ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
        ;;; A client for Language Server Protocol servers
        ;;; https://github.com/joaotavora/eglot
        
        (require 'eglot)
        
        ;;; Change order
        (let ((item (assoc '(tex-mode context-mode texinfo-mode bibtex-mode) eglot-server-programs)))
          ;; (setf (car item) '(tex-mode context-mode texinfo-mode bibtex-mode))
          (setf (cdr item) '("texlab")))
        
        (add-hook 'tex-mode-hook #'eglot-ensure)
        (add-hook 'latex-mode-hook #'eglot-ensure)
        (add-hook 'LaTeX-mode-hook #'eglot-ensure)
        
        ;;;
        
        Распечатка 19: packages/auctex/eglot.ecf

3.6.4 Lsp-mode

  1. Собственно lsp-mode

    • Подключим lsp-mode:
      (desire 'lsp-mode)
      
      Распечатка 20: rc.packages.el
    • Первоначальная конфигурация:
      ;;; Language Server Protocol support for Emacs  -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;; https://emacs-lsp.github.io/
      ;; https://github.com/emacs-lsp/lsp-mode
      
      ;;;
      
      Распечатка 21: packages/lsp-mode/loaddefs.ecf
    • Конфигурация:
      ;;; Language Server Protocol support for Emacs  -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;; https://emacs-lsp.github.io/
      ;; https://github.com/emacs-lsp/lsp-mode
      
      (require 'lsp-mode)
      
      ;;; https://emacs-lsp.github.io/lsp-ui/
      (desire 'lsp-ui)
      
      ;;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
      (setq lsp-keymap-prefix "C-l")
      
      ;;;
      
      Распечатка 22: packages/lsp-mode/desire.ecf
  1. Дополнительные пакеты

    1. LaTeX (texlab)

      • Загрузим поддержку LSP для LaTeX:
        ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
        ;;; Emacs lsp-mode client for LaTeX, on texlab
        ;;; https://github.com/ROCKTAKEY/lsp-latex
        
        (require 'lsp-mode)
        (desire 'lsp-latex :precondition-system-executable "texlab")
        
        ;;;
        
        Распечатка 23: packages/auctex/lsp-mode.ecf
      • Загрузка lsp-latex:
        ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
        ;;; Emacs lsp-mode client for LaTeX, on texlab
        ;;; https://github.com/ROCKTAKEY/lsp-latex
        
        (require 'lsp-latex)
        
        ;;; "texlab" executable must be located at a directory contained in `exec-path'.
        ;;; If you want to put "texlab" somewhere else, you can specify the path to "texlab" as follows:
        ;; (setq lsp-latex-texlab-executable "/path/to/texlab")
        
        ;;;
        
        Распечатка 24: packages/lsp-latex/loaddefs.ecf
      • Настройка lsp-latex:
        ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
        ;;; Emacs lsp-mode client for LaTeX, on texlab
        ;;; https://github.com/ROCKTAKEY/lsp-latex
        
        (add-hook 'tex-mode-hook #'lsp)
        (add-hook 'latex-mode-hook #'lsp)
        (add-hook 'LaTeX-mode-hook #'lsp)
        
        ;;; For YaTeX
        (with-eval-after-load "yatex"
          (add-hook 'yatex-mode-hook #'lsp))
        
        ;;; For bibtex
        (with-eval-after-load "bibtex"
          (add-hook 'bibtex-mode-hook #'lsp))
        
        ;;;
        
        Распечатка 25: packages/lsp-latex/desire.ecf
    1. lsp-treemacs

      • Подключение интеграции treemacs и lsp-mode:
        ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
        ;;; lsp-mode ❤️ treemacs
        ;;; https://github.com/emacs-lsp/lsp-treemacs
        
        (require 'lsp-mode)
        
        (desire 'lsp-treemacs)
        (require 'lsp-treemacs)
        
        ;;; Enable bidirectional synchronization of lsp workspace folders and treemacs projects
        (lsp-treemacs-sync-mode 1)
        
        ;;;
        
        Распечатка 26: packages/treemacs/lsp-mode.ecf
    1. which-key

      • Подключение интеграции treemacs и lsp-mode:
        ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
        ;;; lsp which-key integration
        ;;; https://emacs-lsp.github.io/lsp-mode/page/keybindings/
        
        (with-eval-after-load 'lsp-mode
          (add-hook 'lsp-mode-hook #'lsp-enable-which-key-integration))
        
        ;;;
        
        Распечатка 27: packages/which-key/lsp-mode.ecf

3.6.5 Конец

  • Файл rc.packages.el:
    
    ;;; }}}
    

3.7 Сессии

;;{{{ Session Management

(desire 'savehist)

;;}}}

3.8 Утилиты

(desire 'uniquify)

(desire-conf 'keys)
(desire-conf 'dialog)
(desire-conf 'mouse)

;; (desire 'xclip)

3.8.1 which-key

  • Подключение:
    (desire 'which-key)
    
    Распечатка 28: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs package that displays available keybindings in popup
    ;;; https://github.com/justbur/emacs-which-key
    
    (require 'which-key)
    
    ;;;
    
    Распечатка 29: packages/which-key/loaddefs.ecf
  • Конфигурация:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs package that displays available keybindings in popup
    ;;; https://github.com/justbur/emacs-which-key
    
    ;;; Key-Based replacement
    (which-key-add-key-based-replacements "C-x C-f" "find files")
    (which-key-add-major-mode-key-based-replacements
     'org-mode
     "C-c C-c" "Org C-c C-c"
     "C-c C-a" "Org Attach")
    
    ;;; Key and Description replacement
    (add-to-list 'which-key-replacement-alist '(("TAB" . nil) . ("↹" . nil)))
    (add-to-list 'which-key-replacement-alist '(("RET" . nil) . ("⏎" . nil)))
    (add-to-list 'which-key-replacement-alist '(("DEL" . nil) . ("⇤" . nil)))
    (add-to-list 'which-key-replacement-alist '(("SPC" . nil) . ("␣" . nil)))
    
    ;; Set the special keys. These are automatically truncated to one character and
    ;; have which-key-special-key-face applied. Disabled by default. An example
    ;; setting is
    ;; (setq which-key-special-keys '("SPC" "TAB" "RET" "ESC" "DEL"))
    (setq which-key-special-keys nil)
    
    
    ;;; Sorting Options
    ;;;; Default
    (setq which-key-sort-order 'which-key-key-order)
    ;;;; Same as default, except single characters are sorted alphabetically
    ;; (setq which-key-sort-order 'which-key-key-order-alpha)
    ;;;; Same as default, except all prefix keys are grouped together at the end
    ;; (setq which-key-sort-order 'which-key-prefix-then-key-order)
    ;;;; Same as default, except all keys from local maps shown first
    ;; (setq which-key-sort-order 'which-key-local-then-key-order)
    ;;;; Sort based on the key description ignoring case
    ;; (setq which-key-sort-order 'which-key-description-order)
    
    ;;; Popup Type Options
    ;;; minibuffer | side-window | frame | custom
    (setq which-key-popup-type 'minibuffer)
    
    ;;; Set the time delay (in seconds) for the which-key popup to appear
    (setq which-key-idle-delay 1.0)
    
    ;;; Set the maximum length (in characters) for key descriptions (commands or prefixes)
    (setq which-key-max-description-length 27)
    
    ;;; Use additional padding between columns of keys
    (setq which-key-add-column-padding 0)
    
    ;;; The maximum number of columns to display in the which-key buffer
    (setq which-key-max-display-columns nil)
    
    ;;; Set the separator used between keys and descriptions
    (setq which-key-separator " → " )
    (setq which-key-unicode-correction 3)
    
    ;;; Set the prefix string that will be inserted in front of prefix commands
    (setq which-key-prefix-prefix "+" )
    
    ;;; Show the key prefix on the left, top, or bottom (nil means hide the prefix)
    (setq which-key-show-prefix 'left)
    
    ;; Set to t to show the count of keys shown vs. total keys in the mode line
    (setq which-key-show-remaining-keys nil)
    
    
    
    (which-key-mode)
    
    ;;;
    
    Распечатка 30: packages/which-key/desire.ecf

3.8.2 Разное

;; (desire 'keycast)

;; ----------------------------------------------------------------------

(desire 'pcache)
(desire 'persistent-soft)

(desire 'alert)

(desire 'rg :precondition-system-executable "rg")
  • В файле используется фолдинг по тройной скобке.

3.9 Оформление интерфейса

  • Файл rc.packages.el:
;;;; User interface
Распечатка 31: rc.packages.el

3.9.1 Наборы иконок

;;;;; Icons
Распечатка 32: rc.packages.el
  1. all-the-icons

    ;; (desire 'all-the-icons)
    
  1. nerd-icons

    • Загрузка пакета:
      (desire 'nerd-icons)
      
      Распечатка 33: rc.packages.el
    1. Интеграция

      1. tab-line

        • Emacs. Пакет tab-line
        • Поддержка nerd-icons в tab-line:
        • Пакет применяет иконки из nerd-icons к вкладкам tab-line.
        • Минорный режим tab-line-nerd-icons-global-mode добавляет к функции по умолчанию tab-line-tab-name-format-default иконки для форматирования имён вкладок.
          ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
          ;;; Emacs package that uses the nerd-icons package to apply appropriate icons to tab-line tabs
          ;;;; https://github.com/lucius-martius/tab-line-nerd-icons
          
          ;;; Code:
          
          (desire 'tab-line-nerd-icons)
          (require 'tab-line-nerd-icons)
          
          ;;;; Enable
          (tab-line-nerd-icons-global-mode)
          
          ;;;
          
          Распечатка 34: packages/tab-line/nerd-icons.ecf
    1. corfu

      • Nerd-icon для corfu
      • https://github.com/LuigiPiucco/nerd-icons-corfu
        ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
        ;;; Icons for corfu via nerd-icons
        ;;;; https://github.com/LuigiPiucco/nerd-icons-corfu
        
        ;;; Code:
        
        (desire 'nerd-icons-corfu)
        (require 'nerd-icons-corfu)
        
        (add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)
        
        ;;;; Tuning
        (setq nerd-icons-corfu-mapping
              '((array :style "cod" :icon "symbol_array" :face font-lock-type-face)
                (boolean :style "cod" :icon "symbol_boolean" :face font-lock-builtin-face)
             ;; Remember to add an entry for `t', the library uses that as default.
                (t :style "cod" :icon "code" :face font-lock-warning-face)))
        
        ;;;
        
        Распечатка 35: packages/corfu/nerd-icons.ecf
    1. marginalia

      • Nerd-icon для дополнения
      • https://github.com/LuigiPiucco/nerd-icons-corfu
        ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
        ;;; Use nerd-icons for completion
        ;;;; https://github.com/rainstormstudio/nerd-icons-completion
        
        ;;; Code:
        
        (desire 'nerd-icons-completion)
        (require 'nerd-icons-completion)
        
        (nerd-icons-completion-mode)
        (add-hook 'marginalia-mode-hook #'nerd-icons-completion-marginalia-setup)
        
        ;;;
        
        Распечатка 36: packages/marginalia/nerd-icons.ecf
    1. dired

      • Nerd-icon для dired
      • https://github.com/rainstormstudio/nerd-icons-dired
        ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
        ;;; Use nerd-icons for Dired
        ;;;; https://github.com/rainstormstudio/nerd-icons-dired
        
        (desire 'nerd-icons-dired)
        (require 'nerd-icons-dired)
        
        (add-hook 'dired-mode-hook 'nerd-icons-dired-mode)
        
        ;;;
        
        Распечатка 37: packages/dired/nerd-icons.ecf

3.9.2 Шрифты

;; (desire 'mixed-pitch)

(desire-conf 'fontset)
(desire-conf 'font-lock)
(desire-conf 'font-lock-jit)
;; (desire-conf 'font-lock-lazy)
;; (desire-conf 'font-lock-fast)
;; (desire-conf 'faces)
;; (desire-conf 'color-theme nil "color-theme")
;; (desire-conf 'fira-code-mode nil "fira-code-mode" t) ;; Simple minor mode for Fira Code ligatures

(desire 'unicode-fonts)

;; (desire 'ligature)

;; (desire-conf 'theme)

;; (desire 'zoom)

3.9.3 Табы

;;; Tabs
Распечатка 38: rc.packages.el
  1. centaur-tabs

  1. tab-bar

    • Подключение:
      (desire 'tab-bar)
      
      Распечатка 40: rc.packages.el
  1. tab-line

    • Emacs. Пакет tab-line
    • Подключение:
      (desire 'tab-line)
      
      Распечатка 41: rc.packages.el
    • Загрузка:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Emacs Tab Bar
      
      (require 'tab-line)
      
      ;;;
      
      Распечатка 42: packages/tab-line/loaddefs.ecf
    • Настройка:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Emacs Tab Line
      
      ;;; Show the tabline in the top of the frame
      (global-tab-line-mode t)
      
      ;;; Do not show add-new button
      ;; (setq tab-line-new-button-show nil)
      
      ;;; Do not show close button
      ;; (setq tab-line-close-button-show nil)
      
      ;;; Change the separator between tabs
      ;; (setq tab-line-separator "")
      
      ;;;
      
      Распечатка 43: packages/tab-line/desire.ecf

3.9.4 Нумерация строк

  1. display-line-numbers

    • Подключаем моду:
      (desire 'display-line-numbers)
      
      Распечатка 44: rc.packages.el
    • Файл настройки:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Interface for display-line-numbers
      
      Распечатка 45: packages/display-line-numbers.ecf
    • Глобальная настройка:
      ;;; Global
      ;; (global-display-line-numbers-mode 1)
      
      Распечатка 46: packages/display-line-numbers.ecf
    • Глобальная настройка:
      ;;; Per mode
      (add-hook 'prog-mode-hook #'display-line-numbers-mode)
      (add-hook 'text-mode-hook #'display-line-numbers-mode)
      
      Распечатка 47: packages/display-line-numbers.ecf
    • Завершение:
      ;;;
      
      Распечатка 48: packages/display-line-numbers.ecf
  1. nlinum

    • Подключаем моду:
      ;; (desire 'nlinum)
      
      Распечатка 49: rc.packages.el
    • Загрузка пакета:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Show line numbers in the margin
      ;;; https://elpa.gnu.org/packages/nlinum.html
      
      (require 'nlinum)
      
      Распечатка 50: packages/nlinum.ecf
    • Глобальная настройка:
      ;;; Global settings
      ;; (global-nlinum-mode 1)
      
      Распечатка 51: packages/nlinum.ecf
    • Настройка по модам:
      ;;; Per mode configuration
      (add-hook 'prog-mode-hook #'nlinum-mode)
      (add-hook 'text-mode-hook #'nlinum-mode)
      
      Распечатка 52: packages/nlinum.ecf
    • Завершение:
      ;;;
      
      Распечатка 53: packages/nlinum.ecf

3.9.5 Завершение

;;;}}}
Распечатка 54: rc.packages.el

3.10 Автодополнение

  • Файл rc.packages.el:
    ;;; Completion {{{
    
    ;; (desire 'company)
    (desire 'corfu)
    
    ;;;}}}
    

3.11 Автодополнение в минибуфере

3.11.1 Начало

  • Файл rc.packages.el:
    ;;; Minibuffer completion {{{
    

3.11.2 Ido

  • Файл rc.packages.el:
    ;; (desire 'ido)
    

3.11.3 Helm

  • Файл rc.packages.el:
    ;; (desire 'helm-posframe)
    ;; (desire 'helm)
    

3.11.4 Ivy

  • Файл rc.packages.el:
    ;; (desire 'ivy)
    

3.11.5 Selectrum

  • Файл rc.packages.el:
    ;; (desire 'selectrum)
    

3.11.6 Vertico

  • Файл rc.packages.el:
    (desire 'vertico)
    

3.11.7 Конец

  • Файл rc.packages.el:
    
    ;;;}}}
    

3.12 Навигация по окнам

3.12.1 Начало

  • Файл rc.packages.el:
    ;;; Window navigation {{{
    
    Распечатка 55: rc.packages.el

3.12.2 Windmove

  • Emacs. Окна. Windmove

  • Файл rc.packages.el:

    (desire 'windmove)
    
    Распечатка 56: rc.packages.el
  • Настройка пакета:

    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Directional window-selection routinesdirectional window-selection routines
    ;;; https://www.emacswiki.org/emacs/WindMove
    
    Распечатка 57: packages/windmove.ecf
  • По умолчанию используется комбинация Shift + стрелки. Но это конфликтует с org-mode:

    ;;; Shifted arrow keys
    ;; (windmove-default-keybindings)
    
    Распечатка 58: packages/windmove.ecf
  • Будем использовать Ctrl + стрелки:

    ;;; Ctrl + arrow keys
    (windmove-default-keybindings 'ctrl)
    
    Распечатка 59: packages/windmove.ecf
  • Что-то делает:

    ;;; Wrap around at edges
    (setq windmove-wrap-around t)
    
    Распечатка 60: packages/windmove.ecf
  • Завершим файл:

    ;;;
    
    Распечатка 61: packages/windmove.ecf

3.12.3 Конец

  • Файл rc.packages.el:
    ;;;}}}
    
    Распечатка 62: rc.packages.el

3.13 Casual Suite

3.13.1 Начало

  • Подключение:
    ;;;;; Casual Suite
    (desire 'casual)
    
    Распечатка 63: rc.packages.el

3.13.2 Основная библиотека

  • Файл packages/casual/loaddefs.ecf:
    ;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; A collection of opinionated keyboard-driven user interfaces for various built-in Emacs modes
    ;;; https://github.com/kickingvegas/casual
    
    (require 'casual)
    
    ;;;
    
    Распечатка 64: packages/casual/loaddefs.ecf
  • Файл packages/casual/desire.ecf:
    ;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; A collection of opinionated keyboard-driven user interfaces for various built-in Emacs modes
    ;;; https://github.com/kickingvegas/casual
    
    (require 'casual-calc)
    (require 'casual-dired)
    (require 'casual-isearch)
    (require 'casual-ibuffer)
    (require 'casual-info)
    (require 'casual-re-builder)
    (require 'casual-bookmarks)
    (require 'casual-editkit)
    
    (keymap-set calc-mode-map "C-o" #'casual-calc-tmenu)
    (keymap-set dired-mode-map "C-o" #'casual-dired-tmenu)
    (keymap-set isearch-mode-map "C-o" #'casual-isearch-tmenu)
    (keymap-set ibuffer-mode-map "C-o" #'casual-ibuffer-tmenu)
    (keymap-set ibuffer-mode-map "F" #'casual-ibuffer-filter-tmenu)
    (keymap-set ibuffer-mode-map "s" #'casual-ibuffer-sortby-tmenu)
    (keymap-set Info-mode-map "C-o" #'casual-info-tmenu)
    (keymap-set reb-mode-map "C-o" #'casual-re-builder-tmenu)
    (keymap-set reb-lisp-mode-map "C-o" #'casual-re-builder-tmenu)
    (keymap-set bookmark-bmenu-mode-map "C-o" #'casual-bookmarks-tmenu)
    (keymap-global-set "C-o" #'casual-editkit-main-tmenu)
    
    ;;;
    
    Распечатка 65: packages/casual/desire.ecf
  • Файл сделан под все элементы пакета.
  • Необходимо будет разделить всё это по разным пакетам.

3.13.3 Поддержка Avy

  • Файл packages/casual/avy.ecf:
    ;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; An opinionated Transient menu for Avy.
    ;;; https://github.com/kickingvegas/casual-avy
    
    (desire 'casual-avy)
    (require 'casual-avy)
    
    (keymap-global-set "M-g" #'casual-avy-tmenu)
    
    ;;; Imenu (index) Support
    (add-hook 'markdown-mode-hook #'imenu-add-menubar-index)
    (add-hook 'makefile-mode-hook #'imenu-add-menubar-index)
    (add-hook 'prog-mode-hook #'imenu-add-menubar-index)
    (add-hook 'org-mode-hook #'imenu-add-menubar-index)
    
    ;;;
    
    Распечатка 66: packages/casual/avy.ecf

3.13.4 Поддержка Symbol Overlay

  • Файл packages/casual/symbol-overlay.ecf:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; An opinionated Transient user interface for the Emacs package Symbol Overlay.
    ;;; https://github.com/kickingvegas/casual-symbol-overlay
    
    (desire 'casual-symbol-overlay)
    (require 'casual-symbol-overlay)
    
    (keymap-set symbol-overlay-map "C-o" #'casual-symbol-overlay-tmenu)
    
    ;;;
    
    Распечатка 67: packages/casual/symbol-overlay.ecf

3.13.5 Поддержка Org-agenda

  • Файл packages/org/casual.ecf:
    ;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; A collection of opinionated keyboard-driven user interfaces for various built-in Emacs modes
    ;;; https://github.com/kickingvegas/casual
    
    (require 'casual-agenda)
    
    (keymap-set org-agenda-mode-map "C-o" #'casual-agenda-tmenu)
    (keymap-set org-agenda-mode-map "M-j" #'org-agenda-clock-goto) ; optional
    (keymap-set org-agenda-mode-map "J" #'bookmark-jump) ; optional
    
    ;;;
    
    Распечатка 68: packages/org/casual.ecf

3.14 Сворачивание

3.14.1 origami

  • Emacs. Сворачивание (folding)
  • Подключение:
    ;; (desire 'origami)
    
    Распечатка 69: rc.packages.el
  • Подключение:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; A folding minor mode for Emacs
    ;;; https://github.com/gregsexton/origami.el
    
    (require 'origami)
    
    (define-prefix-command 'origami-mode-map)
    (define-key ctl-x-map (kbd "z") 'origami-mode-map)
    (define-key origami-mode-map "o" 'origami-open-node)
    (define-key origami-mode-map "O" 'origami-open-node-recursively)
    (define-key origami-mode-map "c" 'origami-close-node)
    (define-key origami-mode-map "C" 'origami-close-node-recursively)
    (define-key origami-mode-map "a" 'origami-toggle-node)
    (define-key origami-mode-map "A" 'origami-recursively-toggle-node)
    (define-key origami-mode-map "R" 'origami-open-all-nodes)
    (define-key origami-mode-map "M" 'origami-close-all-nodes)
    (define-key origami-mode-map "v" 'origami-show-only-node)
    (define-key origami-mode-map "k" 'origami-previous-fold)
    (define-key origami-mode-map "j" 'origami-forward-fold)
    (define-key origami-mode-map "x" 'origami-reset)
    
    (global-origami-mode)
    
    ;;;
    
    Распечатка 70: packages/origami.ecf

3.14.2 outli

  • Emacs. Пакет outli
  • Подключение:
    (desire 'outli :recipe '(:fetcher github :repo "jdtsmith/outli" :branch "main"))
    
    Распечатка 71: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Simple comment-based outline folding for Emacs
    ;;; https://github.com/jdtsmith/outli
    
    (require 'outli)
    
    ;;;
    
    Распечатка 72: packages/outli/loaddefs.ecf
  • Настройка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Simple comment-based outline folding for Emacs
    ;;; https://github.com/jdtsmith/outli
    
    (general-define-key
     :keymaps 'outli-mode-map
     ;; convenience key to get back to containing heading
     "C-c C-p"  '(lambda () (interactive) (outline-back-to-heading)))
    
    (add-hook 'prog-mode-hook #'outli-mode)
    (add-hook 'text-mode-hook #'outli-mode)
    
    ;;;
    
    Распечатка 73: packages/outli/desire.ecf

3.14.3 hideshow

  • Подключение:
    (desire 'hideshow)
    
    Распечатка 74: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Hideshow minor mode
    ;;;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html
    ;;;; https://www.emacswiki.org/emacs/HideShow
    
    ;;; Code:
    
    (require 'hideshow)
    
    ;;;
    
    Распечатка 75: packages/hideshow/loaddefs.ecf
  • Настройка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Hideshow minor mode
    ;;;; https://www.gnu.org/software/emacs/manual/html_node/emacs/Hideshow.html
    ;;;; https://www.emacswiki.org/emacs/HideShow
    
    ;;; Code:
    
    (add-hook 'prog-mode-hook #'hs-minor-mode)
    (add-hook 'c-mode-common-hook #'hs-minor-mode)
    (add-hook 'emacs-lisp-mode-hook #'hs-minor-mode)
    (add-hook 'java-mode-hook #'hs-minor-mode)
    (add-hook 'lisp-mode-hook #'hs-minor-mode)
    (add-hook 'perl-mode-hook #'hs-minor-mode)
    (add-hook 'sh-mode-hook #'hs-minor-mode)
    
    ;;;; Hide the comments too when you do a 'hs-hide-all'
    (setq hs-hide-comments nil)
    ;;;; Set whether isearch opens folded comments, code, or both code, comments, t (both), or nil (neither)
    (setq hs-isearch-open 'code)
    
    ;;;
    
    Распечатка 76: packages/hideshow/desire.ecf

3.14.4 bicycle

  • Переключение режима структуры.
  • https://github.com/tarsius/bicycle
  • Подключение:
    (desire 'bicycle)
    
    Распечатка 77: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Cycle outline and code visibility
    ;;;; https://github.com/tarsius/bicycle
    
    ;;; Code:
    
    (require 'bicycle)
    
    ;;;
    
    Распечатка 78: packages/bicycle/loaddefs.ecf
  • Настройка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Cycle outline and code visibility
    ;;;; https://github.com/tarsius/bicycle
    
    ;;; Code:
    
    (require 'outline)
    (require 'bicycle)
    
    (general-define-key
     :keymaps 'outline-minor-mode-map
     [C-tab] 'bicycle-cycle
     [S-tab] 'bicycle-cycle-global)
     ;; (define-key outline-minor-mode-map (kbd "<backtab>") #'bicycle-cycle-global)
    
    (add-hook 'prog-mode-hook #'outline-minor-mode)
    (add-hook 'markdown-mode-hook #'outline-minor-mode)
    (add-hook 'TeX-mode-hook #'outline-minor-mode)
    (add-hook 'LaTeX-mode-hook #'outline-minor-mode)
    (add-hook 'rst-mode-hook #'outline-minor-mode)
    (add-hook 'prog-mode-hook #'outline-minor-mode)
    (add-hook 'prog-mode-hook #'hs-minor-mode)
    
    ;;;
    
    Распечатка 79: packages/bicycle/desire.ecf

3.15 Разное

  • Файл rc.packages.el:
;;

(desire 'tree-sitter)

(desire 'hydra)

(desire-conf 'show-paren)
;; (desire-conf 'folding)
;; (desire-conf 'outline)

;;

(desire 'imenu)

(desire 'ace-window)


;; (desire-conf 'toolbar)

;; Parentesis
(desire 'smartparens)

3.16 Проверка правописания

;;; Spell {{{

;; (desire-conf 'spell)
(desire 'ispell)
;; (desire 'flyspell)
;;(desire-conf 'speck)
;;(desire-conf 'wcheck)

3.16.1 jinx

  • https://github.com/minad/jinx
  • Подключение:
    (desire 'jinx)
    
    Распечатка 80: rc.packages.el
  • Начальная загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Enchanted Spell Checker
    ;;; https://github.com/minad/jinx
    
    (require 'jinx)
    
    ;;; Alternative 1: Enable Jinx globally
    ;; (add-hook 'emacs-startup-hook #'global-jinx-mode)
    
    ;;; Alternative 2: Enable Jinx per mode
    (dolist (hook '(text-mode-hook prog-mode-hook conf-mode-hook))
      (add-hook hook #'jinx-mode))
    
    ;;;
    
    Распечатка 81: packages/jinx/loaddefs.ecf
  • Настройки:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Enchanted Spell Checker
    ;;; https://github.com/minad/jinx
    
    
    ;;; M-$ triggers correction for the misspelled word before point.
    ;;; C-u M-$ triggers correction for the entire buffer.
    ;;; C-u C-u M-$ forces correction of the word at point, even if it is not misspelled.
    (keymap-global-set "M-$" #'jinx-correct)
    (keymap-global-set "C-M-$" #'jinx-languages)
    
    ;;;
    
    Распечатка 82: packages/jinx/desire.ecf
  • Поддержка vertico:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Enchanted Spell Checker
    ;;; https://github.com/minad/jinx
    
    (require 'vertico-multiform)
    (add-to-list 'vertico-multiform-categories
                 '(jinx grid (vertico-grid-annotate . 20)))
    
    (vertico-multiform-mode 1)
    
    ;;;
    
    Распечатка 83: packages/jinx/vertico.ecf

3.16.2 Langtool

;; (desire 'langtool)
;; (desire 'flycheck-languagetool)
;; (desire 'lsp-ltex :recipe '(:fetcher github :repo "emacs-languagetool/lsp-ltex" :branch "master" :files ("*.el")))
;; (desire 'eglot-ltex :recipe '(:fetcher github :repo "emacs-languagetool/eglot-ltex" :branch "master" :files ("*.el")))

3.16.3 Завершение

;;;}}}

3.17 Адресная книга

;;; Adress book {{{

(desired 'vcard)
(desire 'khardel :precondition-system-executable "khard")
(desire 'khalel :precondition-system-executable "khal")
;; (desire 'org-vcard)
;; (desire 'vdirel)
;; (desire 'bbdb)

;;;}}}

3.18 Библиография

3.18.1 Начало

;;; Bibliography {{{

3.18.2 Доступ к библиографическим базам данных

  • Пакет biblio.
  • Подключение:
    (desire 'biblio)
    
    Распечатка 84: rc.packages.el
  • Настройка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Browse and import bibliographic references from CrossRef, DBLP, HAL, arXiv, Dissemin, and doi.org from Emacs
    ;; https://github.com/cpitclaudel/biblio.el
    
    (require 'biblio)
    
    ;;; To get better response times from CrossRef
    ;;; https://github.com/CrossRef/rest-api-doc#etiquette
    (setq biblio-crossref-user-email-address user-mail-address)
    
    ;;; Which header to use for BibTeX entries generated from arXiv metadata
    (setq biblio-arxiv-bibtex-header "misc")
    
    ;;;
    
    Распечатка 85: packages/biblio.ecf

3.18.3 Настройки bibtex

  • Подключение:
    (desire 'bibtex)
    
    Распечатка 86: rc.packages.el
  1. Расположение файлов

    • Персональные настройки расположения файлов.
    • Организация рабочего каталога
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;;
      
      Распечатка 87: packages/bibtex/personal.ecf
    • Основной файл библиографии:
      ;;; Where bibliographies can be found
      (setq personal-bibliography '("~/work/bib/bib/main.bib"))
      
      Распечатка 88: packages/bibtex/personal.ecf
    • Файлы книг и статей:
      ;;; Where PDFs can be found
      ;; (setq bibtex-completion-library-path (directory-files-recursively "~/data/bib/pdf" "\\`[^.]*\\'" 't))
      (setq personal-library-path '("~/work/bib/data/pdf"))
      
      Распечатка 89: packages/bibtex/personal.ecf
    • Расположение литературных заметок:
      ;;; Notes
      ;;; Store all notes in one file
      ;; (setq personal-notes-path "/path/to/notes.org")
      ;;; Store notes in multiple files, one file per publication
      ;; (setq personal-notes-path (expand-file-name "~/work/org/notes/literature"))
      (setq personal-notes-path '())
      (add-to-list 'personal-notes-path (expand-file-name "~/work/org/notes/literature"))
      
      ;;;
      
      Распечатка 90: packages/bibtex/personal.ecf

3.18.4 Завершение

;;;}}}

3.19 Сниппеты


;;(desire-conf 'yasnippet)

3.20 Текстовые режимы

  • Декларация секции:
    ;;;; Work with text
    
    Распечатка 91: rc.packages.el

3.20.1 Таблицы

  • Декларация секции:
    ;;;;; Tables
    
    Распечатка 92: rc.packages.el
  1. lte.el

    • Large Table Edition in Org and Markdown buffers
    • https://github.com/fredericgiquel/lte.el
    • Подключение:
      (desire 'lte)
      
      Распечатка 93: rc.packages.el
    • Настройка:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Large Table Edition in Org and Markdown buffers for Emacs
      ;;; https://github.com/fredericgiquel/lte.el
      
      ;;;
      
      Распечатка 94: packages/lte.ecf
    • Поддержка markdown-mode:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Large Table Edition in Org and Markdown buffers for Emacs
      ;;; https://github.com/fredericgiquel/lte.el
      
      (require 'lte)
      (add-hook 'markdown-mode-hook #'lte-truncate-table-mode)
      
      ;;;
      
      Распечатка 95: packages/markdown-mode/lte.ecf
    • Поддержка org-mode:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Large Table Edition in Org and Markdown buffers for Emacs
      ;;; https://github.com/fredericgiquel/lte.el
      
      (require 'lte)
      (add-hook 'org-mode-hook #'lte-truncate-table-mode)
      
      ;;;
      
      Распечатка 96: packages/org/lte.ecf

3.20.2 Отображение текста

  • Декларация секции:
    ;;;;; Text view
    
    Распечатка 97: rc.packages.el
(desire 'texfrag)

;; (desire 'adaptive-wrap)
(desired 'visual-line-mode)

;; (desired 'prettify-symbols-mode)
;; (desire 'pretty-mode)
;; (desire 'prettify-math)
;; (desire 'math-preview)

3.20.3 move-text

  • Emacs. Работа с текстом
  • Позволяет перемещать строки текста.
  • Подключение:
    (desire 'move-text)
    
    Распечатка 98: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Move current line or region up or down
    ;;; https://github.com/emacsfodder/move-text
    
    (require 'move-text)
    
    ;;;
    
    Распечатка 99: packages/move-text/loaddefs.ecf
  • Настройка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Move current line or region up or down
    ;;; https://github.com/emacsfodder/move-text
    
    ;;; Use the default bindings
    (move-text-default-bindings)
    
    ;;;
    
    Распечатка 100: packages/move-text/desire.ecf
  • Перестройка отступов:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Move current line or region up or down
    ;;; https://github.com/emacsfodder/move-text
    
    ;;; Indent after moving
    
    (defun indent-region-advice (&rest ignored)
      (let ((deactivate deactivate-mark))
        (if (region-active-p)
            (indent-region (region-beginning) (region-end))
          (indent-region (line-beginning-position) (line-end-position)))
        (setq deactivate-mark deactivate)))
    
    (advice-add 'move-text-up :after 'indent-region-advice)
    (advice-add 'move-text-down :after 'indent-region-advice)
    
    ;;;
    
    Распечатка 101: packages/move-text/desire.ecd/reindent.ecf

3.20.4 delsel

  • В дереве emacs.
  • При вставке текста в выделенную область вставленный текст заменяет исходный.
  • Подключение:
    (desire 'delsel)
    
    Распечатка 102: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Delete the selected text upon text insertion
    
    ;;; Code:
    
    (require 'delsel)
    (add-hook 'after-init-hook 'delete-selection-mode)
    
    ;;;
    
    Распечатка 103: packages/delsel.ecf

3.20.5 markdown

(desire 'pandoc-mode)

(desire' mermaid-mode :precondition-system-executable "mmdc")

(desire-conf 'text)
(desire-conf 'markdown-mode nil "markdown-mode" t)

(desire 'plantuml-mode)

(desire 'pdf-tools)
(desire 'nov)
(desire 'fb2-reader)

;; (desire 'valign)

;;;}}}

3.21 Управление временем

  • Разделитель:
    ;;;; Time management
    
    Распечатка 104: rc.packages.el

3.21.1 pomm

  • Emacs. Метод pomodoro
  • Подключение:
    (desire 'pomm)
    
    Распечатка 105: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Implementation of Pomodoro and Third Time techniques for Emacs
    ;;;; https://github.com/SqrtMinusOne/pomm.el
    
    ;;; Code:
    
    (require 'pomm)
    
    ;;;
    
    Распечатка 106: packages/pomm/loaddefs.ecf
  • Настройка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Implementation of Pomodoro and Third Time techniques for Emacs
    ;;;; https://github.com/SqrtMinusOne/pomm.el
    
    ;;; Code:
    
    ;;;; If you want an actual notification
    (setq alert-default-style 'libnotify)
    
    ;;;; Display in the modeline
    (pomm-mode-line-mode)
    
    ;;;; By default sounds are disabled
    (setq pomm-audio-enabled t)
    
    ;;;; Ticking sound
    ;; (setq pomm-audio-tick-enabled t)
    
    ;;;
    
    Распечатка 107: packages/pomm/desire.ecf
  • Интерфейс к polybar (разным реализациям):
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Implementation of Pomodoro and Third Time techniques for Emacs
    ;;;; https://github.com/SqrtMinusOne/pomm.el
    
    ;;; Code:
    
    (add-hook 'pomm-on-tick-hook 'pomm-update-mode-line-string)
    (add-hook 'pomm-on-status-changed-hook 'pomm-update-mode-line-string)
    
    ;;;
    
    Распечатка 108: packages/pomm/desire.ecd/polybar.ecf
  • Сохранение истории:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Log history in CSV format
    ;;;; https://github.com/SqrtMinusOne/pomm.el
    
    
    ;;; Code:
    
    ;;;; Save timer history in a CSV format
    (setq pomm-csv-history-file (expand-file-name "pomm.csv" user-emacs-directory))
    
    ;;;; Customize timestamp (for traditional YYYY-MM-DD HH:mm:ss)
    (setq pomm-csv-history-file-timestamp-format "%F %T")
    
    ;;;
    
    Распечатка 109: packages/pomm/desire.ecd/history.ecf
  1. Интеграция

    • Интеграция с org-mode:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Log history in CSV format
      ;;;; https://github.com/SqrtMinusOne/pomm.el
      
      ;;; Code:
      
      (require 'pomm)
      
      (add-hook 'pomm-on-status-changed-hook #'pomm--sync-org-clock)
      (add-hook 'pomm-third-time-on-status-changed-hook #'pomm-third-time--sync-org-clock)
      
      ;;;
      
      Распечатка 110: packages/org/pomm.ecf

3.21.2 org-pomodoro

(desire 'org-pomodoro)
;; (desire 'hammy)

3.22 LaTeX

;;; LaTeX {{{

(desire 'xenops)

(desire 'cdlatex)

(desire-conf 'xdvi nil "xdvi-search")
(desired 'reftex)
;; (desire-conf 'tex)
(desired 'preview-latex)
(desire 'auctex)
;; (desire 'auctex :initname "latex")
;; (desire 'auctex :initname "latex" :precondition-lisp-library "tex-site")

;;;}}}

3.23 Org-mode

  • Org-mode
  • Конфигурация для org-mode:
    ;;; Org-mode {{{
    
    Распечатка 111: rc.packages.el

3.23.1 Babel

  • Emacs. Org Babel
  • Общие настройки babel:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Org-Babel
    
    Распечатка 112: packages/org/desire.ecd/babel.ecf
  • Отключим подтверждение запутывания:
    ;;; Org-babel confirm before evaluation
    (setq org-confirm-babel-evaluate nil)
    
    Распечатка 113: packages/org/desire.ecd/babel.ecf
  1. org-auto-tangle

    • Репозиторий: https://github.com/yilkalargaw/org-auto-tangle/
    • Подключим org-auto-tangle:
      ;;; A simple emacs package to allow org file tangling upon save
      ;;; https://github.com/yilkalargaw/org-auto-tangle/
      (desire 'org-auto-tangle)
      (require 'org-auto-tangle)
      (add-hook 'org-mode-hook 'org-auto-tangle-mode)
      
      ;;; Auto-tangle as the default behavior for all org buffers
      ;; (setq org-auto-tangle-default t)
      
      Распечатка 114: packages/org/desire.ecd/babel.ecf
  1. Поддержка языков

    • Включим поддержку разных языков программирования:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      
      ;;; Scripts
      (require 'ob-awk)
      (require 'ob-eshell)
      (require 'ob-sed)
      (require 'ob-shell)
      
      ;;; Diagrams
      (require 'ob-ditaa)
      (require 'ob-dot)
      (require 'ob-plantuml)
      
      ;;; Programming languages
      (require 'ob-calc)
      (require 'ob-C)
      (require 'ob-clojure)
      (require 'ob-comint)
      (require 'ob-core)
      (require 'ob-css)
      (require 'ob-emacs-lisp)
      (require 'ob-eval)
      (require 'ob-exp)
      (require 'ob-forth)
      (require 'ob-fortran)
      (require 'ob-gnuplot)
      (require 'ob-groovy)
      (require 'ob-haskell)
      (require 'ob-java)
      (require 'ob-js)
      (require 'ob-julia)
      (require 'ob-latex)
      (require 'ob-lilypond)
      (require 'ob-lisp)
      (require 'ob-lob)
      (require 'ob-lua)
      (require 'ob-makefile)
      (require 'ob-matlab)
      (require 'ob-maxima)
      (require 'ob-ocaml)
      (require 'ob-octave)
      (require 'ob-org)
      (require 'ob-perl)
      (require 'ob-processing)
      (require 'ob-python)
      (require 'ob-ref)
      (require 'ob-R)
      (require 'ob-ruby)
      (require 'ob-sass)
      (require 'ob-scheme)
      (require 'ob-screen)
      (require 'ob-sql)
      (require 'ob-sqlite)
      (require 'ob-table)
      (require 'ob-tangle)
      
      ;;;
      
      Распечатка 115: packages/org/desire.ecd/ob.ecf
  1. Конец

    ;;;
    
    Распечатка 116: packages/org/desire.ecd/babel.ecf

3.23.2 Разное

;; (desire 'org-ql)

(desire 'org-appear)
(desire 'org-fragtog)
(desire 'org-custom-cookies)
;; (desire 'svg-tag-mode)
(desire 'org-superstar)
;; (desire 'org-modern-indent :recipe '(:fetcher github :repo "jdtsmith/org-modern-indent" :branch "main" :files ("*.el")))
(desire 'org-modern)
;; (desire 'org-contacts)
;; (desire 'google-contacts)
(desire 'org-edna)
(desire 'org-ref)
(desire 'org-tree-slide)
Распечатка 117: rc.packages.el

3.23.3 Повестка дня

  • Конфигурация повестки дня:
;;; Agenda
(desire 'org-super-agenda)

;;(if (desiredp 'org-ql)
;; (desire 'org-agenda-files-track-ql)
(desire 'org-agenda-files-track)
;;)

;;(if (desiredp 'org-ql)
;; (desire 'org-agenda-files-track-ql :recipe '(:fetcher github :repo "nicolas-graves/org-agenda-files-track" :branch "master" :files ("org-agenda-files-track-ql.el")))
;; (desire 'org-agenda-files-track :recipe '(:fetcher github :repo "nicolas-graves/org-agenda-files-track" :branch "master" :files ("org-agenda-files-track.el")))
;;)

;;; Literate
(desire 'org-tanglesync)

;; (desire 'org-gcal)
(desire 'org-journal)

(desire 'org-noter)
;; (desire 'org-noter :recipe '(:fetcher github :repo "org-noter/org-noter" :branch "feature/org-roam-integration" :files ("*.el" "modules/*.el")))

(desire 'org-transclusion)
Распечатка 118: rc.packages.el

3.23.4 org-gtd

  • Emacs. Пакеты. Org-gtd
  • Подключение для загрузки:
    ;;; GTD
    (desire 'org-gtd)
    
    Распечатка 119: rc.packages.el
  1. Клавиатурные сочетания

3.23.5 mobileorg

(desired 'mobileorg)
Распечатка 120: rc.packages.el

3.23.6 org-mode

(desire 'org)

;;; For messaging
;; (desire 'org-msg)

;;;}}}
Распечатка 121: rc.packages.el
  1. Предпросмотр LaTeX

    • Org-mode. Предпросмотр TeX
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Previewing LaTeX fragments
      ;;; https://orgmode.org/manual/Previewing-LaTeX-fragments.html
      
      Распечатка 122: packages/org/desire.ecd/preview-latex.ecf
    • Зададим каталог для создаваемых изображений (по умолчанию они создаются в рабочем каталоге):
      ;;; LaTeX image directory
      (setq org-preview-latex-image-directory (concat home-cache-path "org-latex/"))
      
      Распечатка 123: packages/org/desire.ecd/preview-latex.ecf
    • Зададим опции создания изображений:
      ;;; Output format
      (setq org-format-latex-options (plist-put org-format-latex-options :scale 1.0))
      (setq org-format-latex-options (plist-put org-format-latex-options :density 600))
      (setq org-format-latex-options (plist-put org-format-latex-options :background "Transparent"))
      
      Распечатка 124: packages/org/desire.ecd/preview-latex.ecf
    • Зададим формат изображений. В данном случае это формат svg:
      (setq org-latex-create-formula-image-program 'dvisvgm)
      (setq org-preview-latex-process-alist
            '((dvipng :programs
                    ("lualatex" "dvipng")
                    :description "dvi > png" :message "you need to install the programs: latex and dvipng." :image-input-type "dvi" :image-output-type "png" :image-size-adjust
                    (1.0 . 1.0)
                    :latex-compiler
                    ("lualatex -output-format dvi -interaction nonstopmode -output-directory %o %f")
                    :image-converter
                    ("dvipng -D %D -T tight -o %O %f"))
            (dvisvgm :programs
                     ("latex" "dvisvgm")
                     :description "dvi > svg" :message "you need to install the programs: latex and dvisvgm." :use-xcolor t :image-input-type "xdv" :image-output-type "svg" :image-size-adjust
                     (1.7 . 1.5)
                     :latex-compiler
                     ("xelatex -no-pdf -interaction nonstopmode -output-directory %o %f")
                     :image-converter
                     ("dvisvgm %f -n -b min -c %S -o %O"))
            (imagemagick :programs
                         ("latex" "convert")
                         :description "pdf > png" :message "you need to install the programs: latex and imagemagick." :use-xcolor t :image-input-type "pdf" :image-output-type "png" :image-size-adjust
                         (1.0 . 1.0)
                         :latex-compiler
                         ("xelatex -no-pdf -interaction nonstopmode -output-directory %o %f")
                         :image-converter
                         ("convert -density %D -trim -antialias %f -quality 100 %O"))))
      
      Распечатка 125: packages/org/desire.ecd/preview-latex.ecf
    • Теперь зададим настройки для LaTeX:
      ;;; Configure latex
      (setq org-latex-inputenc-alist '(("utf8" . "utf8x")))
      ;;; Default position for LaTeX figures
      (setq org-latex-default-figure-position "!htbp")
      
      Распечатка 126: packages/org/desire.ecd/preview-latex.ecf
    • Опишем используемые пакеты:
      ;;; Unicode fonts
      (add-to-list 'org-latex-packages-alist '("" "unicode-math") t)
      ;;; Physics2 package
      ;; (add-to-list 'org-latex-packages-alist '("" "physics2") t)
      ;;; Math
      (add-to-list 'org-latex-packages-alist '("" "amsmath") t)
      (add-to-list 'org-latex-packages-alist '("" "mathtools") t)
      ;;; Local definitions
      ;; (add-to-list 'org-latex-packages-alist '("" "local-define") t)
      
      ;;;
      
      Распечатка 127: packages/org/desire.ecd/preview-latex.ecf

3.24 Заметочники

3.24.1 Org-roam

;;; Org-roam {{{

(desire 'emacsql)

;; (desire 'delve :recipe '(:fetcher github :repo "publicimageltd/delve" :branch "main"))
(desire 'zetteldesk)

;; (desire 'org-roam-server)
;; (desire 'org-roam-ui :recipe '(:host github :repo "org-roam/org-roam-ui" :files ("*.el" "out")))
;; (desire 'org-roam-ui :recipe '(:fetcher github :repo "org-roam/org-roam-ui" :files ("*.el" "out")))
(desire 'org-roam-ui)


(desire 'magit-section)
(desire 'org-roam)

;;;}}}

3.24.2 Denote


(desire 'deft)
;; (desire-conf 'zetteldeft nil "zetteldeft" t)

;; (desire 'denote)

;;}}}

3.25 Диаграммы

3.25.1 Диаграммы Ганта

  1. org-gantt-mode

    • Добавим пакет:
      ;; (desire 'org-gantt-mode :recipe '(:fetcher gitlab :repo "joukeHijlkema/org-gantt-mode" :branch "master"))
      
      Распечатка 129: rc.packages.el
    • Загрузка пакета:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Create SVG gantt charts from an org-mode subtree
      ;;; https://gitlab.com/joukeHijlkema/org-gantt-mode
      
      (autoload 'org-gantt-mode "org-gantt-mode" "Create SVG gantt charts" t)
      
      ;;;
      
      Распечатка 130: packages/org-gantt-mode.ecf
  1. elgantt

    • Добавим пакет:
      (desire 'elgantt :recipe '(:fetcher github :repo "legalnonsense/elgantt" :branch "master"))
      
      Распечатка 131: rc.packages.el
    • Загрузка пакета:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;;  A Gantt Chart (Calendar) for Org Mode
      ;;; https://github.com/legalnonsense/elgantt
      
      (require 'elgantt)
      
      ;;;
      
      Распечатка 132: packages/elgantt/loaddefs.ecf
  1. taskjuggler

    • Загрузка пакета:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;;  Exporting Gantt charts with Taskjuggler
      
      (require 'ox-taskjuggler)
      
      ;;;
      
      Распечатка 133: packages/org/desire.ecd/ox-taskjuggler.ecf

3.26 Разное

;; XML, XHTML, HTML {{{

;;(desire-conf 'nxml nil "rng-auto")
                                      ; (desire-conf 'psgml)

;;;}}}
;;;{{{ Palm pilot support

                                      ;(desire-conf 'palm)

;;;}}}

3.27 Управление сессиями

;;; Desktop {{{

3.27.1 Сохранение состояния

;; (desire-conf 'desktop)
(desire-conf 'session nil "session")
(desire-conf 'saveplace nil "saveplace")

3.27.2 Организация рабочего пространства

  1. one-tab-per-project

    • Emacs. Пакет otpp
    • Автоматическое создание вкладки для каждого проекта, обеспечивающее управление рабочим пространством на основе панели вкладок для Emacs.
    • https://github.com/abougouffa/one-tab-per-project
    • Подключение пакета:
      (desire 'otpp)
      
      Распечатка 134: rc.packages.el
    • Предварительные настройки:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Automatically create a tab per project, providing a light tab-bar based workspace management for Emacs
      ;;;; https://github.com/abougouffa/one-tab-per-project
      
      ;;; Code:
      
      ;;;
      
      Распечатка 135: packages/otpp/loaddefs.ecf
    • Загрузка пакета:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Automatically create a tab per project, providing a light tab-bar based workspace management for Emacs
      ;;;; https://github.com/abougouffa/one-tab-per-project
      
      ;;; Code:
      
      (require 'otpp)
      
      Распечатка 136: packages/otpp/desire.ecf
    • Задание параметров:
      ;;;; If you like to define some aliases for better user experience
      (defalias 'one-tab-per-project-mode 'otpp-mode)
      (defalias 'one-tab-per-project-override-mode 'otpp-override-mode)
      
      ;;;; Keybindings
      (general-define-key
       :prefix "C-x t"
       "D" 'otpp-detach-buffer-to-tab
       "C" 'otpp-change-tab-root-dir
       "P" 'otpp-prefix)
      
      ;;;; Enable `otpp-mode` globally
      (otpp-mode 1)
      
      ;;;; If you want to advice the commands in `otpp-override-commands` to be run in the current's tab (so, current project's) root directory
      (otpp-override-mode 1)
      
      ;;;
      
      Распечатка 137: packages/otpp/desire.ecf
    • Подключение к project.el:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Automatically create a tab per project, providing a light tab-bar based workspace management for Emacs
      ;;; https://github.com/abougouffa/one-tab-per-project
      
      (require 'otpp)
      
      ;;;
      
      Распечатка 138: packages/project/otpp.ecf
  1. iBuffer

    (desire 'ibuffer)
    ;; (desire 'persp-mode)
    ;; (desire 'perspective)
    ;; (desire 'bufler)
    ;; (desire 'tabspaces)
    
    ;;}}}
    

3.28 Проекты

3.28.1 Начало

;;; Project management

3.28.2 projection

  • Projectile-подобная библиотека управления проектами для project.el
  • https://github.com/mohkale/projection
  • Подключение:
    (desire 'projection)
    
    Распечатка 139: rc.packages.el
  • Подготовка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Projectile like project management library built on Emacs project.el
    ;;;; https://github.com/mohkale/projection
    
    ;;; Code:
    
    ;;;
    
    Распечатка 140: packages/projection/loaddefs.ecf
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Projectile like project management library built on Emacs project.el
    ;;;; https://github.com/mohkale/projection
    
    ;;; Code:
    
    (require 'projection)
    
    ;;;; Keymap
    
    
    ;;;; Enable `projection-hook', adds the possibility to run functions in per-project basis
    (global-projection-hook-mode 1)
    
    ;;;
    
    Распечатка 141: packages/projection/desire.ecf
  1. Интеграция

    • Интеграция с compile-multi:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Projectile like project management library built on Emacs project.el
      ;;;; https://github.com/mohkale/projection
      
      ;;; Code:
      
      (desire 'projection-multi)
      (require 'projection-multi)
      
      ;;;; Allow interactively selecting available compilation targets from the current project type
      (general-define-key
       :keymaps 'project-prefix-map
       "RET" 'projection-multi-compile)
      
      ;;;
      
      Распечатка 142: packages/projection/compile-multi.ecf
    • Интеграция с ibuffer:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Projectile like project management library built on Emacs project.el
      ;;;; https://github.com/mohkale/projection
      
      ;;; Code:
      
      (add-hook 'ibuffer-hook 'ibuffer-projection-set-filter-groups)
      ;;;; This ensures that `ibuffer-projection-set-filter-groups' takes effect
      (add-hook 'ibuffer-hook (lambda () (run-at-time 0.1 nil (lambda () (call-interactively #'ibuffer-update)))))
      
      ;;;
      
      Распечатка 143: packages/projection/ibuffer.ecf
    • Загрузка при использовании project:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Projectile like project management library built on Emacs project.el
      ;;;; https://github.com/mohkale/projection
      
      ;;; Code:
      
      (require 'projection)
      
      ;;;; Enable `projection-hook', adds the possibility to run functions in per-project basis
      (global-projection-hook-mode 1)
      
      ;;;
      
      Распечатка 144: packages/project/projection.ecf

3.28.3 project

  • Подключение:
    (desire 'project)
    
    Распечатка 145: rc.packages.el

3.28.4 projectile

;; (desire 'projectile)

3.29 Календарь

;;; Appointments, diary, calendar {{{

;; Use "M-x calendar RET" to display the calendar and start
;; appointment warnings.

;; (desire-conf 'appt)
(desire 'calendar)
;; (desire-conf 'todo-mode)
;; (desire-conf 'diary "diary-lib")

;;;}}}

3.30 Почта

3.30.1 Общие опции

;;; These provide options for the various message handling packages {{{

(desire 'browse-url)
;; (desire-conf 'mailcrypt)
;; (desire 'supercite)

;;;}}}

3.30.2 Работа с почтой

;;; Message {{{

(desire 'smtpmail)
;; (desire 'gnus)
(desire 'message)
;; (desire-conf 'vm)
;; (desire 'wl :ensurename 'wanderlust)
;; (desire-conf 'sendmail)
;; (desire 'mu4e-dashboard :recipe '(:fetcher github :repo "rougier/mu4e-dashboard"))
(desire 'mu4e :precondition-system-executable "mu")

;;;}}}

3.31 Блоги

;;; Blogs {{{

;; (desire-conf 'hexo nil "hexo")
;; (desire-conf 'blog-admin nil "blog-admin") ;; Blog admin for emacs with hexo/org-page supported
(desire-conf 'easy-hugo  nil "easy-hugo" t) ;; Emacs major mode for managing hugo

;;;}}}
;;; Miscellaneous {{{

(desire 'ebuku)
(desire-conf 'graphviz-dot-mode nil "graphviz-dot-mode")
;; (desire-conf 'abbrev)
;; (desire-conf 'bibtex)
;; (desire-conf 'calc)
;; (desire-conf 'eiffel-mode)
;; (desire-conf 'filladapt)
;; (desire-conf 'hugs-mode)
;; (desire-conf 'html-helper-mode)
;; (desire-conf 'lispdir)
;; (desire-conf 'php-mode)
;; (desire-conf 'ps-print)
;; (desire-conf 'sh-script)
;; (desire-conf 'shell)
;; (desire-conf 'sql-mode)
;; (desire-conf 'w3)
(desire 'web-mode)
(desire 'gnuplot)

(desire 'pass)


(desire 'multiple-cursors)

3.32 Мессенджеры

(desire 'telega)

3.33 Отложенное чтение

3.33.1 Pocket reader

(desire 'pocket-reader)

3.33.2 Wallabag

  • Подключение пакета:
    (desire 'wallabag :recipe '(:fetcher github :repo "chenyanming/wallabag.el" :branch "master" :files ("*.el" "*.alist" "*.css")))
    
    Распечатка 146: rc.packages.el
  • Начальные настройки:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs wallabag client - A Read It Later/Web Archiving Solution in Emacs
    ;;; https://github.com/chenyanming/wallabag.el
    
    
    ;;;
    
    Распечатка 147: packages/wallabag/loaddefs.ecf
  • Загрузка пакета:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs wallabag client - A Read It Later/Web Archiving Solution in Emacs
    ;;; https://github.com/chenyanming/wallabag.el
    
    (require 'wallabag)
    
    ;;; Retrieve new entries after `M-x wallabag`
    (add-hook 'wallabag-after-render-hook 'wallabag-search-update-and-clear-filter)
    
    ;;; Image Caching. Setting url-automatic-caching non-nil causes documents to be cached automatically
    (setq url-automatic-caching t)
    
    ;;;
    
    Распечатка 148: packages/wallabag/desire.ecf
  • Шаблон настройки параметров для пользователя:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs wallabag client - A Read It Later/Web Archiving Solution in Emacs
    ;;; https://github.com/chenyanming/wallabag.el
    
    ;;; Wallabag server host name
    ;; (setq wallabag-host "https://xx.xx.xx")
    
    ;;; Username
    ;; (setq wallabag-username "xx")
    
    ;;; Password
    ;; (setq wallabag-password "xx")
    
    ;;; Created with API clients management
    ;; (setq wallabag-clientid "xx")
    
    ;;; Created with API clients management
    ;; (setq wallabag-secret "xx")
    
    ;;;
    
    Распечатка 149: packages/wallabag/personal.ecf

3.34 Dashboard


;;;}}}

;; (desire 'grammarly)

;; (desire 'flycheck-grammarly)

(desire 'dashboard)

;; PERSONAL

;; (require 'chord-mode)  ; edit guitar music.
;; (require 'discography) ; variant of BibTeX mode for discographies.

3.35 Разные программные режимы

3.35.1 Начало

  • Файл rc.packages.el:
    ;;; Different program modes {{{
    

3.35.2 Пакет csv-mode

  • Emacs. cvs-mode
  • Файл rc.packages.el:
    ;;; csv-mode
    (desire 'csv-mode)
    
  • Установим вызов cvs-mode для расширения .cvs.
    • Файл packages/csv-mode/loaddefs.ecf:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Major mode for editing comma/char separated values
      ;;; https://elpa.gnu.org/packages/csv-mode.html
      
      (add-to-list 'auto-mode-alist '("\\.[Cc][Ss][Vv]\\'" . csv-mode))
      
      ;;;
      
  • Загружаем пакет при необходимости.
    • Файл packages/csv-mode/desire.ecf:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; Major mode for editing comma/char separated values
      ;;; https://elpa.gnu.org/packages/csv-mode.html
      
      (require 'csv-mode)
      
  • Подключим режим визуального выравнивания полей.
    • Файл packages/csv-mode/desire.ecf:
      ;;; Keeps fields visually aligned, on-the-fly
      (add-hook 'csv-mode-hook 'csv-align-mode)
      
  • Настроим визуально представление длинных строк.
    • Файл packages/csv-mode/desire.ecf:
      (add-hook 'csv-mode-hook '(lambda () (interactive) (toggle-truncate-lines nil)))
      
      ;;;
      

3.35.3 Поддержка ebuild-файлов

  • Сайт: https://wiki.gentoo.org/wiki/Project:Emacs
  • Файл rc.packages.el:
    ;;; Ebuild files
    (desire 'ebuild-mode :recipe '(:fetcher github :repo "emacsmirror/ebuild-mode" :branch "master"))
    
    Распечатка 150: rc.packages.el
  • Настроим загрузку:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Edit ebuild and eclass files
    ;;; https://wiki.gentoo.org/wiki/Project:Emacs
    ;;; https://github.com/emacsmirror/ebuild-mode
    
    (add-to-list 'load-path "/usr/share/emacs/site-lisp/ebuild-mode")
    (autoload 'ebuild-mode "ebuild-mode"
      "Major mode for Gentoo .ebuild files." t)
    (autoload 'ebuild-eclass-mode "ebuild-mode"
      "Major mode for Gentoo .eclass files." t)
    (autoload 'ebuild-repo-mode "ebuild-mode"
      "Minor mode for files in an ebuild repository." t)
    (autoload 'ebuild-repo-mode-maybe-enable "ebuild-mode")
    (autoload 'devbook-mode "devbook-mode"
      "Major mode for editing the Gentoo Devmanual." t)
    (autoload 'gentoo-newsitem-mode "gentoo-newsitem-mode"
      "Major mode for Gentoo GLEP 42 news items." t)
    (autoload 'glep-mode "glep-mode"
      "Major mode for Gentoo Linux Enhancement Proposals." t)
    
    (add-to-list 'auto-mode-alist '("\\.ebuild\\'" . ebuild-mode))
    (add-to-list 'auto-mode-alist '("\\.eclass\\'" . ebuild-eclass-mode))
    (add-to-list 'auto-mode-alist '("/devmanual.*\\.xml\\'" . devbook-mode))
    (add-to-list 'auto-mode-alist
             '("/[0-9]\\{4\\}-[01][0-9]-[0-3][0-9]-.+\\.[a-z]\\{2\\}\\.txt\\'"
               . gentoo-newsitem-mode))
    (add-to-list 'auto-mode-alist '("/glep.*\\.rst\\'" . glep-mode))
    (add-to-list 'auto-mode-alist
             '("/\\(package\\.\\(mask\\|unmask\\|use\\|env\
    \\|license\\|properties\\|accept_\\(keywords\\|restrict\\)\\)\
    \\|\\(package\\.\\)?use.\\(stable\\.\\)?\\(force\\|mask\\)\\)\\'"
               . conf-space-mode))
    (add-to-list 'auto-mode-alist
             '("/make\\.\\(conf\\|defaults\\)\\'" . conf-unix-mode))
    (add-to-list 'interpreter-mode-alist '("openrc-run" . sh-mode))
    (add-to-list 'interpreter-mode-alist '("runscript" . sh-mode))
    (add-hook 'find-file-hook #'ebuild-repo-mode-maybe-enable)
    (modify-coding-system-alist 'file "\\.\\(ebuild\\|eclass\\)\\'" 'utf-8)
    
    Распечатка 151: packages/ebuild-mode/loaddefs.ecf

3.35.4 Asymptote

  1. Редактирование файлов Asymptote

    • Поддержка редактирования файлов Asymptote.
    • Файл rc.packages.el:
      ;;; Asymptote
      (desire 'asy-mode :recipe '(:fetcher github :repo "vectorgraphics/asymptote" :branch "master" :files ("base/asy-mode.el")))
      
      Распечатка 152: rc.packages.el
    • Конфигурационный файл:
      ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
      ;;; 2D & 3D TeX-Aware Vector Graphics Language
      ;;; https://github.com/vectorgraphics/asymptote
      
      (autoload 'asy-mode "asy-mode.el" "Asymptote major mode." t)
      (autoload 'lasy-mode "asy-mode.el" "hybrid Asymptote/Latex major mode." t)
      (autoload 'asy-insinuate-latex "asy-mode.el" "Asymptote insinuate LaTeX." t)
      (add-to-list 'auto-mode-alist '("\\.asy$" . asy-mode))
      
      ;;;
      
      Распечатка 153: packages/asy-mode.ecf
  1. Поддержка Asymptote в Babel

    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Org-Babel support for evaluating asymptote
    ;;; https://github.com/hurrja/ob-asymptote
    
    (desire 'ob-asymptote)
    (require 'ob-asymptote)
    
    ;;;
    
    Распечатка 154: packages/org/desire.ecd/ob-asymptote.ecf

3.35.5 kmonad-файлы

  • Поддержка синтаксиса конфигурационных файлов kmonad.
  • Файл rc.packages.el:
    ;;; kbd-mode
    ;; (desire 'kbd-mode :recipe '(:fetcher github :repo "kmonad/kbd-mode" :branch "master"))
    
    Распечатка 155: rc.packages.el
  • Конфигурационный файл:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs mode for syntax highlighting kmonad's .kbd files.
    ;;; https://github.com/kmonad/kbd-mode
    
    (autoload 'kdb-mode "kbd-mode.el" "Kmonad's .kbd files" t)
    (add-to-list 'auto-mode-alist '("\\.kbd$" . kbd-mode))
    
    ;;;
    
    Распечатка 156: packages/kbd-mode.ecf

3.35.6 Julia

;;; Julia {{{

;;; Code completion and syntax checking
                                      ;(desire 'eglot-jl)
;;; REPL integration
(desire 'julia-snail)
;; (desire 'julia-repl)
;;; Syntax highlighting and latex symbols
(desire 'julia-mode)
  1. Конец

    • Файл rc.packages.el:
      ;;;}}}
      

3.35.7 Поддержка командной оболочки fish

  • Загрузка пакета:
    ;;; https://github.com/wwwjfy/emacs-fish
    (desire 'fish-mode)
    
    Распечатка 157: rc.packages.el
  • Настройка пакета:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; fish-mode for emacs
    ;;; https://github.com/wwwjfy/emacs-fish
    
    ;;; run fish_indent before save
    (add-hook 'fish-mode-hook (lambda ()
                            (add-hook 'before-save-hook 'fish_indent-before-save)))
    
    ;;;
    
    Распечатка 158: packages/fish-mode.ecf

3.35.8 Разное

(desire 'speedbar)
;; (desire-conf 'semantic nil "semantic")

;; (desire-conf 'cedet nil "cedet")
;; (desire-conf 'ecb nil "ecb")

;; (desire-conf 'php-mode nil "php-mode")
;; (desire-conf 'eiffel-mode nil "eiffel-mode")

(desire 'ebib)

(desire 'lua-mode)


(desire 'yaml-mode)
(desire 'ini-mode)
(desire 'hcl-mode)

(desire 'magit-gitflow)
(desire 'magit)

3.35.9 Конец

  • Файл rc.packages.el:
    ;;;}}}
    

3.36 Редактирование текста в броузере

3.36.1 Начало

  • Файл rc.packages.el:
    ;;; Edit text areas in browsers {{{
    

3.36.2 Edit with Emacs

  • Файл rc.packages.el:
    (desire 'edit-server)
    
  • Файл packages/edit-server.ecf:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; A Chromium/Firefox "clone" of It's All Text for spawning an editor to edit text areas in browsers. Based on David Hilley's original Chromium extension.
    ;;; https://github.com/stsquad/emacs_chrome
    
    (require 'edit-server)
    
    (setq edit-server-new-frame nil)
    (edit-server-start)
    
    (setq edit-server-url-major-mode-alist
          '(("github\\.com" . markdown-mode)))
    
    ;;;
    

3.36.3 Ghost Text

  • Файл rc.packages.el:
    ;; (desire 'atomic-chrome)
    
  • Файл packages/atomic-chrome.ecf:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Edit text area on Chrome with Emacs using Atomic Chrome
    ;;; https://github.com/alpha22jp/atomic-chrome
    
    (require 'atomic-chrome)
    (atomic-chrome-start-server)
    
    ;;; Atomic Chrome for Emacs automatically reflects modifications to the browser by default
    (setq atomic-chrome-enable-auto-update t)
    
    ;;; The default major mode of editing buffer is `text-mode`. You can change the major mode manually
    (setq atomic-chrome-default-major-mode 'markdown-mode)
    
    ;;; Choose the major mode for a specific website
    (setq atomic-chrome-url-major-mode-alist
          '(("github\\.com" . gfm-mode)
            ("redmine" . textile-mode)))
    
    ;;; Select editing buffer style
    ;;; full: Open in the selected window.
    ;;; split: Open in the new window by splitting the selected window (default).
    ;;; frame: Create a new frame and window in it.
    ;; (setq atomic-chrome-buffer-open-style split)
    
    ;;;
    

3.36.4 Конец

  • Файл rc.packages.el:
    ;;;}}}
    

3.37 Навигация по файлам

3.37.1 dired

  1. dired

    • Файл rc.packages.el:
      ;;; Dired {{{
      
      (desire 'mouse3 :recipe '(:fetcher github :repo "emacsmirror/mouse3" :branch "master" :files ("*.el")))
      
      (desire 'dired)
      (desire 'dired+ :recipe '(:fetcher github :repo "emacsmirror/dired-plus" :branch "master" :files ("*.el")))
      
      ;; (desire 'ranger)
      ;; (desire 'efar)
      ;; (desire 'sunrise-commander :recipe '(:fetcher github :repo "sunrise-commander/sunrise-commander"))
      (desire 'dirvish)
      ;;;}}}
      
  1. diredc

    • Репозиторий: https://github.com/Boruch-Baum/emacs-diredc
    • Двупанельный (как в midnight commander) режим.
    • Подключение:
      ;;; Midnight Commander features (plus) for emacs dired-mode
      ;; (desire 'diredc)
      
      Распечатка 159: rc.packages.el

3.37.2 Neotree

3.37.3 Treemacs

  • Файл rc.packages.el:
    (desire 'treemacs)
    

3.38 Навигация по тексту

3.38.1 Начало

  • Файл rc.packages.el:
    ;;; Text navigation {{{
    

3.38.2 line-reminder

  • Line annotation for changed and saved lines: https://github.com/emacs-vs/line-reminder
  • Файл rc.packages.el:
    ;;; Line annotation for changed and saved lines
    (desire 'line-reminder)
    
  • Файл rc.packages.el:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Line annotation for changed and saved lines
    ;;; https://github.com/emacs-vs/line-reminder
    
    ;;; Enable for all buffers
    (global-line-reminder-mode t)
    
    ;;; Display Annotation
    ;;; linum | indicators
    (setq line-reminder-show-option 'linum)
    
    ;;; Display thumbnail
    (setq line-reminder-thumbnail t)
    
    ;;;
    

3.38.3 Конец

  • Файл rc.packages.el:
    ;;;}}}
    

3.39 Перевод

3.39.1 go-translate

  • Подключаем:
    ;;; Translator on Emacs
    (desire 'go-translate)
    
    Распечатка 160: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Translator on Emacs. Supports multiple engines such as Google, Bing, deepL, ChatGPT, StarDict, Youdao and so on
    ;;; https://github.com/lorniu/go-translate
    
    (require 'go-translate)
    
    ;;;
    
    Распечатка 161: packages/go-translate/loaddefs.ecf
  • Конфигурация:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Translator on Emacs. Supports multiple engines such as Google, Bing, deepL, ChatGPT, StarDict, Youdao and so on
    ;;; https://github.com/lorniu/go-translate
    
    
    ;;;
    
    Распечатка 162: packages/go-translate/desire.ecf
  • Простейшая конфигурация:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Translator on Emacs. Supports multiple engines such as Google, Bing, deepL, ChatGPT, StarDict, Youdao and so on
    ;;; https://github.com/lorniu/go-translate
    
    ;;; Initialize the default translator, let it translate between en and ru via Google Translate, and the result will be displayed in the Echo Area.
    (setq gt-langs '(en ru))
    (setq gt-default-translator (gt-translator :engines (gt-google-engine)))
    
    ;;;
    
    Распечатка 163: packages/go-translate/desire.ecd/google-simple.ecf

3.40 Modeline

3.40.1 Начало

  • Файл rc.packages.el:
    ;;; Modeline {{{
    
    Распечатка 164: rc.packages.el

3.40.2 Общие настройки modeline

  • Загрузим только конфигурационный файл:

    (desire-conf 'modeline)
    
    Распечатка 165: rc.packages.el
  • Заголовок файла:

    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Configure modeline
    
    Распечатка 166: packages/modeline.ecf
  • Показывать столбец, в котором находится курсор (https://www.gnu.org/software/emacs/manual/html_node/efaq/Displaying-the-current-line-or-column.html):

    ;;; Show column number
    (setq column-number-mode t)
    
    Распечатка 167: packages/modeline.ecf
  • Задаём 24-часовой формат времени:

    ;;; Time in 24 hour format, plus day and date.
    (setq display-time-day-and-date t)
    (setq display-time-24hr-format t)
    
    Распечатка 168: packages/modeline.ecf
  • Мы можем захотеть видеть и секунды:

    ;;; Display time in seconds in the mode line
    ;;; %H is the hour on a 24-hour clock, %I is on a 12-hour clock,
    ;;; %k is like %H only blank-padded, %l is like %I blank-padded.
    ;;; %p is the locale's equivalent of either AM or PM.
    ;;; %M is the minute, %S is the second.
    (setq display-time-format "%H:%M:%S")
    (setq display-time-interval 1)
    
    Распечатка 169: packages/modeline.ecf
  • Разрешим показывать время в модлайн:

    ;;; Enable the display of time and CPU load average in the modeline
    (display-time-mode 1)
    
    ;;;
    
    Распечатка 170: packages/modeline.ecf

3.40.3 Конец

  • Файл rc.packages.el:
    ;;;}}}
    
    Распечатка 171: rc.packages.el

3.41 Темы

  • Подключаем темы в файле rc.packages.el:
    ;;; Themes {{{
    
    ;;; Nested menu for minor modes
    (desire 'minions)
    
    ;;; Tabs and ribbons for the mode-line
    (desire 'moody)
    
    ;;; Spacemacs theme
    ;; (desire 'spacemacs-theme :precondition-lisp-library "spacemacs-theme-pkg")
    
    ;;; Doom themes
    ;; (desire 'doom-themes)
    
    ;; (desire 'zenburn-theme)
    ;; (desire 'lambda-themes :recipe '(:fetcher github :repo "Lambda-Emacs/lambda-themes" :branch "main"))
    ;; (desire 'tao-theme)
    
    ;;; N Λ N O Theme
    ;; (desire 'nano-theme)
    
    ;;; Increase the padding/spacing of frames and windows
    ;; (desire 'spacious-padding)
    

3.41.1 Modus-themes

3.41.2 Ef-themes

3.41.3 Финализирование

  • Финализируем раздел в rc.packages.el:
    
    ;;;}}}
    

3.42 Внешний вид

3.42.1 Posframe

  • Дочерний фрейм в точке.
  • https://github.com/tumashu/posframe
  • Подключение:
    (desire 'posframe)
    
    Распечатка 172: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Pop a posframe (just a child-frame) at point
    ;;;; https://github.com/tumashu/posframe
    
    (require 'posframe)
    
    ;;;
    
    Распечатка 173: packages/posframe/loaddefs.ecf
  • Настройка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Pop a posframe (just a child-frame) at point
    ;;;; https://github.com/tumashu/posframe
    
    ;;;
    
    Распечатка 174: packages/posframe/desire.ecf
  • Поддержка vertico:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Vertico-posframe is an vertico extension, which lets vertico use posframe to show its candidate menu
    ;;;; https://github.com/tumashu/vertico-posframe
    
    (desire 'vertico-posframe)
    
    (require 'vertico-posframe)
    ;; (vertico-posframe-mode 1)
    
    (setq vertico-multiform-commands
          '((consult-line
             posframe
             (vertico-posframe-poshandler . posframe-poshandler-frame-top-center)
             (vertico-posframe-border-width . 10)
             ;; NOTE: This is useful when emacs is used in both in X and
             ;; terminal, for posframe do not work well in terminal, so
             ;; vertico-buffer-mode will be used as fallback at the
             ;; moment.
             (vertico-posframe-fallback-mode . vertico-buffer-mode))
            (t posframe)))
    (vertico-multiform-mode 1)
    
    ;;;
    
    Распечатка 175: packages/posframe/vertico.ecf

3.42.2 Nova

  • Репозиторий: https://github.com/thisisran/nova
  • Прорисовка дочерних фреймов с помощью SVG.
  • Подключение:
    (desire 'eldoc-box)
    ;; (desire 'nova :recipe '(:fetcher github :repo "thisisran/nova" :branch "main"))
    
    Распечатка 176: rc.packages.el
  • Загрузка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs SVG Child Frames
    ;;;; https://github.com/thisisran/nova
    
    (require 'nova)
    
    ;;;
    
    Распечатка 177: packages/nova/loaddefs.ecf
  • Настройка:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs SVG Child Frames
    ;;;; https://github.com/thisisran/nova
    
    ;;;
    
    Распечатка 178: packages/nova/desire.ecf
  • Поддержка vertico:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs SVG Child Frames
    ;;;; https://github.com/thisisran/nova
    
    (require 'nova-vertico)
    (nova-vertico-mode 1)
    
    ;;;
    
    Распечатка 179: packages/nova/vertico.ecf
  • Поддержка corfu:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs SVG Child Frames
    ;;;; https://github.com/thisisran/nova
    
    (require 'nova-corfu)
    (require 'nova-corfu-popupinfo)
    
    (nova-corfu-mode 1)
    (nova-corfu-popupinfo-mode 1)
    
    ;;;
    
    Распечатка 180: packages/nova/corfu.ecf
  • Поддержка eldoc-box:
    ;;; -*- mode: emacs-lisp; lexical-binding: t; coding: utf-8-unix; -*-
    ;;; Emacs SVG Child Frames
    ;;;; https://github.com/thisisran/nova
    
    ;; (require 'nova-eldoc)
    ;; (nova-eldoc-mode 1)
    
    ;;;
    
    Распечатка 181: packages/nova/eldoc-box.ecf

3.43 Финализирование

  • Финализируем файл rc.packages.el:
    
    ;;; rc.packages.el ends here
    
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Мои научные интересы включают физику, администрирование Unix и сетей.