git clone 'git://'


A tree project explorer. screenshot


* Asynchronous indexing
* Caching
* File management
* I-search support
* Helm support
* Folding
* Filtering

Main commands:

project-explorer-open -- open the sidebar
project-explorer-helm -- browse the file collection using helm

Main key-bindings:

"s"        Change directory
"j"        Next line
"k"        Previous line
"g"        Refresh
"+"        Create file or directory (if the name ends with a slash)
"-" & "d"  Delete file or directory
"c"        Copy file or directory
"r"        Rename file or directory
"q"        Hide sidebar
"u"        Go to parent directory
"["        Previous sibling
"]"        Next sibling
"TAB"      Toggle folding. Unfold descendants with C-U
"S-TAB"    Fold all. Unfold with C-U
"RET"      Toggle folding of visit file. Specify window with C-U
"f"        Visit file or directory. Specify window with C-U
"w"        Show the path of file at point, and copy it to clipboard
"M-k"      Launch ack-and-a-half, from the closest directory
"M-l"      Filter using a regular expression. Call with C-u to disable
"M-o"      Toggle omission of hidden and temporary files

Main customizable variables:

Function that will locate the project root from the current
Indexing backend. One of `pe/get-directory-tree-async' (native,
asynchronous), `pe/get-directory-tree-simple'(native, synchronous) or
`pe/get-directory-tree-external' (extrnal, asynchronus, requires
"find" with GNU extensions)
Whether to use caching
Files and directories matching this regex won't be traversed
Omit files based on .gitignore. Directories containing only ignored files won't be shown.
Set to 'left or 'right, depending on which side you want the sidebar to appear
The width of the sidebar when it first appears

Tailor-fitting pe/project-root-function

The default pe/project-root-function assumes that the project root will be the closest directory containing .git, or the current directory. If you have projectile installed, it will simply use projectile-project-root instead. Should you need something more specific, it's not hard to make your own project-finding function.

(defun pe/project-root-function-sample ()
    ;; A specific directory
    (when (string-prefix-p "/path/to/my/project/" default-directory)
    ;; A directory containg a file
    (locate-dominating-file default-directory "Web.config")

(setq pe/project-root-function 'pe/project-root-function-sample)