#+TITLE: Treemacs layer * Table of Contents :TOC_4_gh:noexport: - [[#description][Description]] - [[#features][Features:]] - [[#installation][Installation]] - [[#configuration][Configuration]] - [[#key-bindings][Key Bindings]] - [[#global][Global]] - [[#inside-treemacs][Inside Treemacs]] * Description This layer brings in [[https://github.com/Alexander-Miller/treemacs][Treemacs]] to replace Neotree as the default file and project explorer: [[file:img/treemacs.png]] ** Features: An detailed overview over Treemacs' available features is available in [[https://github.com/Alexander-Miller/treemacs#detailed-feature-list][its readme]]. In a short summary Treemacs offers the following: * Simple and powerful navigation and ability to detail exactly how and where a file should be opened * Good looking png icons. * Ability to show tags contained in files. Tags are provided by imenu, so nearly every filetype is supported. * Optionally fontifying files based on their git status. * Optionally collapsing single-dir-child directories into one. * Doing both asynchronously for an imperceptible performance cost. * Optional follow-mode to automatically focus the currently selected file. * Optional filewatch-mode to automatically refresh the view after (and only after) changes to the shown filesystem. * Installation To use this layer, add =treemacs= to the existing =dotspacemacs-configuration-layers= in your =dotspacemacs= file. In addition you can also specify the following configuration variables: * =treemacs-use-follow-mode= When t =treemacs-follow-mode= will be enabled. Default value: t * =treemacs-use-filewatch-mode= When t =treemacs-filewatch-mode= will be enabled. Default value: t * =treemacs-use-collapsed-directories= Maximum number of single-dir-child directories Treemacs will collapse into one. Default value: 3 Using all 3 options the =dotspacemacs-configuration-layers= will look like this: #+BEGIN_SRC emacs-lisp (treemacs :variables treemacs-use-follow-mode t treemacs-use-filewatch-mode t treemacs-use-collapsed-directories 3) #+END_SRC * Configuration A detailed list of all possible configuration options can be found in [[https://github.com/Alexander-Miller/treemacs#configuration][Treemacs' readme]]. You can also look at ~M-x customize-group treemacs~. * Key Bindings ** Global | Key Binding | Description | |-------------+------------------------------------------------------------------------------------------------------------------------------------------------| | ~SPC f t~ | Hide/show existing treemacs buffer. Create one for the current directory if no buffer exists. | | ~SPC f T~ | Open treemacs in the current directory. When not visiting a file use $HOME as fallback. With a prefix arg manually select the root instead. | | ~SPC f p~ | Same as ~SPC f t~, but when creating a new buffer open it in the current project's root. | | ~SPC f P~ | Open treemacs in the current project's root. With a prefix arg manually select the project instead. | | ~SPC f B~ | Find and select a bookmark. If it cannot be found rebuild view with the bookmark's location as root. Also open the bookmark with a prefix arg. | | ~SPC f C-t~ | Manually focus the treemacs view on the currently selected file. Not needed when =treemacs-follow-mode= is enabled. | | ~M-0~ | Selected the treemacs window. Actually selects window #10, which is always assigned to treemacs. | ** Inside Treemacs Treemacs will use either j/k or n/p to go to the next/previous line, depending on whether vim/hybrid editing style is used. Likewise refresh is only bound to g when emacs editing style is used, since under vim g is a prefix for many other commands. | Key Binding | Description | |-------------+---------------------------------------------------------------------------------------------------------------------------------------| | ? | Summon the helpful hydra to show you the treemacs keymap. | | j/n | Goto next/prev line. | | h | Switch treemacs' root directory to current root's parent, if possible. | | l | Use currently selected directory as new root. Do nothing for files. | | M-j/M-n | Select next node at the same depth as currently selected node, if possible. | | th | Toggle the hiding and displaying of dotfiles. | | tw | Toggle whether the treemacs buffer should have a fixed width. | | tf | Toggle treemacs-follow-mode. | | ta | treemacs-filewatch-mode. | | w | Reset the width of the treemacs buffer to its default. With a prefix arg set a new default first. | | TAB | Push the button in the current line to open/close the selected node. | | mouse1 | Do the same as TAB when mouse1 clicking on an icon. Clicking anywhere other than an icon does nothing. | | g/r/gr | Refresh and rebuild the treemacs buffer. | | d | Delete node at point. A delete action must always be confirmed. Directories are deleted recursively. | | cf | Create a file. | | cd | Create a directory. | | R | Rename the currently selected node. Reload buffers visiting renamed files or files in renamed direcotries. | | u | Select parent of selected node, if possible. | | q | Hide/show an existing treemacs buffer. | | Q | Kill the treemacs buffer. | | RET | Do what I mean. (Run the action defined in ~treemacs-default-actions~ for the current button.) | | ov | Open current file or tag by vertically splitting next-window. Stay in current window with a prefix argument. | | oh | Open current file or tag by horizontally splitting next-window. Stay in current window with a prefix argument. | | oo/RET | Open current file or tag, performing no split and using next-window directly. Stay in current window with a prefix argument. | | oaa | Open current file or tag, using ace-window to decide which buffer to open the file in. Stay in current window with a prefix argument. | | oah | Open current file or tag by horizontally splitting a buffer selected by ace-window. Stay in current window with a prefix argument. | | oav | Open current file or tag by vertically splitting a buffer selected by ace-window. Stay in current window with a prefix argument. | | ox | Open current file or dir, using the xdg-open shell-command. | | yy | Copy the absolute path of the node at point. | | yr | Copy the absolute path of the current treemacs root. |