Function: dtrt-indent-try-set-offset

dtrt-indent-try-set-offset is an interactive and natively compiled function defined in dtrt-indent.el.

Signature

(dtrt-indent-try-set-offset)

Documentation

Try adjusting the current buffer's indentation offset.

Key Bindings

This command is not in any keymaps.

Source Code

;; Defined in /nix/store/xl774j723v677bsfsybzln3vi6w0fpm3-emacs-packages-deps/share/emacs/site-lisp/elpa/dtrt-indent-20260709.2011/dtrt-indent.el
(defun dtrt-indent-try-set-offset ()
  "Try adjusting the current buffer's indentation offset."
  (interactive)
  (let ((language-and-variable (cdr (dtrt-indent--search-hook-mapping major-mode))))
    (when language-and-variable
      (let* ((result
              (dtrt-indent--analyze
               (dtrt-indent--calc-histogram
                (car language-and-variable))))
             (best-guess
              (cdr (assoc :best-guess result)))
             (rejected
              (cdr (assoc :rejected result)))
             (confidence
              (cdr (assoc :confidence result)))
             (change-indent-tabs-mode
              (cdr (assoc :change-indent-tabs-mode result)))
             (indent-tabs-mode-setting
              (cdr (assoc :indent-tabs-mode-setting result)))
             (best-indent-offset
              (nth 0 best-guess))
             (indent-offset-mode-variables
              (let ((v (nth 1 language-and-variable)))
                (if (listp v) v (list v))))
             (indent-offset-variables
              (append
               indent-offset-mode-variables
               (remove nil
                       (mapcar
                        (lambda (x)
                          (let ((mode (car x))
                                (variable (cadr x)))
                            (when (and (boundp mode)
                                       (symbol-value mode))
                              variable)))
                        dtrt-indent-hook-generic-mapping-list))))
             (indent-offset-names
              (mapconcat (lambda (x) (format "%s" x))
                         indent-offset-variables ", ")))

        ;; update indent-offset-variable?
        (cond
         ((and best-guess
               (not rejected))

          (if dtrt-indent-explicit-offset
              (message "\
Indentation offset set with file variable; not adjusted")
            (when (or (not dtrt-indent-require-confirmation-flag)
                      (yes-or-no-p
                       (format "Do you want to adjust %s to %s for buffer %s? "
                               indent-offset-names
                               best-indent-offset
                               (buffer-name))))
              (setq dtrt-indent-original-indent
                    (mapcar
                     (lambda (x)
                       (list x (symbol-value x) (local-variable-p x)))
                     indent-offset-variables))
              (when (>= dtrt-indent-verbosity 1)
                (let ((offset-info
                       (format "%s adjusted to %s%s"
                               indent-offset-names
                               best-indent-offset
                               (if (>= dtrt-indent-verbosity 2)
                                   (format " (%.0f%%%% confidence)"
                                           (* 100 confidence))
                                 ""))))
                  (message (concat "Note: " offset-info))))
              (dolist (x indent-offset-variables)
                (set (make-local-variable x)
                     best-indent-offset))
              best-indent-offset)))
         (t
          (when (>= dtrt-indent-verbosity 2)
            (message "Note: %s not adjusted%s" indent-offset-variables
                     (if (and rejected (>= dtrt-indent-verbosity 3))
                         (format ": %s" rejected) "")))
          nil))

        ;; update indent-tabs-mode?
        (cond
         ((and change-indent-tabs-mode
               (not (eq indent-tabs-mode indent-tabs-mode-setting)))
          (when (>= dtrt-indent-verbosity 1)
            (let ((tabs-mode-info
                   (when (and change-indent-tabs-mode
                              (not (eql indent-tabs-mode-setting
                                        indent-tabs-mode)))
                     (format "indent-tabs-mode adjusted to %s"
                             indent-tabs-mode-setting))))
              (message (concat "Note: " tabs-mode-info))))
          ;; backup indent-tabs-mode setting
          (setq dtrt-indent-original-indent
                (cons
                 (let ((x 'indent-tabs-mode))
                   (list x (symbol-value x) (local-variable-p x)))
                 dtrt-indent-original-indent))
          ;; actually adapt indent-tabs-mode
          (set (make-local-variable 'indent-tabs-mode)
               indent-tabs-mode-setting))
         (t
          (when (>= dtrt-indent-verbosity 2)
            (message "Note: indent-tabs-mode not adjusted"))
          nil))))))