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