Skip to content

Instantly share code, notes, and snippets.

@hidsh
Created January 19, 2012 08:41
Show Gist options
  • Save hidsh/1638804 to your computer and use it in GitHub Desktop.
Save hidsh/1638804 to your computer and use it in GitHub Desktop.
xyzzy: write-buffer /w recursive mkdir
;;
;; write-buffer-as
;;
(provide 'write-buffer-as)
(defun write-buffer-as (new-name)
(interactive "FWrite file as: " :default0 (if (get-buffer-file-name)
(get-buffer-file-name)
(concat (get-special-folder-location :desktop)
"\\" (substitute-string (buffer-name (selected-buffer)) "*" ""))))
(flet ((make-directory-recursive (dir)
(call-process (concat "mkdir -p " dir) :show :hide :wait t)))
(when (and (stringp new-name)
(not (string= new-name (buffer-name (selected-buffer)))))
(make-directory-recursive (directory-namestring new-name))
(write-file new-name)
(let ((ro buffer-read-only)
(buf-old (selected-buffer)))
(if (string= (buffer-name buf-old) "*scratch*")
(erase-buffer "*scratch*")
(delete-buffer (selected-buffer)))
(find-file new-name)
(setq buffer-read-only ro)))))
(global-set-key '(#\C-x #\C-w) 'write-buffer-as)
(defun save-buffer-gnrr ()
(interactive)
(if (get-buffer-file-name)
(call-interactively 'save-buffer)
(call-interactively 'write-buffer-as)))
(global-set-key '(#\C-x #\C-s) 'save-buffer-gnrr)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment