X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/721c270052e4e4fc671472ac871d6fe61be3681b..f10533854f4c7bb54247a11981191bf37b70cb36:/packages/ztree/ztree-dir.el diff --git a/packages/ztree/ztree-dir.el b/packages/ztree/ztree-dir.el index 3dd87b7f7..53617f905 100644 --- a/packages/ztree/ztree-dir.el +++ b/packages/ztree/ztree-dir.el @@ -1,10 +1,10 @@ ;;; ztree-dir.el --- Text mode directory tree -*- lexical-binding: t; -*- -;; Copyright (C) 2013-2015 Free Software Foundation, Inc. +;; Copyright (C) 2013-2016 Free Software Foundation, Inc. ;; -;; Author: Alexey Veretennikov -;; -;; Created: 2013-11-1l +;; Author: Alexey Veretennikov +;; +;; Created: 2013-11-11 ;; ;; Keywords: files tools ;; URL: https://github.com/fourier/ztree @@ -28,7 +28,7 @@ ;;; Commentary: ;; ;; Add the following to your .emacs file: -;; +;; ;; (push (substitute-in-file-name "path-to-ztree-directory") load-path) ;; (require 'ztree-dir) ;; @@ -45,6 +45,7 @@ (require 'ztree-util) (require 'ztree-view) +(eval-when-compile (require 'cl-lib)) ;; ;; Constants @@ -52,15 +53,26 @@ (defconst ztree-hidden-files-regexp "^\\." "Hidden files regexp. -By default all filest starting with dot '.', including . and ..") +By default all filest starting with dot `.', including . and ..") ;; ;; Configurable variables -;; +;; (defvar ztree-dir-move-focus nil "If set to true moves the focus to opened window when the -user press RETURN on file ")t +user press RETURN on file ") + +(defvar-local ztree-dir-filter-list (list ztree-hidden-files-regexp) + "List of regexp file names to filter out. +By default paths starting with dot (like .git) are ignored. +One could add own filters in the following way: + +(setq-default ztree-dir-filter-list (cons \"^.*\\.pyc\" ztree-dir-filter-list)) +") + +(defvar-local ztree-dir-show-filtered-files nil + "Show or not files from the filtered list.") ;; @@ -76,6 +88,19 @@ user press RETURN on file ")t (defvar ztreep-header-face 'ztreep-header-face) +(define-minor-mode ztreedir-mode + "A minor mode for displaying the directory trees in text mode." + ;; initial value + nil + ;; modeline name + " Dir" + ;; The minor mode keymap + `( + (,(kbd "H") . ztree-dir-toggle-show-filtered-files))) + + + + ;; ;; File bindings to the directory tree control ;; @@ -91,8 +116,12 @@ user press RETURN on file ")t (defun ztree-file-not-hidden (filename) "Determines if the file with FILENAME should be visible." - (not (string-match ztree-hidden-files-regexp - (ztree-file-short-name filename)))) + (let ((name (ztree-file-short-name filename))) + (and (not (or (string= name ".") (string= name ".."))) + (or + ztree-dir-show-filtered-files + (not (cl-find-if (lambda (rx) (string-match rx name)) ztree-dir-filter-list)))))) + (defun ztree-find-file (node hard) "Find the file at NODE. @@ -104,9 +133,20 @@ Otherwise, the ztree window is used to find the file." (find-file-other-window node)) (hard (save-selected-window (find-file-other-window node))) - (t + (t (find-file node))))) + +(defun ztree-dir-toggle-show-filtered-files () + "Toggle visibility of the filtered files." + (interactive) + (setq ztree-dir-show-filtered-files (not ztree-dir-show-filtered-files)) + (message (concat (if ztree-dir-show-filtered-files "Show" "Hide") " filtered files")) + (ztree-refresh-buffer)) + + + + ;;;###autoload (defun ztree-dir (path) "Create an interactive buffer with the directory tree of the PATH given." @@ -115,14 +155,16 @@ Otherwise, the ztree window is used to find the file." (let ((buf-name (concat "*Directory " path " tree*"))) (ztree-view buf-name (expand-file-name (substitute-in-file-name path)) - 'ztree-file-not-hidden - 'ztree-insert-buffer-header - 'ztree-file-short-name - 'file-directory-p - 'string-equal - '(lambda (x) (directory-files x 'full)) + #'ztree-file-not-hidden + #'ztree-insert-buffer-header + #'ztree-file-short-name + #'file-directory-p + #'string-equal + (lambda (x) (directory-files x 'full)) nil ; face - 'ztree-find-file)))) ; action + #'ztree-find-file) ; action + (ztreedir-mode)))) + (provide 'ztree-dir)