Vinegar contribution layer

This commit is contained in:
ralesi 2015-06-08 03:07:50 -07:00 committed by syl20bnr
parent 1cacce8ebc
commit e7c59d7aa4
4 changed files with 258 additions and 0 deletions

View 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 |

View 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)
))
)))
;; )

View 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
))

View 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)
)))