;;; dangerous-mode.el --- Minor mode for dangerous editing -*- lexical-binding: t -*- (define-minor-mode dangerous-mode nil nil nil :global nil (if dangerous-mode ;; Enable dangerous mode, deletes the file associated with your ;; current buffer. (let ((bfn (buffer-file-name))) (if bfn (progn (message "Living dangerously and deleting '%s' the only copy lives in this buffer now!" bfn) (delete-file bfn)))) ;; Disable dangerous mode, save the buffer contents again. (progn (let ((bfn (buffer-file-name))) (if (not (file-exists-p bfn)) ;; File doesn't exist, just save the buffer (progn (save-buffer) (message "Living safely, saving '%s' to '%s'" (buffer-name) (buffer-file-name))) ;; File does exist? Steady on now, write the buffer out to ;; a new file named something similar. (let ((nfn (make-temp-file (format "%s." bfn) nil ".not-that-dangerously")) (obn (buffer-name))) (progn (set-visited-file-name nfn t t) (write-region (point-min) (point-max) nfn) (message "Living semi-dangerously, '%s' now saved to '%s'" obn nfn)))))))) (provide 'dangerous-mode)