summary refs log tree commit diff stats
path: root/lisp
diff options
context:
space:
mode:
authorCase Duckworth2022-01-04 21:09:53 -0600
committerCase Duckworth2022-01-04 21:09:53 -0600
commit7a1ff0c1bcc76a5eaed2c3bc4ad613bb74f9ee74 (patch)
tree6a1a4e7c62f9cf66a48b4dbf326057fac4ce494a /lisp
parentSkip word forward (diff)
downloademacs-7a1ff0c1bcc76a5eaed2c3bc4ad613bb74f9ee74.tar.gz
emacs-7a1ff0c1bcc76a5eaed2c3bc4ad613bb74f9ee74.zip
Add a function and variable system-system
Diffstat (limited to 'lisp')
-rw-r--r--lisp/system.el32
1 files changed, 20 insertions, 12 deletions
diff --git a/lisp/system.el b/lisp/system.el index f2e85a1..7fe39f1 100644 --- a/lisp/system.el +++ b/lisp/system.el
@@ -58,9 +58,13 @@ A floating-point number is recommended, since that makes it
58relative to the `default' face height." 58relative to the `default' face height."
59 :type 'number) 59 :type 'number)
60 60
61(defvar system-system nil
62 "The current system's symbol.
63Do not edit this by hand. Instead, call `system-get-system'.")
64
61(defvar system-file nil 65(defvar system-file nil
62 "The current system's file for system-specific configuration. 66 "The current system's file for system-specific configuration.
63Do not edit this by hand. Instead, call `system-system-file'.") 67Do not edit this by hand. Instead, call `system-get-system-file'.")
64 68
65;;; Functions 69;;; Functions
66 70
@@ -78,10 +82,17 @@ Do not edit this by hand. Instead, call `system-system-file'.")
78This function is like `warn', except it uses the `system' type." 82This function is like `warn', except it uses the `system' type."
79 (display-warning 'system (apply #'format-message message args))) 83 (display-warning 'system (apply #'format-message message args)))
80 84
81(defun system-system-file (&optional system refresh-cache set-system-file-p) 85(defun system-get-system ()
86 "Determine the current system."
87 (cl-loop for (p . s) in system-load-alist
88 if (with-demoted-errors (format "Problem running function `%s'" p)
89 (funcall p))
90 return (setq system-system s)))
91
92(defun system-get-system-file (&optional system refresh-cache set-system-file-p)
82 "Determine the current system's system-specific file. 93 "Determine the current system's system-specific file.
83The current system's file will be returned, and the value of 94The current system's file will be returned. The value of
84`system-file' set /unless/ the parameter SYSTEM was passed to 95`system-file' is set, /unless/ the parameter SYSTEM was passed to
85this function and SET-SYSTEM-FILE-P is nil. If both SYSTEM and 96this function and SET-SYSTEM-FILE-P is nil. If both SYSTEM and
86SET-SYSTEM-FILE-P are non-nil, this function will still set 97SET-SYSTEM-FILE-P are non-nil, this function will still set
87`system-file'. 98`system-file'.
@@ -97,8 +108,7 @@ This function will only look for system-specific files in
97`system-load-directory'." 108`system-load-directory'."
98 (let* ((system* (or system 109 (let* ((system* (or system
99 (and system-file (not refresh-cache)) 110 (and system-file (not refresh-cache))
100 (cl-loop for (p . s) in system-load-alist 111 (system-get-system)))
101 if (funcall p) return s)))
102 (file (expand-file-name (format "%s" system*) system-load-directory))) 112 (file (expand-file-name (format "%s" system*) system-load-directory)))
103 (when (or (not system) 113 (when (or (not system)
104 (and system set-system-file-p)) 114 (and system set-system-file-p))
@@ -109,7 +119,7 @@ This function will only look for system-specific files in
109(defun system-settings-load (&optional system error nomessage) 119(defun system-settings-load (&optional system error nomessage)
110 "Load system settings. 120 "Load system settings.
111Load settings from `system-file', or the `system-file' as 121Load settings from `system-file', or the `system-file' as
112determined by SYSTEM, if passed. See `system-system-file' for 122determined by SYSTEM, if passed. See `system-get-system-file' for
113details on how the `system-file' is determined. 123details on how the `system-file' is determined.
114 124
115ERROR determines how to deal with errors: if nil, warn the user 125ERROR determines how to deal with errors: if nil, warn the user
@@ -118,7 +128,7 @@ can't be determined. If t, those are elevated to errors. If any
118other value, the errors are completely ignored. 128other value, the errors are completely ignored.
119 129
120NOMESSAGE is passed directly to `load'." 130NOMESSAGE is passed directly to `load'."
121 (let ((file (system-system-file system))) 131 (let ((file (system-get-system-file system)))
122 (if file 132 (if file
123 (condition-case e 133 (condition-case e
124 (load file nil nomessage) 134 (load file nil nomessage)
@@ -137,10 +147,8 @@ NOMESSAGE is passed directly to `load'."
137 (mapcar (lambda (a) (format "%s" (cdr a))) 147 (mapcar (lambda (a) (format "%s" (cdr a)))
138 system-load-alist) 148 system-load-alist)
139 nil t nil nil 149 nil t nil nil
140 (cl-loop for (p . s) in system-load-alist 150 (format "%s" (system-get-system)))))
141 if (funcall p) 151 (find-file (cl-loop with file = (system-get-system-file system)
142 return (format "%s" s)))))
143 (find-file (cl-loop with file = (system-system-file system)
144 for cand in (list file 152 for cand in (list file
145 (concat file ".el")) 153 (concat file ".el"))
146 if (file-exists-p cand) 154 if (file-exists-p cand)