Commit e0ff42fbfb87

Vincent Demeester <vincent@sbr.pm>
2018-03-21 20:07:31
Add a vde-files configuration
Misc. mode related to files and their management Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 680d5a3
Changed files (2)
lisp/vde-files.el
@@ -0,0 +1,100 @@
+(use-package files                      ; Core commands for files
+  :bind (("<f5>" . revert-buffer)))
+
+(use-package recentf                    ; Manage recent files
+  :demand t
+  :config
+  (add-to-list 'recentf-exclude "^/\\(?:ssh\\|su\\|sudo\\)?:")
+
+  (setq
+   recentf-max-saved-items 200
+   recentf-max-menu-items 15))
+
+(setq view-read-only t)                 ; View read-only
+
+(use-package hardhat                    ; Protect user-writable files
+  :ensure t
+  :init (global-hardhat-mode))
+
+(use-package image-file                 ; Visit images as images
+  :init (auto-image-file-mode))
+
+(use-package markdown-mode              ; Edit markdown files
+  :ensure t
+  :mode ("\\.md\\'" . markdown-mode)
+  :config
+  (setq markdown-fontify-code-blocks-natively t)
+
+  ;; Don't change font in code blocks
+  (set-face-attribute 'markdown-code-face nil
+                      :inherit nil)
+
+  ;; Process Markdown with Pandoc, using a custom stylesheet for nice output
+  (let ((stylesheet (expand-file-name
+                     (locate-user-emacs-file "etc/pandoc.css"))))
+    (setq markdown-command
+          (mapconcat #'shell-quote-argument
+                     `("pandoc" "--toc" "--section-divs"
+                       "--css" ,(concat "file://" stylesheet)
+                       "--standalone" "-f" "markdown" "-t" "html5")
+                     " ")))
+  (add-hook 'markdown-mode-hook #'auto-fill-mode))
+
+;;;###autoload
+(defun vde-delete-this-file ()
+  "Delete the current file, and kill the buffer."
+  (interactive)
+  (or (buffer-file-name) (error "No file is currently being edited"))
+  (when (yes-or-no-p (format "Really delete '%s'?"
+                             (file-name-nondirectory buffer-file-name)))
+    (delete-file (buffer-file-name))
+    (kill-this-buffer)))
+
+;;;###autoload
+(defun vde-rename-this-file-and-buffer (new-name)
+  "Renames both current buffer and file it's visiting to NEW-NAME."
+  (interactive "sNew name: ")
+  (let ((name (buffer-name))
+        (filename (buffer-file-name)))
+    (unless filename
+      (error "Buffer '%s' is not visiting a file!" name))
+    (if (get-buffer new-name)
+        (message "A buffer named '%s' already exists!" new-name)
+      (progn
+        (when (file-exists-p filename)
+          (rename-file filename new-name 1))
+        (rename-buffer new-name)
+        (set-visited-file-name new-name)))))
+
+(bind-key "C-c f D" #'vde-delete-this-file)
+(bind-key "C-c f R" #'vde-rename-this-file-and-buffer)
+
+;; Additional bindings for built-ins
+(bind-key "C-c f v d" #'add-dir-local-variable)
+(bind-key "C-c f v l" #'add-file-local-variable)
+(bind-key "C-c f v p" #'add-file-local-variable-prop-line)
+
+(defun vde-reload-dir-locals-for-current-buffer ()
+  "Reload dir locals for the current buffer."
+  (interactive)
+  (let ((enable-local-variables :all))
+    (hack-dir-local-variables-non-file-buffer)))
+
+(defun vde-reload-dir-locals-for-all-buffers-in-this-directory ()
+  "Reload dir-locals for all buffers in current buffer's `default-directory'."
+  (interactive)
+  (let ((dir default-directory))
+    (dolist (buffer (buffer-list))
+      (with-current-buffer buffer
+        (when (equal default-directory dir))
+        (vde-reload-dir-locals-for-current-buffer)))))
+
+(bind-key "C-c f v r" #'vde-reload-dir-locals-for-current-buffer)
+(bind-key "C-c f v r" #'vde-reload-dir-locals-for-all-buffers-in-this-directory)
+
+(provide 'vde-files)
+
+;; Local Variables:
+;; coding: utf-8
+;; indent-tabs-mode: nil
+;; End:
init.el
@@ -124,13 +124,13 @@ packages.")
 ;; `setup-var-overrides.el'.
 (when (not (bound-and-true-p disable-pkg-vde-mode))
   (require 'vde-mode))
-;;(require 'vde-mode)
 
 (use-package vde-style)
 (use-package vde-keybindings)
 (use-package vde-ivy)
 (use-package vde-vcs)
 (use-package vde-dired)
+(use-package vde-files)
 (use-package vde-editing)
 (use-package vde-windows)
 (use-package vde-buffers)