From ebd73bcc38d68d05fea6c8b521a0aa3f35980898 Mon Sep 17 00:00:00 2001 From: Ade Attwood Date: Sun, 21 Nov 2021 10:38:43 +0000 Subject: [PATCH] feat(emacs): add file operation functions This adds file operation command to emacs so you can quickly rename and copy files. The problem with the normal copy file if that it misses removing the old buffer if its a rename and dose not move to the new buffer. This leads to (more than I like to admit) editing the new file thinking its the old file. By updating the buffers and automatically switching this prevents this. --- site-modules/core/files/emacs/init.el | 1 + .../core/files/emacs/src/file-operations.el | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 site-modules/core/files/emacs/src/file-operations.el diff --git a/site-modules/core/files/emacs/init.el b/site-modules/core/files/emacs/init.el index db00755..71b296c 100644 --- a/site-modules/core/files/emacs/init.el +++ b/site-modules/core/files/emacs/init.el @@ -30,6 +30,7 @@ ;; Genral and main configuration (load-file (expand-file-name "src/general.el" user-emacs-directory)) +(load-file (expand-file-name "src/file-operations.el" user-emacs-directory)) (load-file (expand-file-name "src/evil.el" user-emacs-directory)) (load-file (expand-file-name "src/ivy.el" user-emacs-directory)) (load-file (expand-file-name "src/projectile.el" user-emacs-directory)) diff --git a/site-modules/core/files/emacs/src/file-operations.el b/site-modules/core/files/emacs/src/file-operations.el new file mode 100644 index 0000000..9410a3b --- /dev/null +++ b/site-modules/core/files/emacs/src/file-operations.el @@ -0,0 +1,40 @@ +;;; file-operations.el --- AMACS -*- lexical-binding: t -*- +;; +;; Copyright 2021 Practically.io All rights reserved +;; +;; Use of this source is governed by a BSD-style +;; licence that can be found in the LICENCE file or at +;; https://www.practically.io/copyright/ + +(defun rename-current-file (new-name) + "Renames both current buffer and file it's visiting to NEW-NAME." + (interactive "FNew name: ") + (let ((name (buffer-name)) + (filename (buffer-file-name))) + (if (not filename) + (message "Buffer '%s' is not visiting a file!" name) + (if (get-buffer new-name) + (message "A buffer named '%s' already exists!" new-name) + (progn + (make-directory (file-name-directory new-name) t) + (rename-file filename new-name 1) + (rename-buffer new-name) + (set-visited-file-name new-name) + (set-buffer-modified-p nil)))))) + +(defun copy-current-file (new-name) + "Copies both current buffer and file it's visiting to NEW-NAME." + (interactive "FNew name: ") + (let ((name (buffer-name)) + (filename (buffer-file-name))) + (if (not filename) + (message "Buffer '%s' is not visiting a file!" name) + (if (get-buffer new-name) + (message "A buffer named '%s' already exists!" new-name) + (progn + (make-directory (file-name-directory new-name) t) + (copy-file filename new-name 1) + (find-file new-name) + (set-visited-file-name new-name) + (set-buffer-modified-p nil)))))) +