Vinegar contribution layer
This commit is contained in:
parent
1cacce8ebc
commit
e7c59d7aa4
54
contrib/!vim/vinegar/README.org
Normal file
54
contrib/!vim/vinegar/README.org
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
#+TITLE: Vinegar contribution layer for Spacemacs
|
||||||
|
|
||||||
|
* Table of Contents :TOC@4:
|
||||||
|
- [[#desciption][Desciption]]
|
||||||
|
- [[#features][Features]]
|
||||||
|
- [[#mouse-bindings][Mouse bindings]]
|
||||||
|
- [[#key-bindings][Key bindings]]
|
||||||
|
|
||||||
|
* Desciption
|
||||||
|
|
||||||
|
This layer is a port contribution layer for vim-vinegar for emacs.
|
||||||
|
|
||||||
|
A port of tpope's vinegar.vim
|
||||||
|
[vinegar][https://github.com/tpope/vim-vinegar], simplifying =dired=
|
||||||
|
with a limited number of details and exposing the ~-~ command in all
|
||||||
|
buffers to enter dired.
|
||||||
|
|
||||||
|
** Features
|
||||||
|
|
||||||
|
- navigation up folders with ~-~ key
|
||||||
|
- simplify dired buffer to show only file names
|
||||||
|
- better evil/vim bindings for navigation within dired buffer
|
||||||
|
- keep only one active dired buffer
|
||||||
|
- Use dired-k extension to show time / vcs related information in
|
||||||
|
single bar
|
||||||
|
- right mouse click moves up directory if in blank space or shows context menu
|
||||||
|
|
||||||
|
** Mouse bindings
|
||||||
|
|
||||||
|
| Mouse Binding | Description |
|
||||||
|
|---------------+-----------------------------------------------|
|
||||||
|
| ~mouse-1~ | (Dired) Open selected file |
|
||||||
|
| ~mouse-2~ | (Dired) Open clicked file in other-window |
|
||||||
|
| ~mouse-3~ | (Dired) Open context popup or go up directory |
|
||||||
|
|
||||||
|
** Key bindings
|
||||||
|
|
||||||
|
| Key Binding | Description |
|
||||||
|
|-------------+----------------------------------------------------|
|
||||||
|
| ~-~ | Navigate to parent directory in dired |
|
||||||
|
| ~0~ | (Dired) Move to the beginning of the file in dired |
|
||||||
|
| ~=~ | (Dired) Diff between selected files |
|
||||||
|
| ~C-j~ | (Dired) Move to next subdirectory |
|
||||||
|
| ~C-k~ | (Dired) Move to previous sbdirectory |
|
||||||
|
| ~I~ | (Dired) Toggle showing dotfiles |
|
||||||
|
| ~~~ | (Dired) Navigate to home directory |
|
||||||
|
| ~f~ | (Dired) Helm find file |
|
||||||
|
| ~C-f~ | (Dired) dired-find |
|
||||||
|
| ~H~ | (Dired) Show dired history |
|
||||||
|
| ~T~ | (Dired) Move down in dired tree |
|
||||||
|
| ~K~ | (Dired) Kill marked lines (hide, do not delete) |
|
||||||
|
| ~r~ | (Dired) Redisplay buffer |
|
||||||
|
| ~C-r~ | (Dired) Revert buffer |
|
||||||
|
|
137
contrib/!vim/vinegar/funcs.el
Normal file
137
contrib/!vim/vinegar/funcs.el
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
;; funcs.el file for vinegar contribution layer
|
||||||
|
|
||||||
|
(defun vinegar/dotfiles-toggle ()
|
||||||
|
"Show/hide dot-files"
|
||||||
|
(interactive)
|
||||||
|
(when (equal major-mode 'dired-mode)
|
||||||
|
(if (or (not (boundp 'dired-dotfiles-show-p)) dired-dotfiles-show-p) ; if currently showing
|
||||||
|
(progn
|
||||||
|
(set (make-local-variable 'dired-dotfiles-show-p) nil)
|
||||||
|
(message "h")
|
||||||
|
(dired-mark-files-regexp "^\\\.")
|
||||||
|
(dired-do-kill-lines))
|
||||||
|
(progn (revert-buffer) ; otherwise just revert to re-show
|
||||||
|
(set (make-local-variable 'dired-dotfiles-show-p) t)))))
|
||||||
|
|
||||||
|
(defun vinegar/back-to-top ()
|
||||||
|
"Move to first file"
|
||||||
|
(interactive)
|
||||||
|
(beginning-of-buffer)
|
||||||
|
(dired-next-line 1))
|
||||||
|
|
||||||
|
(defun vinegar/jump-to-bottom ()
|
||||||
|
"Move to last file"
|
||||||
|
(interactive)
|
||||||
|
(end-of-buffer)
|
||||||
|
(dired-next-line -1))
|
||||||
|
|
||||||
|
(defun vinegar/move-up ()
|
||||||
|
"Move to previous file"
|
||||||
|
(interactive)
|
||||||
|
(dired-previous-line 1)
|
||||||
|
(if (bobp)
|
||||||
|
(dired-next-line 1)))
|
||||||
|
|
||||||
|
(defun vinegar/move-down ()
|
||||||
|
"Move to next file"
|
||||||
|
(interactive)
|
||||||
|
(dired-next-line 1)
|
||||||
|
(if (eobp)
|
||||||
|
(dired-next-line -1)))
|
||||||
|
|
||||||
|
(defun vinegar/up-directory (&optional other-window)
|
||||||
|
"Run Dired on parent directory of current directory."
|
||||||
|
(interactive "P")
|
||||||
|
(let* ((dir (dired-current-directory))
|
||||||
|
(orig (current-buffer))
|
||||||
|
(up (file-name-directory (directory-file-name dir))))
|
||||||
|
(or (dired-goto-file (directory-file-name dir))
|
||||||
|
;; Only try dired-goto-subdir if buffer has more than one dir.
|
||||||
|
(and (cdr dired-subdir-alist)
|
||||||
|
(dired-goto-subdir up))
|
||||||
|
(progn
|
||||||
|
(kill-buffer orig)
|
||||||
|
(dired up)
|
||||||
|
(dired-goto-file dir)))))
|
||||||
|
|
||||||
|
(defun vinegar/dired-diff ()
|
||||||
|
"Ediff marked files in dired or selected files in separate window"
|
||||||
|
(interactive)
|
||||||
|
(let* ((marked-files (dired-get-marked-files nil nil))
|
||||||
|
(other-win (get-window-with-predicate
|
||||||
|
(lambda (window)
|
||||||
|
(with-current-buffer (window-buffer window)
|
||||||
|
(and (not (eq window (selected-window)))
|
||||||
|
(eq major-mode 'dired-mode))))))
|
||||||
|
(other-marked-files (and other-win
|
||||||
|
(with-current-buffer (window-buffer other-win)
|
||||||
|
(dired-get-marked-files nil)))))
|
||||||
|
(cond ((= (length marked-files) 2)
|
||||||
|
(ediff-files (nth 0 marked-files)
|
||||||
|
(nth 1 marked-files)))
|
||||||
|
((= (length marked-files) 3)
|
||||||
|
(ediff-files3 (nth 0 marked-files)
|
||||||
|
(nth 1 marked-files)
|
||||||
|
(nth 2 marked-files)
|
||||||
|
))
|
||||||
|
((and (= (length marked-files) 1)
|
||||||
|
(= (length other-marked-files) 1))
|
||||||
|
(ediff-files (nth 0 marked-files)
|
||||||
|
(nth 0 other-marked-files)))
|
||||||
|
((= (length marked-files) 1)
|
||||||
|
(dired-diff))
|
||||||
|
(t (error "mark exactly 2 files, at least 1 locally")))))
|
||||||
|
|
||||||
|
|
||||||
|
(defun vinegar/dired-setup ()
|
||||||
|
"Setup custom dired settings for vinegar"
|
||||||
|
(setq dired-omit-verbose nil)
|
||||||
|
|
||||||
|
;; hide details by default
|
||||||
|
(dired-hide-details-mode t)
|
||||||
|
;; omit the .. in dired
|
||||||
|
(dired-omit-mode t)
|
||||||
|
|
||||||
|
;; allow selection with mouse
|
||||||
|
(make-local-variable 'mouse-1-click-follows-link)
|
||||||
|
(setq mouse-1-click-follows-link nil)
|
||||||
|
|
||||||
|
(local-set-key (kbd "<mouse-1>") 'vinegar/dired-mouse-click)
|
||||||
|
(local-set-key (kbd "<mouse-3>") 'vinegar/up-directory)
|
||||||
|
(local-set-key (kbd "<down-mouse-3>") nil)
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun vinegar/dired-mouse-click (event)
|
||||||
|
"In Dired, visit the file or directory name you click on."
|
||||||
|
(interactive "e")
|
||||||
|
(let (window pos file)
|
||||||
|
(save-excursion
|
||||||
|
(setq window (posn-window (event-end event))
|
||||||
|
pos (posn-point (event-end event)))
|
||||||
|
(if (not (windowp window))
|
||||||
|
(error "No file chosen"))
|
||||||
|
(set-buffer (window-buffer window))
|
||||||
|
(goto-char pos)
|
||||||
|
(setq file (dired-get-file-for-visit)))
|
||||||
|
(find-alternate-file file)))
|
||||||
|
|
||||||
|
(defun vinegar/dired-mouse-click-3 (event)
|
||||||
|
"In Dired, show context menu or go up a directory."
|
||||||
|
(interactive "e")
|
||||||
|
(let (window pos file)
|
||||||
|
(save-excursion
|
||||||
|
(setq window (posn-window (event-end event))
|
||||||
|
pos (posn-point (event-end event)))
|
||||||
|
(if (not (windowp window))
|
||||||
|
(error "No file chosen"))
|
||||||
|
(set-buffer (window-buffer window))
|
||||||
|
(goto-char pos)
|
||||||
|
(condition-case ex
|
||||||
|
(progn
|
||||||
|
(setq file (dired-get-file-for-visit))
|
||||||
|
(dired-find-file-other-window))
|
||||||
|
('error
|
||||||
|
(vinegar/up-directory)
|
||||||
|
))
|
||||||
|
)))
|
||||||
|
;; )
|
27
contrib/!vim/vinegar/keybindings.el
Normal file
27
contrib/!vim/vinegar/keybindings.el
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
(require 'dired-x)
|
||||||
|
(define-key evil-normal-state-map (kbd "-") 'dired-jump)
|
||||||
|
|
||||||
|
(add-hook 'dired-mode-hook 'vinegar/dired-setup)
|
||||||
|
|
||||||
|
(eval-after-load "dired-mode"
|
||||||
|
(evilify dired-mode dired-mode-map
|
||||||
|
"j" 'vinegar/move-down
|
||||||
|
"k" 'vinegar/move-up
|
||||||
|
"-" 'vinegar/up-directory
|
||||||
|
"0" 'dired-back-to-start-of-files
|
||||||
|
"=" 'vinegar/dired-diff
|
||||||
|
(kbd "C-j") 'dired-next-subdir
|
||||||
|
(kbd "C-k") 'dired-prev-subdir
|
||||||
|
"I" 'vinegar/dotfiles-toggle
|
||||||
|
(kbd "~") '(lambda ()(interactive) (find-alternate-file "~/"))
|
||||||
|
(kbd "RET") 'dired-find-alternate-file
|
||||||
|
"f" 'helm-find-files
|
||||||
|
(kbd "C-f") 'find-name-dired
|
||||||
|
"H" 'diredp-dired-recent-dirs
|
||||||
|
"T" 'dired-tree-down
|
||||||
|
"K" 'dired-do-kill-lines
|
||||||
|
"r" 'dired-do-redisplay
|
||||||
|
(kbd "C-r") 'revert-buffer
|
||||||
|
"gg" 'vinegar/back-to-top
|
||||||
|
"G" 'vinegar/jump-to-bottom
|
||||||
|
))
|
40
contrib/!vim/vinegar/packages.el
Normal file
40
contrib/!vim/vinegar/packages.el
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
;;; packages.el --- vinegar Layer packages File for Spacemacs
|
||||||
|
;;
|
||||||
|
;; Copyright (c) 2012-2014 Sylvain Benner
|
||||||
|
;; Copyright (c) 2014-2015 Sylvain Benner & Contributors
|
||||||
|
;;
|
||||||
|
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
|
||||||
|
;; URL: https://github.com/syl20bnr/spacemacs
|
||||||
|
;;
|
||||||
|
;; This file is not part of GNU Emacs.
|
||||||
|
;;
|
||||||
|
;;; License: GPLv3
|
||||||
|
|
||||||
|
(setq vinegar-packages
|
||||||
|
'(
|
||||||
|
diff-hl
|
||||||
|
;; dired+
|
||||||
|
))
|
||||||
|
|
||||||
|
(setq vinegar-excluded-packages '())
|
||||||
|
|
||||||
|
(defun vinegar/init-dired+ ()
|
||||||
|
(use-package dired+
|
||||||
|
:defer t
|
||||||
|
:init
|
||||||
|
(progn
|
||||||
|
(setq diredp-hide-details-initially-flag t)
|
||||||
|
(setq diredp-hide-details-propagate-flag t)
|
||||||
|
;; use single buffer for all dired navigation
|
||||||
|
;; disable font themeing from dired+
|
||||||
|
(setq font-lock-maximum-decoration (quote ((dired-mode . 1) (t . t))))
|
||||||
|
(toggle-diredp-find-file-reuse-dir 1)
|
||||||
|
)))
|
||||||
|
|
||||||
|
(defun vinegar/post-init-diff-hl ()
|
||||||
|
(use-package diff-hl
|
||||||
|
:defer t
|
||||||
|
:init
|
||||||
|
(progn
|
||||||
|
(add-hook 'dired-mode-hook 'diff-hl-dired-mode)
|
||||||
|
)))
|
Loading…
Reference in a new issue