-
Notifications
You must be signed in to change notification settings - Fork 0
/
laurisp.el
89 lines (68 loc) · 2.09 KB
/
laurisp.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
;;
;; @author Laura Viglioni
;; 2020
;; GNU Public License 3.0
;;
;;
;; Constants
;;
(setq personal-lib-dir "~/laurisp/personal-libs/")
(setq external-libs-dir "~/laurisp/external")
(setq laurisp-config-dir "~/laurisp/config")
(setq private-files-dir "~/private-files/emacs-files")
(setq lazy-files-dir "~/laurisp/lazy-files")
;;
;; add lib dirs to load path
;;
(let ((default-directory personal-lib-dir))
(normal-top-level-add-subdirs-to-load-path))
(let ((default-directory external-libs-dir))
(normal-top-level-add-subdirs-to-load-path))
(add-to-list 'load-path private-files-dir)
(add-to-list 'load-path lazy-files-dir)
;;
;; requires
;;
(require 'functional)
(require 'laurisp-core)
;;
;; import files functions
;;
;;;###autoload
(defun import-laurisp-files (dir)
"import all laurisp files from a dir"
(let* ((path (concat "~/laurisp/" dir))
(all-files (directory-files path t "^l-[a-z\\-].*\\.el$"))
(loaded-files (mapcar (lambda (laurisp-file)
(load laurisp-file nil nil))
all-files)))
(if (seq-reduce (lambda (acc val) (and acc val)) loaded-files t)
"laurisp files loaded!"
"an error has ocurred")))
;;;###autoload
(defmacro load-lib (lib-name)
"requires a lib in external or personal lib dir. Usage example:
(load-lib 'emacs-grammarly)"
`(require ,lib-name))
;;;###autoloading
(defmacro bind-lazy-function (func-name lib-func-name package-name)
"Creates an interactive of a lib that is not imported by default
that loads it when is called
Usage example:
(bind-lazy-function 'spotify-func 'spotify-status 'spotilau)
(global-set-key (kbd \"M-p M-p\") 'spotify-func)"
`(defun ,(eval func-name) ()
(interactive)
(load-lib ,package-name)
(call-interactively ,lib-func-name)))
;;;###autoload
(defmacro call-lazy-function (func-name package-name)
"Calls a function from a lib that is not imported by default"
`(progn
(load-lib ,package-name)
(call-interactively ,func-name)))
;;
;; Importing files
;;
(import-laurisp-files "config")
(provide 'laurisp)