(require 're-packages)
(require 're-editing-defuns)
+(require 're-file-defuns)
(require 're-vc-defuns)
;; (require 'acme-mouse)
;; (require 'fully-mono-themes)
(keymap-global-set "C-w" #'backward-kill-word)
(keymap-global-set "C-S-W" #'kill-region)
(keymap-global-set "C-u" (lambda () (interactive) (kill-line 0))) ; kill-line backwards
+(keymap-global-set "C-M-S-K" #'re/kill-defun)
(keymap-global-set "C-S-U" #'universal-argument) ; C-u used above
(keymap-set key-translation-map "C-h" "<DEL>") ; Rather F1 for help, also C-S-H works
(keymap-global-set "C-S-d" #'delete-pair)
;;; Code:
-(defun re/rename-current-buffer-file nil
- "Renames the current buffer and the file it is visiting."
- (interactive)
- (let ((name (buffer-name))
- (filename (buffer-file-name)))
- (if (not (and filename (file-exists-p filename)))
- (error "Buffer '%s' is not visiting a file!" name)
- (let ((new-name (read-file-name "New name: " filename)))
- (if (get-buffer new-name)
- (error "A buffer named '%s' already exists!" new-name)
- (rename-file filename new-name 1)
- (rename-buffer new-name)
- (set-visited-file-name new-name)
- (set-buffer-modified-p nil)
- (message "File '%s' successfully renamed to '%s'"
- name
- (file-name-nondirectory new-name)))))))
-
(defun re/scratch-only ()
"Bring up the scratch buffer as the only visible buffer."
(interactive)
(comment-or-uncomment-region (region-beginning) (region-end))
(comment-line)))
-(defun re/comment-defun ()
- "Mark a defun and comment it out."
- (interactive)
- (save-excursion (mark-defun)
+(defun re/comment-defun (&optional arg)
+ "Mark a defun and comment it out.
+Return to initial position after. Arg works on `mark-defun'."
+ (interactive "P")
+ (save-excursion (mark-defun arg)
(comment-region (region-beginning) (region-end))))
+(defun re/kill-defun (&optional arg)
+ "Mark a defun and kill it.
+Arg works on `mark-defun'."
+ (interactive "P")
+ (mark-defun arg)
+ (kill-region (region-beginning) (region-end)))
+
(defun re/kill-bword-or-region ()
"Kill region if active, otherwise kill back one word."
(interactive)
(abort-recursive-edit))
(keyboard-quit)))
-(defun re/get-line-from-file (file-path line-number)
- "Return the specified LINE-NUMBER from FILE-PATH as a string.
-Start from bottom if given a negative line number."
- (with-temp-buffer
- (insert-file-contents file-path)
- (if (< line-number 0)
- (progn
- (goto-char (point-max))
- (forward-line line-number))
- (progn
- (goto-char (point-min))
- (forward-line (1- line-number))))
- (buffer-substring-no-properties (line-beginning-position) (line-end-position))))
-
(defmacro re/open-with-new-frame (frname function)
"Run the function in its own named frame."
`(progn
--- /dev/null
+;;; re-file-defuns.el -*- lexical-binding: t; -*-
+;; This file is not part of GNU Emacs.
+
+;;; Code:
+
+(defun re/rename-current-buffer-file nil
+ "Renames the current buffer and the file it is visiting."
+ (interactive)
+ (let ((name (buffer-name))
+ (filename (buffer-file-name)))
+ (if (not (and filename (file-exists-p filename)))
+ (error "Buffer '%s' is not visiting a file!" name)
+ (let ((new-name (read-file-name "New name: " filename)))
+ (if (get-buffer new-name)
+ (error "A buffer named '%s' already exists!" new-name)
+ (rename-file filename new-name 1)
+ (rename-buffer new-name)
+ (set-visited-file-name new-name)
+ (set-buffer-modified-p nil)
+ (message "File '%s' successfully renamed to '%s'"
+ name
+ (file-name-nondirectory new-name)))))))
+
+(defun re/get-line-from-file (file-path line-number)
+ "Return the specified LINE-NUMBER from FILE-PATH as a string.
+Start from bottom if given a negative line number."
+ (with-temp-buffer
+ (insert-file-contents file-path)
+ (if (< line-number 0)
+ (progn
+ (goto-char (point-max))
+ (forward-line line-number))
+ (progn
+ (goto-char (point-min))
+ (forward-line (1- line-number))))
+ (buffer-substring-no-properties (line-beginning-position) (line-end-position))))
+
+(defun re/get-file-modified-time (filepath)
+ (interactive)
+ (format-time-string "%Y-%m-%d-%H%M"
+ (file-attribute-modification-time (file-attributes filepath))))
+
+(defun re/filename-inject-mod-time (filepath)
+ (interactive)
+ (concat (file-name-sans-extension filepath)
+ "_"
+ (re/get-file-modified-time filepath)
+ (file-name-extension filepath t)))
+
+(defun re/copy-with-mod-time (&optional filepath)
+ (interactive)
+ (let ((filepath (if (eq major-mode 'dired-mode)
+ (dired-get-filename t)
+ (when (null filepath)
+ (read-file-name "File to copy with datestring: "
+ default-directory
+ nil
+ t
+ nil)))))
+ (copy-file filepath (re/filename-inject-mod-time filepath ) nil t t t)))
+
+(provide 're-file-defuns)
+;;; re-file-defuns.el ends here