Function: octave-sync-function-file-names

octave-sync-function-file-names is an interactive and byte-compiled function defined in octave.el.gz.

Signature

(octave-sync-function-file-names)

Documentation

Ensure function name agree with function file name.

See Info node (octave)Function Files.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/progmodes/octave.el.gz
(defun octave-sync-function-file-names ()
  "Ensure function name agree with function file name.
See Info node `(octave)Function Files'."
  (interactive)
  (when buffer-file-name
    (pcase-let ((`(,start ,_end ,name-start ,name-end)
                 (octave-function-file-p)))
      (when (and start name-start)
        (let* ((func (buffer-substring name-start name-end))
               (file (file-name-sans-extension
                      (file-name-nondirectory buffer-file-name)))
               (help-form (format-message "\
a: Use function name `%s'
b: Use file name `%s'
q: Don't fix\n" func file))
               (c (unless (equal file func)
                    (save-window-excursion
                      (help-form-show)
                      (read-char-choice
                       "Which name to use? (a/b/q) " '(?a ?b ?q))))))
          (pcase c
            (?a (let ((newname (expand-file-name
                                (concat func (file-name-extension
                                              buffer-file-name t)))))
                  (when (or (not (file-exists-p newname))
                            (yes-or-no-p
                             (format "Target file %s exists; proceed? " newname)))
                    (when (file-exists-p buffer-file-name)
                      (rename-file buffer-file-name newname t))
                    (set-visited-file-name newname))))
            (?b (save-excursion
                  (goto-char name-start)
                  (delete-region name-start name-end)
                  (insert file)))))))))