вторник, 12 апреля 2016 г.

Emacs: Переименование и удаление текущего буфера вместе с файлом

Время от времени, чаще всего, когда я рефакторю код, мне нужно быстро переименовать файл и буфер, связанный с ним. Есть конечно "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)))))
Ну а горячие клавиши, если нужно, каждый назначит по вкусу.

Комментариев нет:

Отправить комментарий