Changeset fde9de8 in dotfiles for emacs/.emacs.d/.emacs-config.org
- Timestamp:
- Sep 3, 2024, 10:43:11 PM (2 months ago)
- Branches:
- master
- Children:
- fc6fa17
- Parents:
- fe2941b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
emacs/.emacs.d/.emacs-config.org
rfe2941b rfde9de8 1 #+TITLE: Конфигурация Emacs2 #+AUTHOR: Кириллов <w96k.dev> Михаил1 #+TITLE: Emacs configuration 2 #+AUTHOR: Kirillov <w96k.dev> Mikhail 3 3 #+OPTIONS: toc:nil 4 4 #+PROPERTY: header-args:elisp :results silent 5 5 #+STARTUP: showeverything 6 6 7 * Вклады 8 Конфигурация составлена из моего кода, а также кода из конфигураций 9 других людей. Их настолько, что все перечислять я не смогу, но оставлю 10 интересные конфигурации других людей, в которые я время от времени 11 заглядываю. 12 13 * Лицензия 14 Я выступаю против копирайта и интеллектуальной собственности в целом, 15 поэтому стараюсь копирайт избегать. По этой причине свой код 16 распространяю на правах общественного достояния вашей страны. Для этого 17 используется лицензия [[https://creativecommons.org/publicdomain/zero/1.0/][CC0]]. Если кратко, то можете использовать без 18 ограничений вплоть до полной приватизации всего контента. К сожалению за 19 чужие сниппеты не могу ручаться, они распространяются по своим лицензиям 20 и я их не указывал, впрочем всё равно никто это не проверяет и я бы не 21 стал напрягаться из-за авторских прав на конфигурацию текстового 22 редактора. 23 24 * О конфигурации 25 Минимальная конфигурация Emacs. Пакеты ставлю через Guix или package.el 26 (elpa и melpa), для разделения ответственности использую грамотное 27 программирование при помощи org-mode. 28 29 Версия Emacs 28+. 30 - В Guix пакет ~emacs-next~ 31 - В FreeBSD пакет ~emacs-devel~ 32 - В Ubuntu [[https://launchpad.net/~kelleyk/+archive/ubuntu/emacs][PPA emacs28]] и пакет ~emacs28-native~ 33 34 Из программирования поддерживаются /C/, Java, /Python/, /Common Lisp / 35 Scheme/, Haskell, Idris, Ocaml, /Ruby/, PHP, /SML/, SQL, Erlang, 36 редактирование веб-шаблонов и различных форматов конфигураций. Какие-то 37 языки в лучшей мере настроены, какие-то хуже, но есть почти все 38 плюс-минус популярные. 39 40 Для систем контроля версий использую встроенный /VC/ и в некоторых случаях 41 /Magit/. Для входа в виртуальные среды используется Direnv. 42 43 Для ведения заметок использую методологию Zettelkasten при помощи 44 org-roam. Для доступа к оффлайн википедии и другим ресурсам Kiwix 45 клиент, который стучится на сервер, который стоит дома. 46 47 Для коммуникаций клиент для Telegram /telega/, для IRC /erc/ и электронной 48 почты /gnus/, для Mastodon mastodon.el. 49 50 Для системного администрирования имеют пакеты для работы с Debian, 51 NixOS, Guix. Также есть поддержка Docker, Docker-compose: можно 52 запускать/стопать контейнеры, а также залетать в них через TRAMP. 53 54 Для установки необходимо установить пакеты Emacs из ~../../guix/user.scm~ 55 и выполнить tangle файла при помощи /M-x org-babel-tangle-file/. В 56 дальнейшем для развёртывания конфигурации можно использовать /M-x 57 config-tangle/ или /M-x config-load/. 58 59 Данная конфигурация доступна также в сети интернет по адресу, но так как 60 сайт обновляется нечасто, то там может лежать старая версия: 7 * About this Emacs configuration 8 9 Configuration uses org-mode to tangle its contents to init.el and then 10 be used by emacs. I use guix home for my emacs config on gnu guix 11 system. 12 13 If you see :tangle nil it means that snippet is not used anymore, but 14 it is left because it might be valuable in a future for me. 15 16 This configuration is available here: 61 17 https://w96k.dev/emacs.html 62 18 63 Исходники конфигурации лежат наSourcehut:19 The git source code is hosted on Sourcehut: 64 20 https://git.sr.ht/~w96k/dotfiles/tree/master/item/emacs 65 21 66 Распространяется на условиях свободной лицензии [[https://gnu.org/licenses/gpl-3.0.ru.html][GNU GPL v3]], 67 реиспользование одобряется пока распространяется под той же лицензией. 68 69 * Пакеты 70 Данная конфигурация использует следующие пакеты: 71 72 - Avy :: Прыжки по тексту 73 - Anaconda :: Поддержка Python 74 - Auctex :: Поддержка Tex и LaTeX 75 - Browse Kill Ring :: Обзор буфера обмена 76 - Haskell Mode :: Поддержка языка Haskell 77 - Idris Mode :: Поддержка языка Idris 78 - Magit :: Интерфейс к git 79 - Gitpatch :: Создание патчей 80 - Goto Cgh :: Переход к последнему изменению в буфере 81 - Debbuge :: Интерфейс debbugs (репорт багов Debian) 82 - Deft :: Полнотекстовый поиск 83 - Direnv :: Изменение окружения при "входе" в директорию 84 - Docker и Docker Compose :: Моды для поддержки контейнерных технологий 85 - Exec Path From Shell :: Синхронизация PATH переменной из шелла 86 - Expand Region :: Семантическое расширение выделения на курсоре 87 - Robe :: Прыжки по определениям Ruby 88 - Geiser :: Repl для языка Scheme 89 - Guix :: Интерфейс к Guix 90 - Org Roam :: Zettelkasten заметки в org-mode 91 - Gnuplot :: Программное рисование графиков 92 - Nix Mode :: Поддержка языка Nix 93 - Pdf Tools :: Рендер PDF файлов в Emacs 94 - PHP Mode :: Поддержка языка PHP 95 - Kiwix :: Чтение скачанных архивов веб-страниц 96 - SML Mode :: Поддержка языка Standard ML 97 - Sly/Slime :: REPL языка Common Lisp 98 - Simple HTTPD :: HTTP Сервер на elisp 99 - Telega :: Интерфейс к Telegram 100 - Treemacs :: Сайдбар для навигации по проекту 101 - Undo Tree :: Визуализация дерева отмен 102 - Yasnippet и Yasnippet Snippets :: Сниппеты для текстов и ЯПов 103 - Web Mode :: Поддержка шаблонов HTML и прочего 104 105 Следующий блок нужен для тех, кто хочет использовать встроенный пакетный 106 менеджер. Я использую Guix для большей части взаимодействий со сторонним 107 кодом. 22 The license of emacs config and dotfiles is CC0 which is Public Domain. 23 24 ** Packets 25 Only needed when I need to install a package from Melpa and not GNU Guix 108 26 #+begin_src elisp :tangle nil 109 27 (require 'package) … … 116 34 117 35 (require 'gnutls) 118 119 (progn120 (package-refresh-contents)121 (package-install 'avy)122 (package-install 'php-mode)123 (package-install 'phps-mode)124 ;; (package-install 'anzu)125 (package-install 'anaconda-mode)126 (package-install 'auctex)127 ;; (package-install 'rmsbolt)128 ;; (package-install 'beginend)129 ;; (package-install 'composer)130 (package-install 'cinspect)131 (package-install 'debian-el)132 (package-install 'dpkg-dev-el)133 (package-install 'edebug-inline-result)134 ;;(package-install 'haskell-mode)135 ;;(package-install 'idris-mode)136 (package-install 'magit)137 (package-install 'git-timemachine)138 (package-install 'git-dwim)139 (package-install 'gitpatch)140 (package-install 'goto-chg)141 (package-install 'debbugs)142 ;;(package-install 'deft)143 ;; (package-install 'direnv)144 (package-install 'dumb-jump)145 (package-install 'docker)146 (package-install 'docker-cli)147 (package-install 'docker-tramp)148 (package-install 'docker-compose-mode)149 (package-install 'org-sql)150 ;;(package-install 'eglot)151 ;; (package-install 'eglot-java)152 ;; (package-install 'mastodon)153 ;; (package-install 'exec-path-from-shell)154 (package-install 'expand-region)155 ;; (package-install 'flymake-php)156 (package-install 'flycheck)157 (package-install 'flycheck-phpstan)158 (package-install 'phpactor)159 ;;(package-install 'robe)160 (package-install 'geiser)161 (package-install 'geiser-guile)162 (package-install 'guix)163 ;; (package-install 'git-gutter)164 ;; (package-install 'gnuplot)165 ;;(package-install 'swiper)166 ;;(package-install 'sqlite3)167 (package-install 'org-roam)168 ;; (package-install 'org-roam-ui)169 ;; (package-install 'org-download)170 ;; (package-install 'org-babel-eval-in-repl)171 ;;(package-install 'ob-php)172 ;; (package-install 'on-screen)173 ;;(package-install 'nix-mode)174 (package-install 'pdf-tools)175 ;;(package-install 'phpactor)176 ;; (package-install 'company-quickhelp)177 ;;(package-install 'ac-php)178 (package-install 'php-mode)179 (package-install 'php-quickhelp)180 (package-install 'phan)181 ;;(package-install 'php-cs-fixer)182 ;; (package-install 'company-php)183 ;;(package-install 'php-eldoc)184 ;;(package-install 'phps-mode)185 (package-install 'realgud)186 ;; (package-install 'realgud-xdebug)187 ;; (package-install 'kiwix)188 ;;(package-install 'sml-mode)189 (package-install 'sly)190 (package-install 'simple-httpd)191 (package-install 'sudo-edit)192 ;;(package-install 'treemacs)193 (package-install 'undo-tree)194 ;; (package-install 'yasnippet)195 ;; (package-install 'yasnippet-snippets)196 ;; (package-install 'vimrc-mode)197 ;; (package-install 'flymake-phpcs)198 ;; (package-install 'flymake-phpstan)199 ;; (package-install 'no-littering)200 (package-install 'web-mode)201 ;; (package-install 'which-key)202 ;; (package-install 'reverse-im)203 (package-install 'imenu-list)204 ;; (package-install 'isearch-mb)205 (package-install 'visual-fill-column)206 ;; (package-install 'browse-kill-ring)207 (package-install 'corfu)208 ;; (package-install 'inf-ruby)209 (package-install 'yaml-mode)210 ;; (package-install 'geben)211 (package-install 'link-hint)212 (package-install 'whole-line-or-region)213 (package-install 'quickrun)214 ;; (package-install 'psysh)215 ;; (package-install 'restclient)216 )217 #+end_src218 219 *** Ручная компиляция220 #+begin_src elisp :tangle nil :results nil221 ;; (native-compile-async "~/.emacs.d/elpa/" 'recursively)222 (native-compile-async "~/.guix-profile/share/emacs/site-lisp" 'recursively)223 224 ;; block until native compilation has finished225 (while (or comp-files-queue226 (> (comp-async-runnings) 0))227 #+end_src228 229 ** Отключаем ненужные загрузки230 #+begin_src emacs-lisp :tangle nil231 ;; Disable guix autoloading and x resources loading232 (setq site-run-file nil)233 36 #+end_src 234 37 … … 242 45 243 46 244 ** Редакируем GUI 245 Удаляем ненужные бары, меняем шрифт и модлайн. Использую дефолтный для 246 шрифт DeJavu или недефолтный Agave, так как он является одним из самых интернациональных 247 шрифтов по количеству доступных символов после Unifont. Unifont я не 248 стал использовать, потому что иксы замыливают этот пиксельный шрифт, что 249 делает его использование крайне неприятным. 250 251 #+begin_src emacs-lisp :tangle nil 252 ;; Change mode-line-modes to show only major mode 253 (defvar mode-line-major-mode 254 (let ((recursive-edit-help-echo "Recursive edit, type C-M-c to get out")) 255 (list (propertize "%[" 'help-echo recursive-edit-help-echo) 256 `(:propertize ("" mode-name) 257 help-echo "Major mode\n\ 258 mouse-1: Display major mode menu\n\ 259 mouse-2: Show help for major mode\n\ 260 mouse-3: Toggle minor modes" 261 mouse-face mode-line-highlight 262 local-map ,mode-line-major-mode-keymap) 263 '("" mode-line-process) 264 (propertize "%n" 'help-echo "mouse-2: Remove narrowing from buffer" 265 'mouse-face 'mode-line-highlight 266 'local-map (make-mode-line-mouse-map 267 'mouse-2 #'mode-line-widen)) 268 (propertize "%]" 'help-echo recursive-edit-help-echo) 269 " ")) 270 "Mode line construct for displaying major and minor modes.") 271 272 (put 'mode-line-major-mode 'risky-local-variable t) 273 274 ;; Change mode-line-format 275 (setq-default mode-line-format 276 '("%e" 277 mode-line-front-space 278 mode-line-mule-info 279 280 mode-line-client 281 mode-line-modified 282 mode-line-remote 283 mode-line-frame-identification 284 ;; long-path 285 mode-line-buffer-identification 286 mode-line-misc-info 287 " " 288 mode-line-major-mode 289 " " 290 vc-mode 291 " " 292 293 mode-line-position 294 mode-line-end-spaces 295 )) 296 #+end_src 297 298 299 #+begin_src emacs-lisp :tangle nil 300 ;; Do not resize the frame at this early stage. 301 (setq frame-inhibit-implied-resize t) 302 (setq use-dialog-box nil) 303 304 ;;; Disable some gui 305 (scroll-bar-mode -1) 306 (tool-bar-mode -1) 307 (menu-bar-mode -1) 308 ;;(tooltip-mode -1) 309 310 ;;; Changing emacs default setting through customize 311 (custom-set-variables 312 '(fill-column 72) 313 '(git-gutter:added-sign " ") 314 '(git-gutter:deleted-sign " ") 315 '(git-gutter:modified-sign " ") 316 '(git-gutter:unchanged-sign " ") 317 '(lsp-headerline-breadcrumb-enable nil) 318 '(scroll-bar-mode 'nil) 319 '(scroll-bar-adjust-thumb-portion nil) 320 '(tool-bar-position 'bottom) 321 '(tool-bar-style 'both-horiz)) 322 323 (custom-set-faces 324 '(default ((t (:height 140 :family "Jetbrains Mono" :embolden t)))) 325 '(region ((t (:background "gray85")))) 326 '(mode-line ((t (:background "grey70" :foreground "grey10")))) 327 '(mode-line-inactive ((t (:inherit mode-line :background "grey90" :foreground "grey20" :box (:line-width (-2 . -2) :color "grey85") :weight light)))) 328 '(mode-line-buffer-id ((t (:weight bold)))) 329 '(mode-line-emphasis ((t (:weight bold)))) 330 '(lsp-modeline-code-actions-face ((t :inherit mode-line :height 100))) 331 '(tool-bar ((t (:background "grey80" :foreground "grey10")))) 332 '(fill-column-indicator ((t (:foreground "grey95")))) 333 '(hl-line ((t (:background "gray95")))) 334 '(fringe ((t (:background "grey87")))) 335 '(header-line ((t (:inherit mode-line :background "grey90")))) 336 '(vertical-border ((t (:foreground "grey90")))) 337 '(window-divider ((t (:foreground "gray90"))))) 338 339 (set-fringe-style (cons 7 7)) 340 341 (defun switch-gui () 342 "Disable/enable menu-bar and tool-bar." 343 (interactive) 344 (if menu-bar-mode 345 (progn 346 (menu-bar-mode -1) 347 (tool-bar-mode -1) 348 (scroll-bar-mode -1)) 349 (progn 350 (menu-bar-mode 1) 351 (tool-bar-mode 1) 352 (scroll-bar-mode 1)))) 353 354 (defun switch-scroll-bar () 355 "Disable/enable scroll-bar." 356 (interactive) 357 (if scroll-bar-mode 358 (scroll-bar-mode -1) 359 (scroll-bar-mode))) 360 361 (define-key global-map (kbd "<f5>") 'switch-gui) 362 (define-key global-map (kbd "<f8>") 'switch-scroll-bar) 363 364 (provide 'early-init) 365 ;;; early-init.el ends here 366 #+end_src 367 368 ** Инициализируем остальной конфиг 369 Следующие блоки кода выводят в файл init.el. 47 ** Init.el 370 48 #+begin_src emacs-lisp :tangle init.el 371 49 ;; -*- lexical-binding: t -*- … … 374 52 ;; (setq debug-on-error nil) 375 53 ;; (setq debug-on-quit nil) 376 377 (require 'package)378 (package-initialize)379 380 (defun package-loaded? (string)381 (if (or (cl-member string package-activated-list :test #'string=)382 (ignore-errors (load (concat string "-autoloads"))))383 t384 (progn385 (message (concat "Package " string " is not loaded"))386 nil)))387 54 388 55 ;; Timer … … 405 72 406 73 * Meta 407 ** Обо мне74 ** About me 408 75 #+BEGIN_SRC emacs-lisp :tangle init.el 409 76 ;; Information about me … … 412 79 #+END_SRC 413 80 414 ** Конфигурация 415 Базовые функции для манипулирования конфигом в дальнейшем, чтобы не 416 приходилось танглить вручную. 81 ** Configuration 417 82 #+BEGIN_SRC emacs-lisp :tangle init.el 418 83 (setq config-dotfiles-path "/home/w96k/projects/dotfiles/emacs/.emacs.d/" … … 431 96 ;; (rename-file (concat config-dotfiles-path "early-init.el") config-path t) 432 97 (rename-file (concat config-dotfiles-path "init.el") config-path t)) 433 434 (defun config-load () 435 (interactive) 436 (org-babel-load-file (concat config-dotfiles-path config-name) t)) 437 438 #+END_SRC 439 440 * Внешний вид 441 442 ** Отображение номера строк и пробелов 98 #+END_SRC 99 100 * Appereance 101 102 ** Line numbers 443 103 Изначально они отключены, но можно вызвать по клавише F7. 444 104 #+BEGIN_SRC emacs-lisp :tangle init.el … … 450 110 #+END_SRC 451 111 452 * Редактирование453 ** Файловый менеджер112 * Editing 113 ** Dired 454 114 #+BEGIN_SRC emacs-lisp :tangle init.el 455 115 ;; Show files in KiB … … 461 121 #+END_SRC 462 122 463 ** Линтер464 Использую встроенный Flymake иFlycheck123 ** Linter 124 I use Flymake and Flycheck 465 125 *** Flymake 466 126 #+BEGIN_SRC emacs-lisp :tangle nil 467 ;;(add-hook 'prog-mode-hook 'flymake-mode)127 (add-hook 'prog-mode-hook 'flymake-mode) 468 128 469 129 (require 'psalm) … … 508 168 #+END_SRC 509 169 510 ** Дерево проекта 511 Возможно в дальнейшем откажусь от этого пакета, так как по факту им 512 пользуюсь нечасто. Он предоставляет дерево проектов, как в IDE. 513 #+BEGIN_SRC emacs-lisp :tangle nil 514 (when (package-loaded? "treemacs") 515 (progn 516 (setq treemacs-width 50 517 treemacs-show-cursor t 518 treemacs-position 'right 519 treemacs-indentation 1 520 treemacs-tag-follow-mode t 521 treemacs-fringe-indicator-mode nil) 522 523 (define-key global-map 524 (kbd "C-x C-d") 'treemacs))) 525 #+END_SRC 526 527 ** Дерево imenu 528 #+begin_src emacs-lisp :tangle init.el 529 ;; (when (package-loaded? "imenu-list") 530 (setq imenu-list-focus-after-activation nil 531 imenu-list-auto-resize nil 532 imenu-list-mode-line-format '() 533 imenu-list-size 0.4) 534 (global-set-key (kbd "C-x C-d") #'imenu-list-smart-toggle) 535 ;; ) 536 #+end_src 537 538 ** Better Isearch 539 #+begin_src emacs-lisp :tangle nil 540 (when (package-loaded? "isearch-mb") 541 (progn 542 (isearch-mb-mode t) 543 (global-set-key (kbd "C-s") 'isearch-forward-regexp) 544 (global-set-key (kbd "C-r") 'isearch-backward-regexp))) 545 #+end_src 546 547 ** Система контроля версий 170 ** Imenu List 171 #+begin_src emacs-lisp :tangle init.el 172 173 (setq imenu-list-focus-after-activation nil 174 imenu-list-auto-resize nil 175 imenu-list-mode-line-format '() 176 imenu-list-size 0.4) 177 (global-set-key (kbd "C-x C-d") #'imenu-list-smart-toggle) 178 #+end_src 179 180 ** Version Control System 548 181 Модуль VC + Magit. 549 182 … … 566 199 567 200 ;; Use magit only when built-in VC fails 568 (when (package-loaded? "magit") 569 (progn 570 (setq magit-refresh-status-buffer nil) 571 (global-set-key (kbd "C-x g") 'magit-status))) 572 573 (package-loaded? "git-timemachine") 574 #+END_SRC 575 576 ** Прыжки 577 #+BEGIN_SRC emacs-lisp :tangle init.el 578 (when (package-loaded? "avy") 579 (progn 580 (define-key global-map (kbd "M-s M-s") 'avy-goto-char) 581 (define-key global-map (kbd "M-s s") 'avy-goto-char) 582 (define-key global-map (kbd "M-s g") 'avy-goto-line) 583 (define-key global-map (kbd "M-s l") 'avy-goto-char-in-line) 584 (define-key global-map (kbd "M-s M-l") 'avy-goto-char-in-line) 585 586 ;; Rewrite default bind to avy 587 (define-key global-map (kbd "M-g g") 'avy-goto-line) 588 (define-key global-map (kbd "M-g M-g") 'avy-goto-line))) 589 590 (when (package-loaded? "link-hint") 591 (progn 592 (define-key global-map (kbd "M-s j") 'link-hint-open-link))) 593 594 ;; Прыжок на последнее изменение 595 (when (package-loaded? "goto-chg") 596 (progn 597 (setq glc-default-span 2) 598 (define-key global-map (kbd "C-z") 'goto-last-change) 599 (define-key global-map (kbd "M-z") 'goto-last-change-reverse))) 600 601 ;; Dumb Jump 602 (when (package-loaded? "dumb-jump") 603 (progn 604 (define-key global-map (kbd "C-.") 'dumb-jump-go))) 201 202 (use-package magit 203 :defer t 204 :bind (("C-x g" . magit-status))) 205 206 (use-package git-timemachine :defer t) 207 #+END_SRC 208 209 ** Jumps 210 #+BEGIN_SRC emacs-lisp :tangle init.el 211 ;; Jumps by highlighting symbols on screen 212 (use-package avy 213 :defer t 214 :bind (("M-s M-s" . avy-goto-char) 215 ("M-s s" . avy-goto-char) 216 ("M-s g" . avy-goto-line) 217 ("M-s l" . avy-goto-char-in-line) 218 ("M-s M-l" . avy-goto-char-in-line) 219 220 ("M-g g" . avy-goto-line) 221 ("M-s M-g" . avy-goto-line))) 222 223 (use-package link-hint 224 :defer t 225 :bind (("M-s j" . link-hint-open-link))) 226 227 ;; Jumps to last change 228 (use-package goto-chg 229 :defer t 230 :bind (("C-z" . goto-last-change) 231 ("M-z" . goto-last-change-reverse))) 232 233 ;; Jumps using grep and similar tools 234 (use-package dumb-jump 235 :defer t 236 :bind (("C-." . dumb-jump-go))) 605 237 606 238 #+END_SRC … … 611 243 ** Ограничение ширины строки 612 244 #+BEGIN_SRC emacs-lisp :tangle init.el 613 (when (package-loaded? "visual-fill-column") 614 (progn 615 ;;; Column width limit highlighter 616 (add-hook 'prog-mode-hook 'display-fill-column-indicator-mode) 617 618 ;;; Set column width to 79 according to pep8 for python 619 (add-hook 'python-mode-hook 620 (lambda () (set-fill-column 79))))) 621 #+END_SRC 622 623 ** Подсвечивание парных скобок 245 (add-hook 'prog-mode-hook 'display-fill-column-indicator-mode) 246 247 ;;; Set column width to 79 according to pep8 for python 248 (add-hook 'python-mode-hook 249 (lambda () (set-fill-column 79))) 250 #+END_SRC 251 624 252 ** Ввод парных скобок и кавычек (electric) 625 253 #+BEGIN_SRC emacs-lisp :tangle init.el … … 627 255 (electric-pair-mode) 628 256 (add-hook 'prog-mode-hook 'electric-pair-mode) 629 ;; (add-hook 'prog-mode-hook 'rainbow-identifiers-mode)257 (add-hook 'prog-mode-hook 'electric-indent-mode) 630 258 #+END_SRC 631 259 632 260 ** Kill-ring 633 #+BEGIN_SRC emacs-lisp :tangle nil 634 (when (package-loaded? "browse-kill-ring") 635 (define-key global-map (kbd "C-M-y") 'browse-kill-ring)) 261 #+BEGIN_SRC emacs-lisp :tangle init.el 262 (use-package browse-kill-ring 263 :defer t 264 :bind ("C-M-y" . browse-kill-ring)) 636 265 #+END_SRC 637 266 … … 656 285 #+END_SRC 657 286 658 ** Дополнение659 287 ** Дебаггер 660 288 #+begin_src emacs-lisp :tangle nil … … 703 331 704 332 #+end_src 705 *** Модификация дефолта706 #+BEGIN_SRC emacs-lisp :tangle nil707 (setq completion-styles '(basic partial-completion substring flex emacs22)708 completion-ignore-case t709 read-buffer-completion-ignore-case t710 read-file-name-completion-ignore-case t)711 #+END_SRC712 333 *** Агрессивный дефолтный комплит 713 334 #+BEGIN_SRC emacs-lisp :tangle nil … … 732 353 При помощи пакета undo-tree 733 354 #+begin_src emacs-lisp :tangle init.el 734 ( when (package-loaded? "undo-tree")735 (progn736 (add-hook 'prog-mode-hook #'undo-tree-mode)737 (add-hook 'org-mode-hook #'undo-tree-mode)738 (setq undo-tree-auto-save-history nil)))355 (use-package undo-tree 356 :defer t 357 :hook 358 (prog-mode . undo-tree-mode) 359 (org-mode . undo-tree-mode)) 739 360 #+end_src 740 361 … … 794 415 ** Выделение 795 416 #+BEGIN_SRC emacs-lisp :tangle init.el 796 (when (package-loaded? "expand-region") 797 (global-set-key (kbd "C-=") 'er/expand-region)) 417 (use-package expand-region 418 :defer t 419 :bind (("C-=" . er/expand-region))) 798 420 #+END_SRC 799 421 800 422 ** Сессия 801 #+BEGIN_SRC emacs-lisp :tangle nil423 #+BEGIN_SRC emacs-lisp :tangle init.el 802 424 (desktop-save-mode 1) 803 425 #+END_SRC … … 815 437 816 438 *** Подсчёт кандидатов 817 #+BEGIN_SRC emacs-lisp :tangle nil 818 (global-anzu-mode t) 439 #+BEGIN_SRC emacs-lisp :tangle init.el 440 (use-package anzu 441 :config 442 (global-anzu-mode t)) 819 443 #+END_SRC 820 444 *** Swiper (не используется) … … 827 451 swiper-stay-on-quit t) 828 452 #+END_SRC 453 ** Which function 454 #+begin_src emacs-lisp :tangle init.el 455 (which-function-mode t) 456 #+end_src 457 829 458 ** Подсказка биндов 830 459 Пакет Which-key … … 844 473 ** Права суперпользователя 845 474 Sudo-edit 846 #+begin_src emacs-lisp 847 (package-loaded? "sudo-edit") 475 #+begin_src emacs-lisp :tangle init.el 476 (use-package sudo-edit 477 :defer t) 848 478 #+end_src 849 479 … … 851 481 Показывает собранное состояние будь то собранный куски на ассемблере 852 482 или байт-код при помощи пакета RMSbolt. 853 #+begin_src emacs-lisp :tangle nil 854 (add-hook 'prog-mode-hook 'rmsbolt-mode) 483 #+begin_src emacs-lisp :tangle init.el 484 (use-package rmsbolt 485 :defer t 486 :hook (prog-mode . rmsbolt-mode)) 855 487 #+end_src 856 488 … … 872 504 (cmucl ("cmucl" "-quiet")) 873 505 (sbcl ("/opt/sbcl/bin/sbcl") :coding-system utf-8-unix))) 874 #+END_SRC875 876 ** Erlang877 #+BEGIN_SRC emacs-lisp :tangle nil878 (load "erlang-autoloads")879 506 #+END_SRC 880 507 … … 1107 734 *** Web-mode 1108 735 #+BEGIN_SRC emacs-lisp :tangle init.el 1109 (when (package-loaded? "web-mode") 1110 (progn 1111 1112 (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode)) 1113 (add-to-list 'auto-mode-alist '("\\.twig.html\\'" . web-mode)) 1114 1115 (setq web-mode-markup-indent-offset 2) 1116 (setq web-mode-enable-auto-pairing t) 1117 (setq web-mode-enable-css-colorization t) 1118 (setq web-mode-enable-block-face t) 1119 (setq web-mode-enable-current-element-highlight t))) 736 (use-package web-mode 737 :defer t 738 :config 739 (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode)) 740 (add-to-list 'auto-mode-alist '("\\.twig.html\\'" . web-mode)) 741 (setq web-mode-markup-indent-offset 2) 742 (setq web-mode-enable-auto-pairing t) 743 (setq web-mode-enable-css-colorization t) 744 (setq web-mode-enable-block-face t) 745 (setq web-mode-enable-current-element-highlight t)) 1120 746 #+END_SRC 1121 747 … … 1123 749 *** Org-mode 1124 750 #+BEGIN_SRC emacs-lisp :tangle init.el 1125 (org-babel-do-load-languages 1126 'org-babel-load-languages 1127 '((R . t) 1128 (ditaa . t) 1129 (dot . t) 1130 ;; (php . t) 1131 (emacs-lisp . t) 1132 (gnuplot . t) 1133 (haskell . nil) 1134 (latex . t) 1135 ;;(ledger . t) 1136 (ocaml . nil) 1137 (octave . t) 1138 (python . t) 1139 (ruby . t) 1140 (screen . nil) 1141 (shell . t) 1142 (sql . t) 1143 (js . t))) 1144 1145 (defun org-babel-edit-prep:sql (babel-info) 1146 (setq-local buffer-file-name (->> babel-info caddr (alist-get :tangle))) 1147 (setq-local lsp-buffer-uri (->> babel-info caddr (alist-get :tangle) lsp--path-to-uri)) 1148 (setq-local lsp-headerline-breadcrumb-enable nil) 1149 (lsp)) 1150 1151 (global-set-key (kbd "C-c l") 'org-store-link) 1152 (global-set-key (kbd "C-c a") 'org-agenda) 1153 (global-set-key (kbd "C-c c") 'org-capture) 1154 ;; (global-set-key (kbd "M-f") 'org-metaright) 1155 ;; (global-set-key (kbd "M-b") 'org-metaleft) 1156 ;; (global-set-key (kbd "M-p") 'org-metaup) 1157 ;; (global-set-key (kbd "M-n") 'org-metadown) 1158 1159 (setq org-default-notes-file "~/Documents/todo.org" 751 (use-package org 752 :defer t 753 :config 754 (org-babel-do-load-languages 755 'org-babel-load-languages 756 '((R . t) 757 (ditaa . t) 758 (dot . t) 759 ;; (php . t) 760 (emacs-lisp . t) 761 (gnuplot . t) 762 (haskell . nil) 763 (latex . t) 764 ;;(ledger . t) 765 (ocaml . nil) 766 (octave . t) 767 (python . t) 768 (ruby . t) 769 (screen . nil) 770 (shell . t) 771 (sql . t) 772 (js . t))) 773 (setq org-default-notes-file "~/Documents/todo.org" 1160 774 system-time-locale "C" 1161 775 org-use-speed-commands t … … 1171 785 org-id-track-globally t 1172 786 org-confirm-babel-evaluate nil) 1173 1174 (setq org-todo-keywords 787 (setq org-todo-keywords 1175 788 (quote ((sequence "TODO(t)" 1176 789 "MIGRATE(m)" … … 1184 797 "NEED CLARIFICATION(t)" 1185 798 )))) 1186 (setq org-todo-keyword-faces799 (setq org-todo-keyword-faces 1187 800 (quote (("TODO" :foreground "red" :weight bold) 1188 801 ("NEXT" :foreground "blue" :weight bold) … … 1193 806 ("MEETING" :foreground "forest cyan" :weight bold) 1194 807 ("PHONE" :foreground "blue" :weight bold)))) 1195 #+END_SRC 1196 1197 *** Org-ref (не используется) 1198 808 :bind 809 ("C-c l" . org-store-link) 810 ("C-c a" . org-agenda) 811 ("C-c c" . org-capture) 812 ) 813 814 (defun org-babel-edit-prep:sql (babel-info) 815 (setq-local buffer-file-name (->> babel-info caddr (alist-get :tangle))) 816 (setq-local lsp-buffer-uri (->> babel-info caddr (alist-get :tangle) lsp--path-to-uri)) 817 (setq-local lsp-headerline-breadcrumb-enable nil) 818 (lsp)) 819 820 ;; (global-set-key (kbd "M-f") 'org-metaright) 821 ;; (global-set-key (kbd "M-b") 'org-metaleft) 822 ;; (global-set-key (kbd "M-p") 'org-metaup) 823 ;; (global-set-key (kbd "M-n") 'org-metadown) 824 #+END_SRC 825 826 827 *** Org-ref 1199 828 #+begin_src emacs-lisp :tangle nil 1200 829 (load "org-ref-autoloads") … … 1210 839 *** Org-roam 1211 840 #+begin_src emacs-lisp :tangle init.el 1212 (when (package-loaded? "org-roam") 1213 (progn 1214 (setq org-roam-directory (file-truename "~/Zettelkasten") 1215 org-roam-v2-ack t 1216 org-roam-completion-everywhere t 1217 org-roam-index-file (concat org-roam-directory "/20210409054712-жизнь.org") 1218 org-roam-dailies-directory (concat org-roam-directory "journals/")) 1219 1220 (org-roam-db-autosync-mode t) 1221 1222 (defun org-roam-jump-to-index () 1223 "Stub of recreating the function from V1" 1224 (interactive) 1225 (let 1226 ((org-roam-index org-roam-index-file)) 1227 (find-file org-roam-index))) 1228 1229 (define-key global-map 1230 (kbd "C-c n l") 'org-roam-node-insert) 1231 (define-key global-map 1232 (kbd "C-c n f") 'org-roam-node-find) 1233 (define-key global-map 1234 (kbd "C-c n b") 'org-roam-buffer-toggle) 1235 (define-key global-map 1236 (kbd "C-c n t t") 'org-roam-tag-add) 1237 (define-key global-map 1238 (kbd "C-c n t r") 'org-roam-tag-remove) 1239 (define-key global-map 1240 (kbd "C-c n i") 'org-roam-jump-to-index) 1241 (define-key global-map 1242 (kbd "C-c n g") 'org-roam-graph) 1243 (define-key global-map 1244 (kbd "C-c n d") 'org-roam-db-build-cache) 1245 (define-key global-map 1246 (kbd "C-c n r") 'org-roam-node-random) 1247 (define-key global-map 1248 (kbd "C-c n j") 'org-roam-dailies-find-date))) 1249 1250 (customize-set-variable 'org-link-descriptive t) 1251 #+end_src 1252 1253 *** Агенда и Capture 1254 #+begin_src emacs-lisp :tangle init.el 1255 (add-to-list 'org-agenda-files 1256 "~/Documents/todo.org") 1257 1258 (setq org-directory "~/Documents" 1259 org-default-notes-file (concat org-directory "/todo.org")) 841 (use-package org-roam 842 :defer t 843 :bind 844 ("C-c n l" . org-roam-node-insert) 845 ("C-c n b" . org-roam-buffer-toggle) 846 ("C-c n f" . org-roam-node-find) 847 ("C-c n t t" . org-roam-tag-add) 848 ("C-c n t r" . org-roam-tag-remove) 849 ("C-c n i" . org-roam-jump-to-index) 850 ("C-c n g" . org-roam-graph) 851 ("C-c n d" . org-roam-db-build-cache) 852 ("C-c n r" . org-roam-node-random) 853 ("C-c n j" . org-roam-dailies-find-date) 854 :config 855 (setq org-roam-directory (file-truename "~/Zettelkasten") 856 org-roam-v2-ack t 857 org-roam-completion-everywhere t 858 org-roam-index-file (concat org-roam-directory "/20210409054712-жизнь.org") 859 org-roam-dailies-directory (concat org-roam-directory "journals/")) 860 861 (org-roam-db-autosync-mode t)) 862 863 (defun org-roam-jump-to-index () 864 "Stub of recreating the function from V1" 865 (interactive) 866 (let 867 ((org-roam-index org-roam-index-file)) 868 (find-file org-roam-index))) 869 870 (use-package org 871 :defer t 872 :config 873 (customize-set-variable 'org-link-descriptive t) 874 875 (add-to-list 'org-agenda-files 876 "~/Documents/todo.org") 877 878 (setq org-directory "~/Documents" 879 org-default-notes-file (concat org-directory "/todo.org"))) 1260 880 #+end_src 1261 881 1262 882 ** YAML 1263 #+begin_src emacs-lisp 1264 (package-loaded? "yaml-mode") 883 #+begin_src emacs-lisp :tangle init.el 884 (use-package yaml-mode 885 :defer t) 1265 886 #+end_src 1266 887 … … 1273 894 ** Telega 1274 895 #+BEGIN_SRC emacs-lisp :tangle init.el 1275 (when (package-loaded? "telega") 1276 (setq telega-filter-custom-show-folders t 1277 telega-chat-fill-column 40 1278 telega-root-fill-column 60 1279 telega-url-shorten-use-images t) 1280 1281 (define-key global-map (kbd "C-c t") telega-prefix-map)) 896 (use-package telega 897 :bind (("C-c t" . telega-prefix-map))) 1282 898 #+END_SRC 1283 899 1284 900 ** Mastodon 1285 #+begin_src emacs-lisp :tangle nil 1286 (when (package-loaded? "mastodon") 901 #+begin_src emacs-lisp :tangle init.el 902 (use-package mastodon 903 :defer t 904 :config 1287 905 (setq mastodon-active-user "w96k" 1288 906 mastodon-instance-url "https://fosstodon.org/")) 1289 907 #+end_src 1290 908 1291 ** LLM1292 #+begin_src emacs-lisp1293 1294 #+end_src1295 1296 1297 * Наука1298 909 * Разное 1299 910 ** *Highlight 911 #+BEGIN_SRC emacs-lisp :tangle init.el 912 (use-package highlight 913 :defer t) 914 #+end_src 1300 915 ** Минорные твики дефолтного имакса 1301 916 *** Короткие ответы на вопросы … … 1310 925 *** Подсвечивать текущую строку 1311 926 #+begin_src emacs-lisp :tangle nil 1312 (global-hl-line-mode 1) 1313 #+end_src 1314 1315 *** Открывать список буферов в отдельном фрейме 1316 #+begin_src emacs-lisp :tangle nil 1317 (add-to-list 'special-display-buffer-names "*Buffer List*") 1318 (setq Buffer-menu-files-only t) 927 (global-hl-line-mode t) 1319 928 #+end_src 1320 929 1321 930 *** Автодополнение в echo при M-x и других командах 1322 931 #+begin_src emacs-lisp :tangle init.el 1323 (icomplete-mode 1)932 (icomplete-mode t) 1324 933 #+end_src 1325 934 *** Проверять орфографию 1326 935 #+begin_src emacs-lisp :tangle init.el 1327 (flyspell-mode 1)936 (flyspell-mode t) 1328 937 #+end_src 1329 938 … … 1359 968 1360 969 (setq default-directory "~/" 1361 delete-seleciton-mode t1362 inhibit-startup-message t1363 initial-scratch-message nil1364 970 custom-safe-themes t 1365 971 delete-old-versions t 1366 confirm-kill-processes nil1367 972 enable-local-variables t) 1368 973 #+end_src … … 1443 1048 *** Kills 1444 1049 #+begin_src emacs-lisp :tangle init.el 1445 (define-key global-map (kbd "C-k") 'kill-region) 1446 1447 (when (package-loaded? "whole-line-or-region") 1050 (use-package whole-line-or-region 1051 :bind (("C-k" . kill-region) 1052 ("C-w" . backward-kill-word)) 1053 :config 1448 1054 (whole-line-or-region-global-mode)) 1449 1450 (define-key global-map (kbd "C-w") 'backward-kill-word)1451 1055 #+end_src 1452 1056 … … 1470 1074 ** Docker 1471 1075 #+begin_src emacs-lisp :tangle init.el 1472 ( package-loaded? "docker")1473 ( package-loaded? "docker-compose-mode")1076 (use-package docker :defer t) 1077 (use-package docker-compose-mode :defer t) 1474 1078 #+end_src 1475 1079 ** Debian … … 1483 1087 ** Guix 1484 1088 #+begin_src emacs-lisp :tangle init.el 1485 (package-loaded? "geiser-guile")1486 1487 ( package-loaded? "guix")1488 1489 (setq geiser-guile-binary "guile")1490 1491 (with-eval-after-load 'geiser-guile1492 (progn1493 (add-to-list 'geiser-guile-load-path "~/projects/guix/")))1494 1495 (let ((guix-copyright "~/projects/guix/etc/copyright.el"))1496 (if (file-exists-p guix-copyright)1497 (load-file "~/projects/guix/etc/copyright.el")))1498 1499 (setq copyright-names-regexp1500 (format "%s <%s>" user-full-name user-mail-address))1089 ;; (use-package geiser-guile :defer t) 1090 1091 (use-package guix 1092 :defer t 1093 :config 1094 (setq geiser-guile-binary "guile") 1095 (with-eval-after-load 'geiser-guile 1096 (progn 1097 (add-to-list 'geiser-guile-load-path "~/projects/guix/"))) 1098 1099 (let ((guix-copyright "~/projects/guix/etc/copyright.el")) 1100 (if (file-exists-p guix-copyright) 1101 (load-file "~/projects/guix/etc/copyright.el"))) 1102 1103 (setq copyright-names-regexp 1104 (format "%s <%s>" user-full-name user-mail-address))) 1501 1105 #+end_src 1502 1106 1503 1107 ** Nix 1504 #+begin_src emacs-lisp :tangle nil1505 ( package-loaded? "nix")1108 #+begin_src emacs-lisp :tangle init.el 1109 (use-package nix) 1506 1110 #+end_src 1507 1111 … … 1598 1202 ** Ignore case sensitive in completions, search and etc 1599 1203 #+begin_src emacs-lisp :tangle init.el 1600 (setq completion-ignore-case t) 1601 #+end_src 1204 (setq completion-ignore-case t 1205 read-buffer-completion-ignore-case t 1206 read-file-name-completion-ignore-case t) 1207 #+end_src 1208 1209 ** Make scripts executable automatically 1210 #+begin_src emacs-lisp :tangle init.el 1211 (add-hook 'after-save-hook 1212 'executable-make-buffer-file-executable-if-script-p) 1213 #+end_src 1214 1215 ** F1 for M-x shell and F2 for grep 1216 #+begin_src emacs-lisp :tangle init.el 1217 (global-set-key (kbd "<f1>") 'shell) 1218 (global-set-key (kbd "<f2>") 'rgrep) 1219 #+end_src 1220 1221 ** Hippie expand 1222 #+begin_src emacs-lisp :tangle init.el 1223 (global-set-key [remap dabbrev-expand] 'hippie-expand) 1224 #+end_src 1225
Note:
See TracChangeset
for help on using the changeset viewer.