There is this function in tide:

;; Defined in ~/.emacs.d/.local/straight/repos/tide/tide.el
(defun tide-rename-file ()
  "Rename current file and all it's references in other files."
  (let* ((name (buffer-name))
         (old (tide-buffer-file-name))
         (basename (file-name-nondirectory old)))
    (unless (and old (file-exists-p old))
      (error "Buffer '%s' is not visiting a file." name))
    (let ((new (read-file-name "New name: " (file-name-directory old) basename nil basename)))
      (when (get-file-buffer new)
        (error "A buffer named '%s' already exists." new))
      (when (file-exists-p new)
        (error "A file named '%s' already exists." new))
      (let* ((old (expand-file-name old))
             (new (expand-file-name new))
             (response (tide-command:getEditsForFileRename old new)))
        (tide-on-response-success response (:min-version "2.9")
          (tide-do-rename-file old new (plist-get response :body))
          (message "Renamed '%s' to '%s'." name (file-name-nondirectory new)))))))

It works well, but it works when called inside a buffer and with manual input of parameters.

I want to turn it into a function that I can call from elisp with the parameters sent through code instead of using the minibuffer through read-file-name. Ideally something like

(defun tide-rename-file-MODIFIED (new old) .... )

I would like this to be a function with a new name e.g. tide-rename-file-MODIFIED, so that I can still call tide-rename-file as usual, from inside a buffer, with manual user input.

Perhaps I am better off writing my own function instead of trying to modify the existing function? I don't know.

Related Qs

  • 2
    "I would like this to be a function with a new name..." -- so yes, write a new function. All the code you want is there in this one.
    – phils
    Dec 22, 2020 at 20:33


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.