#+TITLE: Treemacs layer #+TAGS: file tree|layer [[file:img/treemacs.png]] * Table of Contents :TOC_5_gh:noexport: - [[#description][Description]] - [[#features][Features:]] - [[#install][Install]] - [[#configuration][Configuration]] - [[#follow-mode][Follow mode]] - [[#file-watch][File watch]] - [[#collapsed-directories][Collapsed directories]] - [[#locking-width][Locking width]] - [[#key-bindings][Key bindings]] - [[#global][Global]] - [[#inside-treemacs][Inside Treemacs]] * Description This layer sets up a file navigation and project explorer side-window via [[https://github.com/Alexander-Miller/treemacs][Treemacs]]. ** 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. - Display of multiple file trees organized as projects residing in a workspace. - Ability to show tags contained in files. Tags are provided by imenu, so nearly every filetype is supported. - Mouse interface for single and double left clicks in line with modern GUI standards. (Clicking on an icon will also display a file’s tags) - Locational awareness: commands like ~find-file~ or ~magit-status~ will use the location of the node at point (with $HOME as fallback) - 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. * Install To use this layer, add =treemacs= to the existing =dotspacemacs-configuration-layers= in your =dotspacemacs= file. * Configuration ** Follow mode To have treemacs automatically sync with your current buffer set the layer variable =treemacs-use-follow-mode= to non-nil. #+BEGIN_SRC emacs-lisp (setq-default dotspacemacs-configuration-layers '( (treemacs :variables treemacs-use-follow-mode t))) #+END_SRC Default is =t=. ** File watch To automatically refresh the Treemacs buffer when there is a change in the part of the file system shown by treemacs set the layer variable =treemacs-use-filewatch-mode= to non-nil. #+BEGIN_SRC emacs-lisp (setq-default dotspacemacs-configuration-layers '( (treemacs :variables treemacs-use-filewatch-mode t))) #+END_SRC Default is =t=. ** Collapsed directories *This feature requires python to be installed*. Treemacs tries to collapse empty directory names into one name. It is possible to control how deep Treemacs will search for empty directories by settings the layer variable =treemacs-use-collapsed-directories= to a positive number. #+BEGIN_SRC emacs-lisp (setq-default dotspacemacs-configuration-layers '( (treemacs :variables treemacs-use-collapsed-directories 3))) #+END_SRC Default is 3 (or 0 when python is not installed). ** Locking width To have the width of the treemacs window locked by default, meaning not manually resizable, set the variable =treemacs-lock-width= to non-nil. It will still be resizable through Treemacs commands and key bindings. #+BEGIN_SRC emacs-lisp (setq-default dotspacemacs-configuration-layers '( (treemacs :variables treemacs-lock-width t))) #+END_SRC Default is =nil=. * Key bindings ** Global | Key binding | Description | |-------------+------------------------------------------------------------------------------------------------------------------------------------------------| | ~M-0~ | Selected the treemacs window. Actually selects window #10, which is always assigned to treemacs. | | ~SPC 0~ | 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 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 t~ | Hide/show existing treemacs buffer. Create one for the current directory if no buffer exists. | | ~SPC f T~ | Manually focus the treemacs view on the currently selected file. Not needed when =treemacs-follow-mode= is enabled. | | ~SPC f M-t~ | Manually focus the treemacs view on the currently selected file and tag. | ** 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. | | ~M-j/M-n~ | Select next node at the same depth as currently selected node, if possible. | | ~j/n~ | Goto next line. | | ~k/p~ | Goto previous line. | | ~M-J/N~ | Go to the next line in ~next-window~. | | ~M-K/P~ | Go to the previous line in ~next-window~.. | | ~M-j/M-n~ | Select next node at the same depth as currently selected node, if possible. | | ~M-k/M-p~ | Select previous node at the same depth as currently selected node, if possible. | | ~C-p a~ | Select a new project to add to the treemacs workspace. | | ~C-p p~ | Select a projectile project to add to the workspace. | | ~C-p d~ | Remove project at point from the workspace. | | ~C-p r~ | Rename project at point. | | ~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~ | Set a new value for the width of the treemacs window. | | ~TAB~ | Do what I mean (as defined in ~treemacs-TAB-actions-config~). Prefers expanding nodes by default. | | ~RET~ | Do what I mean (as defined in ~treemacs-RET-actions-config~). Prefers visiting nodes by default. | | ~mouse1~ | Move point to clicked line | | ~2x mouse1~ | Do what I mean (as defined in ~treemacs-doubleclick-actions-config~). Behaves like ~RET~ by default. | | ~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 directories. | | ~u~ | Select parent of selected node, if possible. | | ~q~ | Hide/show an existing treemacs buffer. | | ~Q~ | Kill the treemacs buffer. | | ~ov~ | Open current file or tag by vertically splitting ~next-window~. | | ~oh~ | Open current file or tag by horizontally splitting ~next-window~. | | ~oo~ | Open current file or tag, performing no split and using ~next-window~ directly. | | ~oaa~ | Open current file or tag, using ace-window to decide which window to open the file in. | | ~oah~ | Open current file or tag by horizontally splitting a window selected by ace-window. | | ~oav~ | Open current file or tag by vertically splitting a window selected by ace-window. | | ~ox~ | Open current file according to its mime type in an external application. Linux, Windows and Mac are supported. | | ~ta~ | Toggle ~treemacs-filewatch-mode~. | | ~tf~ | Toggle ~treemacs-follow-mode~. | | ~th~ | Toggle the hiding and displaying of dotfiles. | | ~tw~ | Toggle whether the treemacs buffer should have a fixed width. | | ~yr~ | Copy the absolute path of the nearest project node at point. | | ~yy~ | Copy the absolute path of the node at point. |