|
181 | 181 | ;; (@* "Core" ) |
182 | 182 | ;; |
183 | 183 |
|
184 | | -(defun indent-control--indent-level-by-mode () |
185 | | - "Return indentation level variable as symbol depends on current major mode." |
| 184 | +(defun indent-control--indent-level-name () |
| 185 | + "Return symbol defined as indent level." |
186 | 186 | (or (cdr (assoc major-mode indent-control-alist)) |
187 | 187 | (quote tab-width))) |
188 | 188 |
|
189 | | -(defun indent-control-set-indent-level-by-mode (tw) |
190 | | - "Set the tab width (TW) for current major mode." |
191 | | - (let ((var-symbol (indent-control--indent-level-by-mode))) |
192 | | - (cond ((listp var-symbol) (dolist (indent-var var-symbol) (set indent-var tw))) |
193 | | - (t (set var-symbol tw)))) |
194 | | - (when (integerp tw) |
195 | | - (indent-control--set-indent-level-record-by-mode tw) |
| 189 | +(defun indent-control--indent-level-record (&optional mode-name) |
| 190 | + "Return record of current indent level by MODE-NAME." |
| 191 | + (unless mode-name (setq mode-name major-mode)) |
| 192 | + (cdr (assoc mode-name indent-control-records))) |
| 193 | + |
| 194 | +(defun indent-control--set-indent-level-record (new-level &optional mode-name) |
| 195 | + "Set NEW-LEVEl to MODE-NAME indent record." |
| 196 | + (unless mode-name (setq mode-name major-mode)) |
| 197 | + (setf (cdr (assoc mode-name indent-control-records)) new-level)) |
| 198 | + |
| 199 | +(defun indent-control-set-indent-level-by-mode (new-level) |
| 200 | + "Set the NEW-LEVEL for current major mode." |
| 201 | + (let ((var-symbol (indent-control--indent-level-name))) |
| 202 | + (cond ((listp var-symbol) (dolist (indent-var var-symbol) (set indent-var new-level))) |
| 203 | + (t (set var-symbol new-level)))) |
| 204 | + (when (integerp new-level) |
| 205 | + (indent-control--set-indent-level-record new-level) |
196 | 206 | (indent-control--no-log-apply |
197 | | - (message "[INFO] Current indent level: %s" tw)))) |
| 207 | + (message "[INFO] Current indent level: %s" new-level)))) |
198 | 208 |
|
199 | 209 | (defun indent-control-get-indent-level-by-mode () |
200 | 210 | "Get indentation level by mode." |
201 | | - (let ((var-symbol (indent-control--indent-level-by-mode))) |
| 211 | + (let ((var-symbol (indent-control--indent-level-name))) |
202 | 212 | (when (listp var-symbol) (setq var-symbol (nth 0 var-symbol))) |
203 | 213 | (symbol-value var-symbol))) |
204 | 214 |
|
|
213 | 223 | (indent-control-set-indent-level-by-mode |
214 | 224 | (indent-control--delta-ensure-valid-tab-width indent-level dv)))) |
215 | 225 |
|
216 | | -(defun indent-control--set-indent-level-record-by-mode (tw &optional mn) |
217 | | - "Set the tab width record by mode name MN with tab width TW." |
218 | | - (unless mn (setq mn major-mode)) |
219 | | - (let ((index 0) (len (length indent-control-records)) break-it) |
220 | | - (while (and (not break-it) (< index len)) |
221 | | - (let* ((record (nth index indent-control-records)) |
222 | | - (record-mode-name (car record))) |
223 | | - (when (equal mn record-mode-name) |
224 | | - (setf (cdr (nth index indent-control-records)) tw) |
225 | | - (setq break-it t))) |
226 | | - (setq index (1+ index))) |
227 | | - (unless break-it |
228 | | - (indent-control--no-log-apply |
229 | | - (message "[WARNING] Indentation level record not found: %s" mn))))) |
230 | | - |
231 | | -(defun indent-control--get-indent-level-record-by-mode (&optional mn) |
232 | | - "Get the tab width record by mode name MN." |
233 | | - (unless mn (setq mn major-mode)) |
234 | | - (let ((index 0) (len (length indent-control-records)) break-it |
235 | | - ;; Have default to `tab-width'. |
236 | | - (target-tab-width tab-width)) |
237 | | - (while (and (not break-it) (< index len)) |
238 | | - (let* ((record (nth index indent-control-records)) |
239 | | - (record-mode-name (car record)) (record-tab-width (cdr record))) |
240 | | - (when (equal mn record-mode-name) |
241 | | - (setq target-tab-width record-tab-width |
242 | | - break-it t))) |
243 | | - (setq index (1+ index))) |
244 | | - target-tab-width)) |
245 | | - |
246 | 226 | (defun indent-control--prog-mode-hook () |
247 | 227 | "Programming language mode hook." |
248 | 228 | (indent-control--mute-apply |
|
266 | 246 | ;;;###autoload |
267 | 247 | (defun indent-control-continue-with-tab-width-record () |
268 | 248 | "Keep the tab width the same as last time modified." |
269 | | - (indent-control-set-indent-level-by-mode (indent-control--get-indent-level-record-by-mode))) |
| 249 | + (indent-control-set-indent-level-by-mode (indent-control--indent-level-record))) |
270 | 250 |
|
271 | 251 | ;; NOTE: Initial the indent level once after module is loaded. |
272 | 252 | ;;;###autoload |
|
0 commit comments