-
Notifications
You must be signed in to change notification settings - Fork 1
/
про-код-на-lisp.el
163 lines (127 loc) · 4.35 KB
/
про-код-на-lisp.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
;;; про-код-на-lisp.el --- LISP -*- lexical-binding: t -*-
;;; Commentary:
;;; Code:
(require 'use-package)
(require 'установить-из)
;;;; Выполнить регион или буфер
(defun выполнить-регион-или-буфер ()
"выполнить регион или буфер."
(interactive)
(if (use-region-p)
(progn
(eval-region (region-beginning) (region-end))
(deactivate-mark))
(перевыполнить-буфер)))
;;;; Emacs Lisp
(use-package emacs
:defer t
:bind (:map emacs-lisp-mode-map
("C-c C-c" . выполнить-регион-или-буфер)
("C-x M-e" . eval-print-last-sexp)))
;;;;; Отладка объектов
(setq eval-expression-print-level 15)
(setq eval-expression-print-length 30)
;;;;; Оптимизация хвостовой рекурсии
(use-package tco
:defer t :ensure t)
;;;;; Асинхронные функции
(use-package async-await
:defer t :ensure t)
;;;;; Функция для выполнения форм в буфере, включая определения переменных
(defun перевыполнить-буфер ()
"Вызвать выполнение кода в текущем буфере.
Верхне-уровневые формы выполняются `eval-defun', таким
образом `defvar' и `defcustom' устанавливаются заново."
(interactive)
(save-excursion (goto-char (point-min))
(while (not (eobp))
(forward-sexp)
(eval-defun nil))))
;;;;; Конфигурация проверки синтаксиа для Elisp
;; (use-package elsa
;; :ensure t
;; )
(use-package flymake-elisp-config
:defer t
:init (установить-из :repo "ROCKTAKEY/flymake-elisp-config")
:functions (flymake-elisp-config-global-mode flymake-elisp-config-auto-mode)
:config
(flymake-elisp-config-global-mode)
(flymake-elisp-config-auto-mode))
;;;; Автоматическое тестирование и отладка конфига Emacs
(use-package bug-hunter
:disabled t
:ensure t
:defer t)
;;;; Инспектор объектов ELISP
(use-package inspector
:defer t :ensure t)
;;;; Форматирование ELISP
(use-package elisp-format
:defer t
:ensure t
;; :hook
;; ((emacs-lisp-mode
;; (lambda
;; ()
;; (add-hook 'before-save-hook #'elisp-format-buffer))))
)
;; (use-package elisp-autofmt
;; :load-path "emacs-lisp/emacs-lisp-autofmt/"
;; :commands (elisp-autofmt-mode)
;; :hook (emacs-lisp-mode . elisp-autofmt-mode))
;;;; REPL к разным LISP-ам Geiser
(use-package geiser
:defer t
:ensure t
:defines (geiser-mode-start-repl-p)
:custom
(geiser-default-implementation 'guile)
(geiser-active-implementations '(guile))
(geiser-implementations-alist '(((regexp "\\.scm$") guile)))
:config
(setq geiser-mode-start-repl-p nil))
;; Поддержка Geiser специально для Guile Scheme
(use-package geiser-guile
:defer t
:ensure t
:defines (geiser-guile-manual-lookup-nodes)
:requires geiser
:config
;;(add-to-list 'geiser-guile-load-path "~/Workspace/guix")
(setq geiser-guile-manual-lookup-nodes
'("guile"
"guix")))
;;;; Разворачивание макросов
(use-package macrostep
:defer t
:ensure t
:custom-face
(macrostep-expansion-highlight-face
((t (
:inherit default
:extend t
:background ,(face-attribute 'default :background)))))
:bind (:map emacs-lisp-mode-map
("C-c e" . macrostep-expand)
:map lisp-interaction-mode-map
("C-c e" . macrostep-expand)))
(require 'тихо-применить)
(use-package eros
:defer t :ensure t
:defines (eros-eval-last-sexp)
:functions (eros-mode)
:config
(eros-mode t)
;;(global-set-key [remap eval-last-sexp] (lambda () (interactive) (eros-eval-last-sexp)))
;;(global-set-key [remap eval-defun] #'eros-eval-defun)
)
(use-package elisp-docstring-mode
:defer t :ensure t)
(use-package format-all
:defer t :ensure t :hook (elisp-mode . format-all-mode))
(use-package
inspector
:init (установить-из :repo "mmontone/emacs-inspector"))
(provide 'про-код-на-lisp)
;;; про-код-на-lisp.el ends here