Время от времени, чаще всего, когда я рефакторю код, мне нужно быстро переименовать файл и буфер, связанный с ним. Есть конечно "M-x rename-file", но она к сожалению не переименовывает буфер и не очень удобна в обращении. Но простая обёртка поможет решить проблему:
Аналогичная история и для операции удаления файла и буфера, пишем обёртку:
Ну а горячие клавиши, если нужно, каждый назначит по вкусу.
(defun cfg:rename-file-and-buffer () "Rename the current buffer and file it is visiting." (interactive) (let* ((fullname (buffer-file-name)) (filename (file-name-nondirectory fullname)) (dirname (file-name-directory fullname))) (if (not (and fullname (file-exists-p fullname))) (message "Buffer is not visiting a file!") (if (buffer-modified-p) (message "File not saved!") (let ((new-name (read-file-name "New name: " dirname nil nil filename))) (if (y-or-n-p (format "Do you really want to rename file \"%s\"?" filename)) (progn (rename-file fullname new-name t) (set-visited-file-name new-name t t) (message nil)) (message nil)))))))
(defun cfg:delete-file-and-buffer () "Kill the current buffer and deletes the file it is visiting." (interactive) (let ((fullname (buffer-file-name))) (if (not (and fullname (file-exists-p fullname))) (message "Buffer is not visiting a file!") (progn (delete-file fullname) (message "Deleted file %s" fullname) (kill-buffer)))))
Комментариев нет:
Отправить комментарий