update of packages
@@ -3,7 +3,17 @@
|
||||
|
||||
* Changelog
|
||||
** current master
|
||||
- Deprecated ~treemacs-window-background-color~ in favour of ~treemacs-window-background-face~ and
|
||||
~treemacs-hl-line-face~
|
||||
- Added ~treemacs-copy-absolute-path-at-point~
|
||||
- Made it possible to disbale workspace with a ~COMMENT~ directive
|
||||
- Added option to sort alphabetic-numerically (as with ~string-version-lessp~)
|
||||
- Added ~:on-expand~ and ~:on-collapse~ options to treelib nodes
|
||||
** v3.1
|
||||
- Added ~treemacs-create-workspace-from-project~ command
|
||||
- Added ~treemacs-project-follow-into-home~ option
|
||||
- Treemacs can now be resized with the mouse, even when it width is locked
|
||||
- Added support for directory-specific icons
|
||||
- Bug fixes
|
||||
** v3
|
||||
- Complete rewrite of the extension api
|
||||
|
||||
2
lisp/treemacs/icons/default/svgrepo/dir-docs-closed.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_docs</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#c05454"/><path d="M15.266,11.311V29.686H29.715v-15.1h-3.6V11.311H15.266Zm12.146.813.008,1.158,1.252,0-1.26-1.16Z" style="fill:gray"/><path d="M27.028,10H15.281a1.316,1.316,0,0,0-1.312,1.313V29.688A1.316,1.316,0,0,0,15.281,31H29.719a1.316,1.316,0,0,0,1.313-1.312V13.642Zm.394,2.133,1.247,1.148H27.422ZM15.281,29.688V11.313H26.109v3.281h3.609V29.688Z" style="fill:#c5c5c5"/><rect x="16.594" y="19.372" width="11.813" height="1.313" style="fill:#c5c5c5"/><path d="M18.436,12.572a1.426,1.426,0,0,0-.558-.394,2.051,2.051,0,0,0-.82-.131h-1.28v3.839h1.28a1.66,1.66,0,0,0,1.313-.492,1.786,1.786,0,0,0,.361-.591,2.954,2.954,0,0,0,.1-.82,2.871,2.871,0,0,0-.1-.788A1.576,1.576,0,0,0,18.436,12.572Zm-.459,1.837a1.011,1.011,0,0,1-.164.394.775.775,0,0,1-.3.262,1.1,1.1,0,0,1-.492.1H16.6V12.736h.459a.872.872,0,0,1,.722.3,1.213,1.213,0,0,1,.164.361,2.55,2.55,0,0,1,.066.525A2.172,2.172,0,0,1,17.976,14.41Z" style="fill:#c5c5c5"/><path d="M21.979,12.572a1.369,1.369,0,0,0-.525-.427,1.711,1.711,0,0,0-.755-.164,1.983,1.983,0,0,0-.788.164,1.669,1.669,0,0,0-.525.427,2.176,2.176,0,0,0-.3.623,2.942,2.942,0,0,0,0,1.509,1.829,1.829,0,0,0,.3.623,1.127,1.127,0,0,0,.525.427,1.865,1.865,0,0,0,.788.164,1.417,1.417,0,0,0,1.214-.525,2.109,2.109,0,0,0,.427-1.444,2.8,2.8,0,0,0-.1-.755A1.334,1.334,0,0,0,21.979,12.572ZM21.29,14.9a.705.705,0,0,1-.623.328.643.643,0,0,1-.623-.328,1.871,1.871,0,0,1-.2-.952,1.79,1.79,0,0,1,.2-.952.806.806,0,0,1,1.247,0,1.871,1.871,0,0,1,.2.952A1.79,1.79,0,0,1,21.29,14.9Z" style="fill:#c5c5c5"/><path d="M24.7,14.869a.716.716,0,0,1-.131.164.686.686,0,0,1-.2.131.64.64,0,0,1-.263.033.575.575,0,0,1-.558-.3,1.79,1.79,0,0,1-.2-.952v-.262c0-.1.033-.2.033-.3.033-.1.033-.2.066-.263a.529.529,0,0,1,.131-.23.87.87,0,0,1,.2-.164.618.618,0,0,1,.263-.066.567.567,0,0,1,.427.164,1.135,1.135,0,0,1,.23.394l.755-.2a1.572,1.572,0,0,0-.23-.525,1.556,1.556,0,0,0-.328-.328,1.884,1.884,0,0,0-1.608-.033,1.545,1.545,0,0,0-.492.427,1.292,1.292,0,0,0-.164.656,2.692,2.692,0,0,0-.066.722,4.914,4.914,0,0,0,.066.722,1.788,1.788,0,0,0,.262.623,1.226,1.226,0,0,0,.492.427,1.711,1.711,0,0,0,.755.164,1.6,1.6,0,0,0,.919-.262,1.556,1.556,0,0,0,.328-.328,3.344,3.344,0,0,0,.263-.492l-.788-.2A.908.908,0,0,1,24.7,14.869Z" style="fill:#c5c5c5"/><rect x="16.594" y="27.805" width="8.203" height="1.313" style="fill:#c5c5c5"/><rect x="16.594" y="25.272" width="11.813" height="1.313" style="fill:#c5c5c5"/><rect x="16.594" y="22.272" width="11.813" height="1.313" style="fill:#c5c5c5"/><rect x="16.649" y="16.472" width="11.813" height="1.313" style="fill:#c5c5c5"/></svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
2
lisp/treemacs/icons/default/svgrepo/dir-docs-open.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_docs_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#dc7a7a"/><polygon points="4.3 26.5 29.5 26.5 25.7 13.7 25.7 13.7 0.5 13.7 4.3 26.5" style="fill:#dc7a7a"/><path d="M15.266,11.311V29.686H29.715v-15.1h-3.6V11.311H15.266Zm12.146.813.008,1.158,1.252,0-1.26-1.16Z" style="fill:gray"/><path d="M27.028,10H15.281a1.316,1.316,0,0,0-1.312,1.313V29.688A1.316,1.316,0,0,0,15.281,31H29.719a1.316,1.316,0,0,0,1.313-1.312V13.642Zm.394,2.133,1.247,1.148H27.422ZM15.281,29.688V11.313H26.109v3.281h3.609V29.688Z" style="fill:#c5c5c5"/><rect x="16.594" y="19.372" width="11.813" height="1.313" style="fill:#c5c5c5"/><path d="M18.436,12.572a1.426,1.426,0,0,0-.558-.394,2.051,2.051,0,0,0-.82-.131h-1.28v3.839h1.28a1.66,1.66,0,0,0,1.313-.492,1.786,1.786,0,0,0,.361-.591,2.954,2.954,0,0,0,.1-.82,2.871,2.871,0,0,0-.1-.788A1.576,1.576,0,0,0,18.436,12.572Zm-.459,1.837a1.011,1.011,0,0,1-.164.394.775.775,0,0,1-.3.262,1.1,1.1,0,0,1-.492.1H16.6V12.736h.459a.872.872,0,0,1,.722.3,1.213,1.213,0,0,1,.164.361,2.55,2.55,0,0,1,.066.525A2.172,2.172,0,0,1,17.976,14.41Z" style="fill:#c5c5c5"/><path d="M21.979,12.572a1.369,1.369,0,0,0-.525-.427,1.711,1.711,0,0,0-.755-.164,1.983,1.983,0,0,0-.788.164,1.669,1.669,0,0,0-.525.427,2.176,2.176,0,0,0-.3.623,2.942,2.942,0,0,0,0,1.509,1.829,1.829,0,0,0,.3.623,1.127,1.127,0,0,0,.525.427,1.865,1.865,0,0,0,.788.164,1.417,1.417,0,0,0,1.214-.525,2.109,2.109,0,0,0,.427-1.444,2.8,2.8,0,0,0-.1-.755A1.334,1.334,0,0,0,21.979,12.572ZM21.29,14.9a.705.705,0,0,1-.623.328.643.643,0,0,1-.623-.328,1.871,1.871,0,0,1-.2-.952,1.79,1.79,0,0,1,.2-.952.806.806,0,0,1,1.247,0,1.871,1.871,0,0,1,.2.952A1.79,1.79,0,0,1,21.29,14.9Z" style="fill:#c5c5c5"/><path d="M24.7,14.869a.716.716,0,0,1-.131.164.686.686,0,0,1-.2.131.64.64,0,0,1-.263.033.575.575,0,0,1-.558-.3,1.79,1.79,0,0,1-.2-.952v-.262c0-.1.033-.2.033-.3.033-.1.033-.2.066-.263a.529.529,0,0,1,.131-.23.87.87,0,0,1,.2-.164.618.618,0,0,1,.263-.066.567.567,0,0,1,.427.164,1.135,1.135,0,0,1,.23.394l.755-.2a1.572,1.572,0,0,0-.23-.525,1.556,1.556,0,0,0-.328-.328,1.884,1.884,0,0,0-1.608-.033,1.545,1.545,0,0,0-.492.427,1.292,1.292,0,0,0-.164.656,2.692,2.692,0,0,0-.066.722,4.914,4.914,0,0,0,.066.722,1.788,1.788,0,0,0,.262.623,1.226,1.226,0,0,0,.492.427,1.711,1.711,0,0,0,.755.164,1.6,1.6,0,0,0,.919-.262,1.556,1.556,0,0,0,.328-.328,3.344,3.344,0,0,0,.263-.492l-.788-.2A.908.908,0,0,1,24.7,14.869Z" style="fill:#c5c5c5"/><rect x="16.594" y="27.805" width="8.203" height="1.313" style="fill:#c5c5c5"/><rect x="16.594" y="25.272" width="11.813" height="1.313" style="fill:#c5c5c5"/><rect x="16.594" y="22.272" width="11.813" height="1.313" style="fill:#c5c5c5"/><rect x="16.649" y="16.472" width="11.813" height="1.313" style="fill:#c5c5c5"/></svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
BIN
lisp/treemacs/icons/default/svgrepo/dir-git-closed.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
2
lisp/treemacs/icons/default/svgrepo/dir-git-closed.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_git</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#bf5e55"/><path d="M30.6,19.565,21.435,10.4a1.352,1.352,0,0,0-1.913,0l-1.9,1.9,2.415,2.415a1.606,1.606,0,0,1,2.034,2.047L24.4,19.091a1.607,1.607,0,1,1-.964.907L21.26,17.827V23.54a1.606,1.606,0,1,1-1.323-.047V17.727a1.61,1.61,0,0,1-.873-2.11l-2.381-2.381L10.4,19.522a1.353,1.353,0,0,0,0,1.913L19.565,30.6a1.353,1.353,0,0,0,1.913,0L30.6,21.478a1.353,1.353,0,0,0,0-1.913" style="fill:#dd4c35"/><path d="M17.619,12.3l2.415,2.415a1.606,1.606,0,0,1,2.034,2.047L24.4,19.091a1.607,1.607,0,1,1-.964.907L21.26,17.827V23.54a1.606,1.606,0,1,1-1.323-.047V17.727a1.61,1.61,0,0,1-.873-2.11l-2.381-2.381" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 941 B |
BIN
lisp/treemacs/icons/default/svgrepo/dir-git-open.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
2
lisp/treemacs/icons/default/svgrepo/dir-git-open.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_git_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#db847b"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#db847b"/><path d="M30.6,19.565,21.435,10.4a1.352,1.352,0,0,0-1.913,0l-1.9,1.9,2.415,2.415a1.606,1.606,0,0,1,2.034,2.047L24.4,19.091a1.607,1.607,0,1,1-.964.907L21.26,17.827V23.54a1.606,1.606,0,1,1-1.323-.047V17.727a1.61,1.61,0,0,1-.873-2.11l-2.381-2.381L10.4,19.522a1.353,1.353,0,0,0,0,1.913L19.565,30.6a1.353,1.353,0,0,0,1.913,0L30.6,21.478a1.353,1.353,0,0,0,0-1.913" style="fill:#dd4c35"/><path d="M17.619,12.3l2.415,2.415a1.606,1.606,0,0,1,2.034,2.047L24.4,19.091a1.607,1.607,0,1,1-.964.907L21.26,17.827V23.54a1.606,1.606,0,1,1-1.323-.047V17.727a1.61,1.61,0,0,1-.873-2.11l-2.381-2.381" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_github_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3v4H.5L4.3,26.5H29.5V5.5ZM20.2,7.6h7.1V9.7H19.2Zm5.5,6.1H6.6V11.8H27.4v7.626Z" style="fill:#bbb"/><path d="M31,20.5A10.5,10.5,0,1,1,20.5,10,10.5,10.5,0,0,1,31,20.5Z" style="fill:#ffffff;fill-rule:evenodd"/><path d="M23.013,27.6a2.505,2.505,0,0,0-.713-1.944c2.339-.26,4.794-1.148,4.794-5.181a4.051,4.051,0,0,0-1.079-2.818,3.772,3.772,0,0,0-.105-2.779s-.88-.282-2.884,1.077a9.939,9.939,0,0,0-5.258,0c-2.005-1.359-2.887-1.077-2.887-1.077a3.778,3.778,0,0,0-.1,2.779A4.057,4.057,0,0,0,13.7,20.47c0,4.023,2.451,4.924,4.783,5.189a2.248,2.248,0,0,0-.667,1.4,2.234,2.234,0,0,1-3.055-.873,2.209,2.209,0,0,0-1.609-1.082s-1.025-.013-.072.639a2.778,2.778,0,0,1,1.166,1.535s.616,2.043,3.537,1.408c0,.876.014,1.537.014,1.786a.606.606,0,0,1-.032.177,10.178,10.178,0,0,0,5.27,0A.606.606,0,0,1,23,30.476C23,30.132,23.013,29,23.013,27.6Z" style="fill:#333;fill-rule:evenodd"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
2
lisp/treemacs/icons/default/svgrepo/dir-github-open.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_github</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#9b9b9b"/><path d="M31,20.5A10.5,10.5,0,1,1,20.5,10,10.5,10.5,0,0,1,31,20.5Z" style="fill:#ffffff;fill-rule:evenodd"/><path d="M23.013,27.6a2.505,2.505,0,0,0-.713-1.944c2.339-.26,4.794-1.148,4.794-5.181a4.051,4.051,0,0,0-1.079-2.818,3.772,3.772,0,0,0-.105-2.779s-.88-.282-2.884,1.077a9.939,9.939,0,0,0-5.258,0c-2.005-1.359-2.887-1.077-2.887-1.077a3.778,3.778,0,0,0-.1,2.779A4.057,4.057,0,0,0,13.7,20.47c0,4.023,2.451,4.924,4.783,5.189a2.248,2.248,0,0,0-.667,1.4,2.234,2.234,0,0,1-3.055-.873,2.209,2.209,0,0,0-1.609-1.082s-1.025-.013-.072.639a2.778,2.778,0,0,1,1.166,1.535s.616,2.043,3.537,1.408c0,.876.014,1.537.014,1.786a.606.606,0,0,1-.032.177,10.178,10.178,0,0,0,5.27,0A.606.606,0,0,1,23,30.476C23,30.132,23.013,29,23.013,27.6Z" style="fill:#333;fill-rule:evenodd"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
lisp/treemacs/icons/default/svgrepo/dir-src-closed.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
2
lisp/treemacs/icons/default/svgrepo/dir-src-closed.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_src</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#14622a"/><path d="M19.146,30.989a.9.9,0,0,1-.207-.025,1.041,1.041,0,0,1-.726-1.213L20.922,15.32a1.037,1.037,0,0,1,.444-.683.894.894,0,0,1,.7-.122,1.043,1.043,0,0,1,.727,1.213L20.077,30.16a1.033,1.033,0,0,1-.442.681A.9.9,0,0,1,19.146,30.989Z" style="fill:#06cc14"/><path d="M24.578,28.944l-.068,0a.931.931,0,0,1-.668-.377,1.1,1.1,0,0,1,.1-1.419L28.6,22.595l-4.638-4.239a1.1,1.1,0,0,1-.141-1.416.937.937,0,0,1,.661-.4.9.9,0,0,1,.709.237l5.47,5a1.1,1.1,0,0,1,.144,1.416,1.061,1.061,0,0,1-.142.163L25.216,28.68A.916.916,0,0,1,24.578,28.944Z" style="fill:#06cc14"/><path d="M16.423,28.947a.914.914,0,0,1-.639-.267l-5.452-5.327A.9.9,0,0,1,10.2,23.2a1.094,1.094,0,0,1,.141-1.414l5.471-5a.881.881,0,0,1,.7-.238.941.941,0,0,1,.665.4,1.1,1.1,0,0,1-.14,1.417L12.4,22.6l4.659,4.551a1.093,1.093,0,0,1,.1,1.419.927.927,0,0,1-.669.377Z" style="fill:#06cc14"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
BIN
lisp/treemacs/icons/default/svgrepo/dir-src-open.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
2
lisp/treemacs/icons/default/svgrepo/dir-src-open.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_src_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#2a8243"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#2a8243"/><path d="M19.146,30.989a.9.9,0,0,1-.207-.025,1.041,1.041,0,0,1-.726-1.213L20.922,15.32a1.037,1.037,0,0,1,.444-.683.894.894,0,0,1,.7-.122,1.043,1.043,0,0,1,.727,1.213L20.077,30.16a1.033,1.033,0,0,1-.442.681A.9.9,0,0,1,19.146,30.989Z" style="fill:#06cc14"/><path d="M24.578,28.944l-.068,0a.931.931,0,0,1-.668-.377,1.1,1.1,0,0,1,.1-1.419L28.6,22.595l-4.638-4.239a1.1,1.1,0,0,1-.141-1.416.937.937,0,0,1,.661-.4.9.9,0,0,1,.709.237l5.47,5a1.1,1.1,0,0,1,.144,1.416,1.061,1.061,0,0,1-.142.163L25.216,28.68A.916.916,0,0,1,24.578,28.944Z" style="fill:#06cc14"/><path d="M16.423,28.947a.914.914,0,0,1-.639-.267l-5.452-5.327A.9.9,0,0,1,10.2,23.2a1.094,1.094,0,0,1,.141-1.414l5.471-5a.881.881,0,0,1,.7-.238.941.941,0,0,1,.665.4,1.1,1.1,0,0,1-.14,1.417L12.4,22.6l4.659,4.551a1.093,1.093,0,0,1,.1,1.419.927.927,0,0,1-.669.377Z" style="fill:#06cc14"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
BIN
lisp/treemacs/icons/default/svgrepo/dir-test-closed.png
Normal file
|
After Width: | Height: | Size: 26 KiB |
2
lisp/treemacs/icons/default/svgrepo/dir-test-closed.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_test</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#b70b0b"/><path d="M28.3,27.423c-1.729-.4-2.332-2.482-1.329-4.583a8.945,8.945,0,0,1,2.217-2.779l.314-.26.009.357a6.729,6.729,0,0,0,.748,2.425,14.092,14.092,0,0,1,.625,1.631,3.191,3.191,0,0,1-.073,1.958A2.67,2.67,0,0,1,29.7,27.259,2.794,2.794,0,0,1,28.3,27.423Zm.351-3.565c.124-.143.155-.332.164-1l.011-.825-.2.158a1.679,1.679,0,0,0-.635,1.4c.07.214.286.448.411.446A.514.514,0,0,0,28.651,23.858Z" style="fill:#fac6c5"/><path d="M13.124,30.945a3.852,3.852,0,0,1-3.031-4.563c.254-1.07.2-1.008,5.726-6.787l5.2-5.442.738.7.738.7-3,3.132-3,3.132,2.508-.054,2.508-.054,1.773-1.85,1.773-1.85.735.707.735.707-5.213,5.43c-4.783,4.982-5.257,5.452-5.743,5.692a3.889,3.889,0,0,1-2.452.393ZM27.786,18.461c-.138-.082-1.546-1.4-3.129-2.921l-2.879-2.772-.009-.421a.863.863,0,0,1,.194-.673A.99.99,0,0,1,23,11.3a68.841,68.841,0,0,1,6.277,6.023,1,1,0,0,1-1.492,1.133Z" style="fill:#fac6c5"/><path d="M11.578,26.851a2.1,2.1,0,0,0,2.579,2.614c.191-.2,2.407-2.515,7.387-7.737-2.505.054-2.475-.055-4.98,0C11.549,26.923,11.45,26.885,11.578,26.851Z" style="fill:#fac6c5"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
BIN
lisp/treemacs/icons/default/svgrepo/dir-test-open.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
2
lisp/treemacs/icons/default/svgrepo/dir-test-open.svg
Normal file
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><title>folder_type_test_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#d32626"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#d32626"/><path d="M28.3,27.423c-1.729-.4-2.332-2.482-1.329-4.583a8.945,8.945,0,0,1,2.217-2.779l.314-.26.009.357a6.729,6.729,0,0,0,.748,2.425,14.092,14.092,0,0,1,.625,1.631,3.191,3.191,0,0,1-.073,1.958A2.67,2.67,0,0,1,29.7,27.259,2.794,2.794,0,0,1,28.3,27.423Zm.351-3.565c.124-.143.155-.332.164-1l.011-.825-.2.158a1.679,1.679,0,0,0-.635,1.4c.07.214.286.448.411.446A.514.514,0,0,0,28.651,23.858Z" style="fill:#fac6c5"/><path d="M13.124,30.945a3.852,3.852,0,0,1-3.031-4.563c.254-1.07.2-1.008,5.726-6.787l5.2-5.442.738.7.738.7-3,3.132-3,3.132,2.508-.054,2.508-.054,1.773-1.85,1.773-1.85.735.707.735.707-5.213,5.43c-4.783,4.982-5.257,5.452-5.743,5.692a3.889,3.889,0,0,1-2.452.393ZM27.786,18.461c-.138-.082-1.546-1.4-3.129-2.921l-2.879-2.772-.009-.421a.863.863,0,0,1,.194-.673A.99.99,0,0,1,23,11.3a68.841,68.841,0,0,1,6.277,6.023,1,1,0,0,1-1.492,1.133Z" style="fill:#fac6c5"/><path d="M11.578,26.851a2.1,2.1,0,0,0,2.579,2.614c.191-.2,2.407-2.515,7.387-7.737-2.505.054-2.475-.055-4.98,0C11.549,26.923,11.45,26.885,11.578,26.851Z" style="fill:#fac6c5"/></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
BIN
lisp/treemacs/icons/default/vsc/dir-binary-closed.png
Normal file
|
After Width: | Height: | Size: 1001 B |
1
lisp/treemacs/icons/default/vsc/dir-binary-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_binary</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#c15356"/><polygon points="25.742 9.9 13.441 9.9 13.441 30.9 30.916 30.9 30.916 15.15 25.742 9.9" style="fill:#9f4246"/><polygon points="29.577 29.663 14.851 29.663 14.851 11.138 24.906 11.138 29.656 15.887 29.656 29.663 29.577 29.663" style="fill:#fff"/><path d="M18.652,19.945c1.188,0,1.922-1.1,1.922-2.747,0-1.609-.6-2.582-1.8-2.582s-1.929,1.1-1.929,2.747C16.846,18.975,17.448,19.945,18.652,19.945ZM17.72,17.2c0-1.172.322-1.84.99-1.84.487,0,.784.413.916,1.105l-1.9.982A2.4,2.4,0,0,1,17.72,17.2Zm1,2c-.478,0-.784-.4-.916-1.073l1.9-.982v.215C19.7,18.534,19.387,19.2,18.718,19.2Z" style="fill:#9f4246"/><polygon points="26.421 19.835 26.496 19.068 25.258 19.068 25.258 14.558 24.376 14.633 24.376 15.233 23.105 15.365 23.122 16.033 24.376 16 24.376 19.069 22.989 19.069 22.989 19.837 26.421 19.835" style="fill:#9f4246"/><polygon points="20.533 26.96 20.608 26.193 19.371 26.193 19.371 21.682 18.488 21.757 18.488 22.357 17.218 22.489 17.234 23.158 18.488 23.125 18.488 26.194 17.102 26.194 17.102 26.962 20.533 26.96" style="fill:#9f4246"/><path d="M24.615,27.067c1.188,0,1.922-1.1,1.922-2.747,0-1.609-.6-2.582-1.8-2.582s-1.93,1.1-1.93,2.747c0,1.611.6,2.585,1.808,2.585Zm-.932-2.745c0-1.172.322-1.84.99-1.84.487,0,.784.412.916,1.105l-1.9.982A2.4,2.4,0,0,1,23.683,24.322Zm1,2c-.479,0-.784-.4-.916-1.073l1.9-.982v.214C25.663,25.659,25.349,26.325,24.681,26.325Z" style="fill:#9f4246"/></svg>
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
BIN
lisp/treemacs/icons/default/vsc/dir-binary-open.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
1
lisp/treemacs/icons/default/vsc/dir-binary-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_binary_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#dd7a7d"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#dd7a7d"/><polygon points="25.742 9.9 13.441 9.9 13.441 30.9 30.916 30.9 30.916 15.15 25.742 9.9" style="fill:#9f4246"/><polygon points="29.577 29.663 14.851 29.663 14.851 11.138 24.906 11.138 29.656 15.887 29.656 29.663 29.577 29.663" style="fill:#fff"/><path d="M18.652,19.945c1.188,0,1.922-1.1,1.922-2.747,0-1.609-.6-2.582-1.8-2.582s-1.929,1.1-1.929,2.747C16.846,18.975,17.448,19.945,18.652,19.945ZM17.72,17.2c0-1.172.322-1.84.99-1.84.487,0,.784.413.916,1.105l-1.9.982A2.4,2.4,0,0,1,17.72,17.2Zm1,2c-.478,0-.784-.4-.916-1.073l1.9-.982v.215C19.7,18.534,19.387,19.2,18.718,19.2Z" style="fill:#9f4246"/><polygon points="26.421 19.835 26.496 19.068 25.258 19.068 25.258 14.558 24.376 14.633 24.376 15.233 23.105 15.365 23.122 16.033 24.376 16 24.376 19.069 22.989 19.069 22.989 19.837 26.421 19.835" style="fill:#9f4246"/><polygon points="20.533 26.96 20.608 26.193 19.371 26.193 19.371 21.682 18.488 21.757 18.488 22.357 17.218 22.489 17.234 23.158 18.488 23.125 18.488 26.194 17.102 26.194 17.102 26.962 20.533 26.96" style="fill:#9f4246"/><path d="M24.615,27.067c1.188,0,1.922-1.1,1.922-2.747,0-1.609-.6-2.582-1.8-2.582s-1.93,1.1-1.93,2.747c0,1.611.6,2.585,1.808,2.585Zm-.932-2.745c0-1.172.322-1.84.99-1.84.487,0,.784.412.916,1.105l-1.9.982A2.4,2.4,0,0,1,23.683,24.322Zm1,2c-.479,0-.784-.4-.916-1.073l1.9-.982v.214C25.663,25.659,25.349,26.325,24.681,26.325Z" style="fill:#9f4246"/></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
BIN
lisp/treemacs/icons/default/vsc/dir-docs-closed.png
Normal file
|
After Width: | Height: | Size: 982 B |
1
lisp/treemacs/icons/default/vsc/dir-docs-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_docs</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#c05454"/><path d="M15.266,11.311V29.686H29.715v-15.1h-3.6V11.311H15.266Zm12.146.813.008,1.158,1.252,0-1.26-1.16Z" style="fill:gray"/><path d="M27.028,10H15.281a1.316,1.316,0,0,0-1.312,1.313V29.688A1.316,1.316,0,0,0,15.281,31H29.719a1.316,1.316,0,0,0,1.313-1.312V13.642Zm.394,2.133,1.247,1.148H27.422ZM15.281,29.688V11.313H26.109v3.281h3.609V29.688Z" style="fill:#c5c5c5"/><rect x="16.594" y="19.372" width="11.813" height="1.313" style="fill:#c5c5c5"/><path d="M18.436,12.572a1.426,1.426,0,0,0-.558-.394,2.051,2.051,0,0,0-.82-.131h-1.28v3.839h1.28a1.66,1.66,0,0,0,1.313-.492,1.786,1.786,0,0,0,.361-.591,2.954,2.954,0,0,0,.1-.82,2.871,2.871,0,0,0-.1-.788A1.576,1.576,0,0,0,18.436,12.572Zm-.459,1.837a1.011,1.011,0,0,1-.164.394.775.775,0,0,1-.3.262,1.1,1.1,0,0,1-.492.1H16.6V12.736h.459a.872.872,0,0,1,.722.3,1.213,1.213,0,0,1,.164.361,2.55,2.55,0,0,1,.066.525A2.172,2.172,0,0,1,17.976,14.41Z" style="fill:#c5c5c5"/><path d="M21.979,12.572a1.369,1.369,0,0,0-.525-.427,1.711,1.711,0,0,0-.755-.164,1.983,1.983,0,0,0-.788.164,1.669,1.669,0,0,0-.525.427,2.176,2.176,0,0,0-.3.623,2.942,2.942,0,0,0,0,1.509,1.829,1.829,0,0,0,.3.623,1.127,1.127,0,0,0,.525.427,1.865,1.865,0,0,0,.788.164,1.417,1.417,0,0,0,1.214-.525,2.109,2.109,0,0,0,.427-1.444,2.8,2.8,0,0,0-.1-.755A1.334,1.334,0,0,0,21.979,12.572ZM21.29,14.9a.705.705,0,0,1-.623.328.643.643,0,0,1-.623-.328,1.871,1.871,0,0,1-.2-.952,1.79,1.79,0,0,1,.2-.952.806.806,0,0,1,1.247,0,1.871,1.871,0,0,1,.2.952A1.79,1.79,0,0,1,21.29,14.9Z" style="fill:#c5c5c5"/><path d="M24.7,14.869a.716.716,0,0,1-.131.164.686.686,0,0,1-.2.131.64.64,0,0,1-.263.033.575.575,0,0,1-.558-.3,1.79,1.79,0,0,1-.2-.952v-.262c0-.1.033-.2.033-.3.033-.1.033-.2.066-.263a.529.529,0,0,1,.131-.23.87.87,0,0,1,.2-.164.618.618,0,0,1,.263-.066.567.567,0,0,1,.427.164,1.135,1.135,0,0,1,.23.394l.755-.2a1.572,1.572,0,0,0-.23-.525,1.556,1.556,0,0,0-.328-.328,1.884,1.884,0,0,0-1.608-.033,1.545,1.545,0,0,0-.492.427,1.292,1.292,0,0,0-.164.656,2.692,2.692,0,0,0-.066.722,4.914,4.914,0,0,0,.066.722,1.788,1.788,0,0,0,.262.623,1.226,1.226,0,0,0,.492.427,1.711,1.711,0,0,0,.755.164,1.6,1.6,0,0,0,.919-.262,1.556,1.556,0,0,0,.328-.328,3.344,3.344,0,0,0,.263-.492l-.788-.2A.908.908,0,0,1,24.7,14.869Z" style="fill:#c5c5c5"/><rect x="16.594" y="27.805" width="8.203" height="1.313" style="fill:#c5c5c5"/><rect x="16.594" y="25.272" width="11.813" height="1.313" style="fill:#c5c5c5"/><rect x="16.594" y="22.272" width="11.813" height="1.313" style="fill:#c5c5c5"/><rect x="16.649" y="16.472" width="11.813" height="1.313" style="fill:#c5c5c5"/></svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
BIN
lisp/treemacs/icons/default/vsc/dir-docs-open.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
1
lisp/treemacs/icons/default/vsc/dir-docs-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_docs_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#dc7a7a"/><polygon points="4.3 26.5 29.5 26.5 25.7 13.7 25.7 13.7 0.5 13.7 4.3 26.5" style="fill:#dc7a7a"/><path d="M15.266,11.311V29.686H29.715v-15.1h-3.6V11.311H15.266Zm12.146.813.008,1.158,1.252,0-1.26-1.16Z" style="fill:gray"/><path d="M27.028,10H15.281a1.316,1.316,0,0,0-1.312,1.313V29.688A1.316,1.316,0,0,0,15.281,31H29.719a1.316,1.316,0,0,0,1.313-1.312V13.642Zm.394,2.133,1.247,1.148H27.422ZM15.281,29.688V11.313H26.109v3.281h3.609V29.688Z" style="fill:#c5c5c5"/><rect x="16.594" y="19.372" width="11.813" height="1.313" style="fill:#c5c5c5"/><path d="M18.436,12.572a1.426,1.426,0,0,0-.558-.394,2.051,2.051,0,0,0-.82-.131h-1.28v3.839h1.28a1.66,1.66,0,0,0,1.313-.492,1.786,1.786,0,0,0,.361-.591,2.954,2.954,0,0,0,.1-.82,2.871,2.871,0,0,0-.1-.788A1.576,1.576,0,0,0,18.436,12.572Zm-.459,1.837a1.011,1.011,0,0,1-.164.394.775.775,0,0,1-.3.262,1.1,1.1,0,0,1-.492.1H16.6V12.736h.459a.872.872,0,0,1,.722.3,1.213,1.213,0,0,1,.164.361,2.55,2.55,0,0,1,.066.525A2.172,2.172,0,0,1,17.976,14.41Z" style="fill:#c5c5c5"/><path d="M21.979,12.572a1.369,1.369,0,0,0-.525-.427,1.711,1.711,0,0,0-.755-.164,1.983,1.983,0,0,0-.788.164,1.669,1.669,0,0,0-.525.427,2.176,2.176,0,0,0-.3.623,2.942,2.942,0,0,0,0,1.509,1.829,1.829,0,0,0,.3.623,1.127,1.127,0,0,0,.525.427,1.865,1.865,0,0,0,.788.164,1.417,1.417,0,0,0,1.214-.525,2.109,2.109,0,0,0,.427-1.444,2.8,2.8,0,0,0-.1-.755A1.334,1.334,0,0,0,21.979,12.572ZM21.29,14.9a.705.705,0,0,1-.623.328.643.643,0,0,1-.623-.328,1.871,1.871,0,0,1-.2-.952,1.79,1.79,0,0,1,.2-.952.806.806,0,0,1,1.247,0,1.871,1.871,0,0,1,.2.952A1.79,1.79,0,0,1,21.29,14.9Z" style="fill:#c5c5c5"/><path d="M24.7,14.869a.716.716,0,0,1-.131.164.686.686,0,0,1-.2.131.64.64,0,0,1-.263.033.575.575,0,0,1-.558-.3,1.79,1.79,0,0,1-.2-.952v-.262c0-.1.033-.2.033-.3.033-.1.033-.2.066-.263a.529.529,0,0,1,.131-.23.87.87,0,0,1,.2-.164.618.618,0,0,1,.263-.066.567.567,0,0,1,.427.164,1.135,1.135,0,0,1,.23.394l.755-.2a1.572,1.572,0,0,0-.23-.525,1.556,1.556,0,0,0-.328-.328,1.884,1.884,0,0,0-1.608-.033,1.545,1.545,0,0,0-.492.427,1.292,1.292,0,0,0-.164.656,2.692,2.692,0,0,0-.066.722,4.914,4.914,0,0,0,.066.722,1.788,1.788,0,0,0,.262.623,1.226,1.226,0,0,0,.492.427,1.711,1.711,0,0,0,.755.164,1.6,1.6,0,0,0,.919-.262,1.556,1.556,0,0,0,.328-.328,3.344,3.344,0,0,0,.263-.492l-.788-.2A.908.908,0,0,1,24.7,14.869Z" style="fill:#c5c5c5"/><rect x="16.594" y="27.805" width="8.203" height="1.313" style="fill:#c5c5c5"/><rect x="16.594" y="25.272" width="11.813" height="1.313" style="fill:#c5c5c5"/><rect x="16.594" y="22.272" width="11.813" height="1.313" style="fill:#c5c5c5"/><rect x="16.649" y="16.472" width="11.813" height="1.313" style="fill:#c5c5c5"/></svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
1
lisp/treemacs/icons/default/vsc/dir-git-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_git</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#bf5e55"/><path d="M30.6,19.565,21.435,10.4a1.352,1.352,0,0,0-1.913,0l-1.9,1.9,2.415,2.415a1.606,1.606,0,0,1,2.034,2.047L24.4,19.091a1.607,1.607,0,1,1-.964.907L21.26,17.827V23.54a1.606,1.606,0,1,1-1.323-.047V17.727a1.61,1.61,0,0,1-.873-2.11l-2.381-2.381L10.4,19.522a1.353,1.353,0,0,0,0,1.913L19.565,30.6a1.353,1.353,0,0,0,1.913,0L30.6,21.478a1.353,1.353,0,0,0,0-1.913" style="fill:#dd4c35"/><path d="M17.619,12.3l2.415,2.415a1.606,1.606,0,0,1,2.034,2.047L24.4,19.091a1.607,1.607,0,1,1-.964.907L21.26,17.827V23.54a1.606,1.606,0,1,1-1.323-.047V17.727a1.61,1.61,0,0,1-.873-2.11l-2.381-2.381" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 793 B |
1
lisp/treemacs/icons/default/vsc/dir-git-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_git_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#db847b"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#db847b"/><path d="M30.6,19.565,21.435,10.4a1.352,1.352,0,0,0-1.913,0l-1.9,1.9,2.415,2.415a1.606,1.606,0,0,1,2.034,2.047L24.4,19.091a1.607,1.607,0,1,1-.964.907L21.26,17.827V23.54a1.606,1.606,0,1,1-1.323-.047V17.727a1.61,1.61,0,0,1-.873-2.11l-2.381-2.381L10.4,19.522a1.353,1.353,0,0,0,0,1.913L19.565,30.6a1.353,1.353,0,0,0,1.913,0L30.6,21.478a1.353,1.353,0,0,0,0-1.913" style="fill:#dd4c35"/><path d="M17.619,12.3l2.415,2.415a1.606,1.606,0,0,1,2.034,2.047L24.4,19.091a1.607,1.607,0,1,1-.964.907L21.26,17.827V23.54a1.606,1.606,0,1,1-1.323-.047V17.727a1.61,1.61,0,0,1-.873-2.11l-2.381-2.381" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 913 B |
BIN
lisp/treemacs/icons/default/vsc/dir-github-closed.png
Normal file
|
After Width: | Height: | Size: 883 B |
1
lisp/treemacs/icons/default/vsc/dir-github-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_github</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#9b9b9b"/><path d="M31,20.5A10.5,10.5,0,1,1,20.5,10,10.5,10.5,0,0,1,31,20.5Z" style="fill:#fff;fill-rule:evenodd"/><path d="M23.013,27.6a2.505,2.505,0,0,0-.713-1.944c2.339-.26,4.794-1.148,4.794-5.181a4.051,4.051,0,0,0-1.079-2.818,3.772,3.772,0,0,0-.105-2.779s-.88-.282-2.884,1.077a9.939,9.939,0,0,0-5.258,0c-2.005-1.359-2.887-1.077-2.887-1.077a3.778,3.778,0,0,0-.1,2.779A4.057,4.057,0,0,0,13.7,20.47c0,4.023,2.451,4.924,4.783,5.189a2.248,2.248,0,0,0-.667,1.4,2.234,2.234,0,0,1-3.055-.873,2.209,2.209,0,0,0-1.609-1.082s-1.025-.013-.072.639a2.778,2.778,0,0,1,1.166,1.535s.616,2.043,3.537,1.408c0,.876.014,1.537.014,1.786a.606.606,0,0,1-.032.177,10.178,10.178,0,0,0,5.27,0A.606.606,0,0,1,23,30.476C23,30.132,23.013,29,23.013,27.6Z" style="fill:#333;fill-rule:evenodd"/></svg>
|
||||
|
After Width: | Height: | Size: 954 B |
BIN
lisp/treemacs/icons/default/vsc/dir-github-open.png
Normal file
|
After Width: | Height: | Size: 977 B |
1
lisp/treemacs/icons/default/vsc/dir-github-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_github_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3v4H.5L4.3,26.5H29.5V5.5ZM20.2,7.6h7.1V9.7H19.2Zm5.5,6.1H6.6V11.8H27.4v7.626Z" style="fill:#bbb"/><path d="M31,20.5A10.5,10.5,0,1,1,20.5,10,10.5,10.5,0,0,1,31,20.5Z" style="fill:#fff;fill-rule:evenodd"/><path d="M23.013,27.6a2.505,2.505,0,0,0-.713-1.944c2.339-.26,4.794-1.148,4.794-5.181a4.051,4.051,0,0,0-1.079-2.818,3.772,3.772,0,0,0-.105-2.779s-.88-.282-2.884,1.077a9.939,9.939,0,0,0-5.258,0c-2.005-1.359-2.887-1.077-2.887-1.077a3.778,3.778,0,0,0-.1,2.779A4.057,4.057,0,0,0,13.7,20.47c0,4.023,2.451,4.924,4.783,5.189a2.248,2.248,0,0,0-.667,1.4,2.234,2.234,0,0,1-3.055-.873,2.209,2.209,0,0,0-1.609-1.082s-1.025-.013-.072.639a2.778,2.778,0,0,1,1.166,1.535s.616,2.043,3.537,1.408c0,.876.014,1.537.014,1.786a.606.606,0,0,1-.032.177,10.178,10.178,0,0,0,5.27,0A.606.606,0,0,1,23,30.476C23,30.132,23.013,29,23.013,27.6Z" style="fill:#333;fill-rule:evenodd"/></svg>
|
||||
|
After Width: | Height: | Size: 995 B |
BIN
lisp/treemacs/icons/default/vsc/dir-images-closed.png
Normal file
|
After Width: | Height: | Size: 829 B |
1
lisp/treemacs/icons/default/vsc/dir-images-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_images</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#55bfa0"/><path d="M31,15.778Q31,23.39,31,31H10q0-7.612,0-15.223H31" style="fill:#2dcc9f"/><path d="M26.674,17.8a1.653,1.653,0,1,0,.845.467,1.659,1.659,0,0,0-.845-.467" style="fill:#fff"/><path d="M22.083,26.467,18,20.786l-6.062,8.428h8.174q.987-1.374,1.976-2.747" style="fill:#fff"/><path d="M25.043,23.391q-2.095,2.912-4.188,5.824h8.377Q27.138,26.3,25.043,23.391Z" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 574 B |
BIN
lisp/treemacs/icons/default/vsc/dir-images-open.png
Normal file
|
After Width: | Height: | Size: 999 B |
1
lisp/treemacs/icons/default/vsc/dir-images-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_images_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#7bdbc0"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#7bdbc0"/><path d="M31,15.778Q31,23.39,31,31H10q0-7.612,0-15.223H31" style="fill:#2dcc9f"/><path d="M26.674,17.8a1.653,1.653,0,1,0,.845.467,1.659,1.659,0,0,0-.845-.467" style="fill:#fff"/><path d="M22.083,26.467,18,20.786l-6.062,8.428h8.174q.987-1.374,1.976-2.747" style="fill:#fff"/><path d="M25.043,23.391q-2.095,2.912-4.188,5.824h8.377Q27.138,26.3,25.043,23.391Z" style="fill:#fff"/></svg>
|
||||
|
After Width: | Height: | Size: 694 B |
BIN
lisp/treemacs/icons/default/vsc/dir-private-closed.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
1
lisp/treemacs/icons/default/vsc/dir-private-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_private</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#913e4e"/><path d="M20.4,10A10.5,10.5,0,1,0,30.9,20.5,10.5,10.5,0,0,0,20.4,10Zm0,18.4A7.8,7.8,0,0,1,14,16L25,27A8.555,8.555,0,0,1,20.4,28.4Zm6.4-3.3-11-11a7.964,7.964,0,0,1,11,1.8A7.8,7.8,0,0,1,26.8,25.1Z" style="fill:#d80027"/></svg>
|
||||
|
After Width: | Height: | Size: 417 B |
BIN
lisp/treemacs/icons/default/vsc/dir-private-open.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
1
lisp/treemacs/icons/default/vsc/dir-private-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_private_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#a76571"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#a76571"/><path d="M20.4,10A10.5,10.5,0,1,0,30.9,20.5,10.5,10.5,0,0,0,20.4,10Zm0,18.375a7.862,7.862,0,0,1-6.41-12.432L24.958,26.911A7.826,7.826,0,0,1,20.4,28.375Zm6.411-3.318L15.843,14.09A7.862,7.862,0,0,1,26.811,25.057Z" style="fill:#d80027"/></svg>
|
||||
|
After Width: | Height: | Size: 553 B |
BIN
lisp/treemacs/icons/default/vsc/dir-public-closed.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
1
lisp/treemacs/icons/default/vsc/dir-public-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_public</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#00a23c"/><path d="M22.6,16.3a3.787,3.787,0,0,1,1.8,2.8,3.048,3.048,0,1,0-1.8-2.8Zm-2,6.3a3.1,3.1,0,1,0-3.1-3.1h0A3.116,3.116,0,0,0,20.6,22.6Zm1.3.2H19.3a3.9,3.9,0,0,0-3.9,3.9V30h0l.2.1A16.106,16.106,0,0,0,21,31a9.638,9.638,0,0,0,4.7-.9l.2-.1h0V26.8A4.148,4.148,0,0,0,21.9,22.8ZM27,19.6H24.4a3.225,3.225,0,0,1-1.2,2.6,4.621,4.621,0,0,1,3.3,4.5v1a9.782,9.782,0,0,0,4.1-.9l.2-.1h0V23.5A3.82,3.82,0,0,0,27,19.6Zm-11.8-.2a3.022,3.022,0,0,0,1.6-.5,3.71,3.71,0,0,1,1.4-2.4v-.2a3.1,3.1,0,0,0-6.2,0,3.272,3.272,0,0,0,3.2,3.1Zm2.7,2.9a4.2,4.2,0,0,1-1.2-2.6H13.8a3.9,3.9,0,0,0-3.9,3.9v3.2h0l.2.1a16.28,16.28,0,0,0,4.4.8v-1a4.81,4.81,0,0,1,3.4-4.4Z" style="fill:#aaffa2"/></svg>
|
||||
|
After Width: | Height: | Size: 849 B |
BIN
lisp/treemacs/icons/default/vsc/dir-public-open.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
1
lisp/treemacs/icons/default/vsc/dir-public-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_public_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#33b563"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#33b563"/><path d="M22.573,16.294a3.816,3.816,0,0,1,1.776,2.835,3.079,3.079,0,1,0-1.776-2.835ZM20.555,22.6a3.08,3.08,0,1,0-3.08-3.08h0A3.08,3.08,0,0,0,20.555,22.6Zm1.306.21H19.248A3.948,3.948,0,0,0,15.3,26.753v3.2l.008.05.22.069a17.95,17.95,0,0,0,5.362.865,11.007,11.007,0,0,0,4.682-.879l.206-.1H25.8v-3.2A3.947,3.947,0,0,0,21.861,22.81Zm5.1-3.179h-2.6a3.8,3.8,0,0,1-1.171,2.644,4.686,4.686,0,0,1,3.347,4.484v.985a10.612,10.612,0,0,0,4.133-.868l.206-.1H30.9v-3.2a3.948,3.948,0,0,0-3.943-3.946Zm-11.806-.21a3.059,3.059,0,0,0,1.638-.475,3.812,3.812,0,0,1,1.433-2.431c0-.058.009-.115.009-.173a3.08,3.08,0,1,0-3.081,3.079h0Zm2.766,2.853a3.8,3.8,0,0,1-1.171-2.629c-.1-.007-.191-.015-.289-.015H13.843A3.948,3.948,0,0,0,9.9,23.573v3.2l.008.049.22.069a18.489,18.489,0,0,0,4.441.835v-.965a4.687,4.687,0,0,1,3.348-4.487Z" style="fill:#aaffa2"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
lisp/treemacs/icons/default/vsc/dir-services-closed.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
1
lisp/treemacs/icons/default/vsc/dir-services-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><radialGradient id="a" cx="20.365" cy="6.269" r="2.721" gradientTransform="matrix(-0.148, 0.989, 1.059, 0.158, 11.812, -5.692)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#bedcdc"/><stop offset="0.5" stop-color="#8e9e9e" stop-opacity="0.74"/><stop offset="1" stop-color="#404f5c" stop-opacity="0.84"/></radialGradient><radialGradient id="b" cx="6.566" cy="14.644" r="3.9" gradientTransform="matrix(-0.148, 0.989, 1.059, 0.158, 9.451, 15.181)" xlink:href="#a"/></defs><title>folder_type_services</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#55a1bf"/><polygon points="13.886 12.006 12.083 13.809 11.182 12.006 12.083 11.105 13.886 12.006" style="fill:silver"/><polygon points="16.772 11.912 14.221 11.912 14.859 10 16.133 10 16.772 11.912" style="fill:silver"/><polygon points="18.877 13.886 17.074 12.083 18.877 11.182 19.779 12.083 18.877 13.886" style="fill:silver"/><polygon points="18.971 16.772 18.971 14.221 20.883 14.859 20.883 16.133 18.971 16.772" style="fill:silver"/><polygon points="16.997 18.877 18.8 17.074 19.701 18.877 18.8 19.779 16.997 18.877" style="fill:silver"/><polygon points="14.112 18.971 16.662 18.971 16.025 20.883 14.75 20.883 14.112 18.971" style="fill:silver"/><polygon points="12.006 16.997 13.809 18.8 12.006 19.701 11.105 18.8 12.006 16.997" style="fill:silver"/><polygon points="11.912 14.112 11.912 16.662 10 16.025 10 14.75 11.912 14.112" style="fill:silver"/><path d="M11.663,15.442a3.778,3.778,0,1,1,1.107,2.672A3.778,3.778,0,0,1,11.663,15.442Zm3.779,1.425a1.425,1.425,0,1,0-1.008-.418A1.425,1.425,0,0,0,15.442,16.867Z" style="fill:silver"/><path d="M15.5,18.939A3.5,3.5,0,1,0,11.945,15.5h0A3.5,3.5,0,0,0,15.5,18.939Zm-.113-6.457a2.96,2.96,0,1,1-2.907,3.012h0A2.961,2.961,0,0,1,15.39,12.482Z" style="fill:#a9a9a9"/><path d="M15.489,18.162a2.721,2.721,0,1,0-2.767-2.673h0A2.72,2.72,0,0,0,15.489,18.162Zm-.075-4.275a1.555,1.555,0,1,1-1.528,1.583,1.555,1.555,0,0,1,1.528-1.583Z" style="fill:url(#a)"/><path d="M15.47,17a1.555,1.555,0,1,0-1.583-1.526h0A1.555,1.555,0,0,0,15.47,17Zm-.051-2.87a1.316,1.316,0,1,1-1.292,1.339h0a1.316,1.316,0,0,1,1.292-1.337Z" style="fill:#a9a9a9"/><polygon points="27.572 19.763 25.866 18.816 26.964 17.64 27.988 18.208 27.572 19.763" style="fill:silver"/><polygon points="29.208 22.119 28.203 20.447 29.742 19.977 30.345 20.981 29.208 22.119" style="fill:silver"/><polygon points="29.446 24.978 29.412 23.027 30.98 23.39 31 24.56 29.446 24.978" style="fill:silver"/><polygon points="28.223 27.572 29.169 25.866 30.345 26.964 29.778 27.988 28.223 27.572" style="fill:silver"/><polygon points="25.866 29.208 27.539 28.203 28.008 29.742 27.005 30.345 25.866 29.208" style="fill:silver"/><polygon points="23.007 29.446 24.959 29.412 24.596 30.98 23.425 31 23.007 29.446" style="fill:silver"/><polygon points="20.413 28.223 22.119 29.169 21.021 30.345 19.997 29.778 20.413 28.223" style="fill:silver"/><polygon points="18.777 25.866 19.782 27.539 18.243 28.008 17.64 27.005 18.777 25.866" style="fill:silver"/><polygon points="18.539 23.007 18.573 24.959 17.006 24.596 16.985 23.425 18.539 23.007" style="fill:silver"/><polygon points="19.763 20.413 18.816 22.119 17.64 21.021 18.208 19.997 19.763 20.413" style="fill:silver"/><polygon points="22.119 18.777 20.447 19.782 19.977 18.243 20.981 17.64 22.119 18.777" style="fill:silver"/><polygon points="24.978 18.539 23.027 18.573 23.39 17.006 24.56 16.985 24.978 18.539" style="fill:silver"/><path d="M23.9,18.372a5.626,5.626,0,1,1-3.946,1.716A5.625,5.625,0,0,1,23.9,18.372ZM21.883,24.03a2.112,2.112,0,1,0,.592-1.5A2.11,2.11,0,0,0,21.883,24.03Z" style="fill:silver"/><path d="M24.081,29.045a5.053,5.053,0,1,0-5.14-4.964,5.054,5.054,0,0,0,5.14,4.964Zm-.163-9.327a4.275,4.275,0,1,1-4.2,4.35,4.275,4.275,0,0,1,4.2-4.35Z" style="fill:#a9a9a9"/><path d="M24.061,27.893a3.9,3.9,0,1,0-3.967-3.832,3.9,3.9,0,0,0,3.967,3.832Zm-.105-6.027a2.128,2.128,0,1,1-2.09,2.164h0a2.127,2.127,0,0,1,2.089-2.164Z" style="fill:url(#b)"/><path d="M24.033,26.324a2.331,2.331,0,1,0-2.372-2.291,2.331,2.331,0,0,0,2.372,2.291Zm-.075-4.3a1.973,1.973,0,1,1-1.938,2.007,1.972,1.972,0,0,1,1.938-2.007Z" style="fill:#a9a9a9"/></svg>
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
BIN
lisp/treemacs/icons/default/vsc/dir-services-open.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
1
lisp/treemacs/icons/default/vsc/dir-services-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32"><defs><radialGradient id="a" cx="20.365" cy="6.269" r="2.721" gradientTransform="matrix(-0.148, 0.989, 1.059, 0.158, 11.812, -5.692)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#bedcdc"/><stop offset="0.5" stop-color="#8e9e9e" stop-opacity="0.74"/><stop offset="1" stop-color="#404f5c" stop-opacity="0.84"/></radialGradient><radialGradient id="b" cx="6.566" cy="14.644" r="3.9" gradientTransform="matrix(-0.148, 0.989, 1.059, 0.158, 9.451, 15.181)" xlink:href="#a"/></defs><title>folder_type_services_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3v4H.5L4.3,26.5H29.5V5.5ZM20.2,7.6h7.1V9.7H19.2Zm5.5,6.1H6.6V11.8H27.4v7.626Z" style="fill:#7bbedb"/><polygon points="13.886 12.006 12.083 13.809 11.182 12.006 12.083 11.105 13.886 12.006" style="fill:silver"/><polygon points="16.772 11.912 14.221 11.912 14.859 10 16.133 10 16.772 11.912" style="fill:silver"/><polygon points="18.877 13.886 17.074 12.083 18.877 11.182 19.779 12.083 18.877 13.886" style="fill:silver"/><polygon points="18.971 16.772 18.971 14.221 20.883 14.859 20.883 16.133 18.971 16.772" style="fill:silver"/><polygon points="16.997 18.877 18.8 17.074 19.701 18.877 18.8 19.779 16.997 18.877" style="fill:silver"/><polygon points="14.112 18.971 16.662 18.971 16.025 20.883 14.75 20.883 14.112 18.971" style="fill:silver"/><polygon points="12.006 16.997 13.809 18.8 12.006 19.701 11.105 18.8 12.006 16.997" style="fill:silver"/><polygon points="11.912 14.112 11.912 16.662 10 16.025 10 14.75 11.912 14.112" style="fill:silver"/><path d="M11.663,15.442a3.778,3.778,0,1,1,1.107,2.672A3.778,3.778,0,0,1,11.663,15.442Zm3.779,1.425a1.425,1.425,0,1,0-1.008-.418A1.425,1.425,0,0,0,15.442,16.867Z" style="fill:silver"/><path d="M15.5,18.939A3.5,3.5,0,1,0,11.945,15.5h0A3.5,3.5,0,0,0,15.5,18.939Zm-.113-6.457a2.96,2.96,0,1,1-2.907,3.012h0A2.961,2.961,0,0,1,15.39,12.482Z" style="fill:#a9a9a9"/><path d="M15.489,18.162a2.721,2.721,0,1,0-2.767-2.673h0A2.72,2.72,0,0,0,15.489,18.162Zm-.075-4.275a1.555,1.555,0,1,1-1.528,1.583,1.555,1.555,0,0,1,1.528-1.583Z" style="fill:url(#a)"/><path d="M15.47,17a1.555,1.555,0,1,0-1.583-1.526h0A1.555,1.555,0,0,0,15.47,17Zm-.051-2.87a1.316,1.316,0,1,1-1.292,1.339h0a1.316,1.316,0,0,1,1.292-1.337Z" style="fill:#a9a9a9"/><polygon points="27.572 19.763 25.866 18.816 26.964 17.64 27.988 18.208 27.572 19.763" style="fill:silver"/><polygon points="29.208 22.119 28.203 20.447 29.742 19.977 30.345 20.981 29.208 22.119" style="fill:silver"/><polygon points="29.446 24.978 29.412 23.027 30.98 23.39 31 24.56 29.446 24.978" style="fill:silver"/><polygon points="28.223 27.572 29.169 25.866 30.345 26.964 29.778 27.988 28.223 27.572" style="fill:silver"/><polygon points="25.866 29.208 27.539 28.203 28.008 29.742 27.005 30.345 25.866 29.208" style="fill:silver"/><polygon points="23.007 29.446 24.959 29.412 24.596 30.98 23.425 31 23.007 29.446" style="fill:silver"/><polygon points="20.413 28.223 22.119 29.169 21.021 30.345 19.997 29.778 20.413 28.223" style="fill:silver"/><polygon points="18.777 25.866 19.782 27.539 18.243 28.008 17.64 27.005 18.777 25.866" style="fill:silver"/><polygon points="18.539 23.007 18.573 24.959 17.006 24.596 16.985 23.425 18.539 23.007" style="fill:silver"/><polygon points="19.763 20.413 18.816 22.119 17.64 21.021 18.208 19.997 19.763 20.413" style="fill:silver"/><polygon points="22.119 18.777 20.447 19.782 19.977 18.243 20.981 17.64 22.119 18.777" style="fill:silver"/><polygon points="24.978 18.539 23.027 18.573 23.39 17.006 24.56 16.985 24.978 18.539" style="fill:silver"/><path d="M23.9,18.372a5.626,5.626,0,1,1-3.946,1.716A5.625,5.625,0,0,1,23.9,18.372ZM21.883,24.03a2.112,2.112,0,1,0,.592-1.5A2.11,2.11,0,0,0,21.883,24.03Z" style="fill:silver"/><path d="M24.081,29.045a5.053,5.053,0,1,0-5.14-4.964,5.054,5.054,0,0,0,5.14,4.964Zm-.163-9.327a4.275,4.275,0,1,1-4.2,4.35,4.275,4.275,0,0,1,4.2-4.35Z" style="fill:#a9a9a9"/><path d="M24.061,27.893a3.9,3.9,0,1,0-3.967-3.832,3.9,3.9,0,0,0,3.967,3.832Zm-.105-6.027a2.128,2.128,0,1,1-2.09,2.164h0a2.127,2.127,0,0,1,2.089-2.164Z" style="fill:url(#b)"/><path d="M24.033,26.324a2.331,2.331,0,1,0-2.372-2.291,2.331,2.331,0,0,0,2.372,2.291Zm-.075-4.3a1.973,1.973,0,1,1-1.938,2.007,1.972,1.972,0,0,1,1.938-2.007Z" style="fill:#a9a9a9"/></svg>
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
1
lisp/treemacs/icons/default/vsc/dir-src-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_src</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#14622a"/><path d="M19.146,30.989a.9.9,0,0,1-.207-.025,1.041,1.041,0,0,1-.726-1.213L20.922,15.32a1.037,1.037,0,0,1,.444-.683.894.894,0,0,1,.7-.122,1.043,1.043,0,0,1,.727,1.213L20.077,30.16a1.033,1.033,0,0,1-.442.681A.9.9,0,0,1,19.146,30.989Z" style="fill:#06cc14"/><path d="M24.578,28.944l-.068,0a.931.931,0,0,1-.668-.377,1.1,1.1,0,0,1,.1-1.419L28.6,22.595l-4.638-4.239a1.1,1.1,0,0,1-.141-1.416.937.937,0,0,1,.661-.4.9.9,0,0,1,.709.237l5.47,5a1.1,1.1,0,0,1,.144,1.416,1.061,1.061,0,0,1-.142.163L25.216,28.68A.916.916,0,0,1,24.578,28.944Z" style="fill:#06cc14"/><path d="M16.423,28.947a.914.914,0,0,1-.639-.267l-5.452-5.327A.9.9,0,0,1,10.2,23.2a1.094,1.094,0,0,1,.141-1.414l5.471-5a.881.881,0,0,1,.7-.238.941.941,0,0,1,.665.4,1.1,1.1,0,0,1-.14,1.417L12.4,22.6l4.659,4.551a1.093,1.093,0,0,1,.1,1.419.927.927,0,0,1-.669.377Z" style="fill:#06cc14"/></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
1
lisp/treemacs/icons/default/vsc/dir-src-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_src_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#2a8243"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#2a8243"/><path d="M19.146,30.989a.9.9,0,0,1-.207-.025,1.041,1.041,0,0,1-.726-1.213L20.922,15.32a1.037,1.037,0,0,1,.444-.683.894.894,0,0,1,.7-.122,1.043,1.043,0,0,1,.727,1.213L20.077,30.16a1.033,1.033,0,0,1-.442.681A.9.9,0,0,1,19.146,30.989Z" style="fill:#06cc14"/><path d="M24.578,28.944l-.068,0a.931.931,0,0,1-.668-.377,1.1,1.1,0,0,1,.1-1.419L28.6,22.595l-4.638-4.239a1.1,1.1,0,0,1-.141-1.416.937.937,0,0,1,.661-.4.9.9,0,0,1,.709.237l5.47,5a1.1,1.1,0,0,1,.144,1.416,1.061,1.061,0,0,1-.142.163L25.216,28.68A.916.916,0,0,1,24.578,28.944Z" style="fill:#06cc14"/><path d="M16.423,28.947a.914.914,0,0,1-.639-.267l-5.452-5.327A.9.9,0,0,1,10.2,23.2a1.094,1.094,0,0,1,.141-1.414l5.471-5a.881.881,0,0,1,.7-.238.941.941,0,0,1,.665.4,1.1,1.1,0,0,1-.14,1.417L12.4,22.6l4.659,4.551a1.093,1.093,0,0,1,.1,1.419.927.927,0,0,1-.669.377Z" style="fill:#06cc14"/></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
BIN
lisp/treemacs/icons/default/vsc/dir-temp-closed.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
1
lisp/treemacs/icons/default/vsc/dir-temp-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_temp</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#34756b"/><path d="M21,31A10,10,0,1,1,31,21,10.011,10.011,0,0,1,21,31Zm0-18.182A8.182,8.182,0,1,0,29.182,21,8.191,8.191,0,0,0,21,12.818Z" style="fill:#5fc1b3"/><path d="M21.909,21.909H20.841a.75.75,0,0,1-.75-.75V14.477a.75.75,0,0,1,.75-.75h.318a.75.75,0,0,1,.75.75Z" style="fill:#5fc1b3"/><path d="M27.523,21.909H20.841a.75.75,0,0,1-.75-.75V20.091h7.432a.75.75,0,0,1,.75.75v.318A.75.75,0,0,1,27.523,21.909Z" style="fill:#5fc1b3"/></svg>
|
||||
|
After Width: | Height: | Size: 649 B |
BIN
lisp/treemacs/icons/default/vsc/dir-temp-open.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
1
lisp/treemacs/icons/default/vsc/dir-temp-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_temp_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#2e8e80"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#2e8e80"/><path d="M21,31A10,10,0,1,1,31,21,10.011,10.011,0,0,1,21,31Zm0-18.182A8.182,8.182,0,1,0,29.182,21,8.191,8.191,0,0,0,21,12.818Z" style="fill:#5fc1b3"/><path d="M21.909,21.909H20.841a.75.75,0,0,1-.75-.75V14.477a.75.75,0,0,1,.75-.75h.318a.75.75,0,0,1,.75.75Z" style="fill:#5fc1b3"/><path d="M27.523,21.909H20.841a.75.75,0,0,1-.75-.75V20.091h7.432a.75.75,0,0,1,.75.75v.318A.75.75,0,0,1,27.523,21.909Z" style="fill:#5fc1b3"/></svg>
|
||||
|
After Width: | Height: | Size: 736 B |
1
lisp/treemacs/icons/default/vsc/dir-test-closed.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_test</title><path d="M27.5,5.5H18.2L16.1,9.7H4.4V26.5H29.6V5.5Zm0,4.2H19.3l1.1-2.1h7.1Z" style="fill:#b70b0b"/><path d="M28.3,27.423c-1.729-.4-2.332-2.482-1.329-4.583a8.945,8.945,0,0,1,2.217-2.779l.314-.26.009.357a6.729,6.729,0,0,0,.748,2.425,14.092,14.092,0,0,1,.625,1.631,3.191,3.191,0,0,1-.073,1.958A2.67,2.67,0,0,1,29.7,27.259,2.794,2.794,0,0,1,28.3,27.423Zm.351-3.565c.124-.143.155-.332.164-1l.011-.825-.2.158a1.679,1.679,0,0,0-.635,1.4c.07.214.286.448.411.446A.514.514,0,0,0,28.651,23.858Z" style="fill:#fac6c5"/><path d="M13.124,30.945a3.852,3.852,0,0,1-3.031-4.563c.254-1.07.2-1.008,5.726-6.787l5.2-5.442.738.7.738.7-3,3.132-3,3.132,2.508-.054,2.508-.054,1.773-1.85,1.773-1.85.735.707.735.707-5.213,5.43c-4.783,4.982-5.257,5.452-5.743,5.692a3.889,3.889,0,0,1-2.452.393ZM27.786,18.461c-.138-.082-1.546-1.4-3.129-2.921l-2.879-2.772-.009-.421a.863.863,0,0,1,.194-.673A.99.99,0,0,1,23,11.3a68.841,68.841,0,0,1,6.277,6.023,1,1,0,0,1-1.492,1.133Z" style="fill:#fac6c5"/><path d="M11.578,26.851a2.1,2.1,0,0,0,2.579,2.614c.191-.2,2.407-2.515,7.387-7.737-2.505.054-2.475-.055-4.98,0C11.549,26.923,11.45,26.885,11.578,26.851Z" style="fill:#fac6c5"/></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
1
lisp/treemacs/icons/default/vsc/dir-test-open.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><title>folder_type_test_opened</title><path d="M27.4,5.5H18.2L16.1,9.7H4.3V26.5H29.5V5.5Zm0,18.7H6.6V11.8H27.4Zm0-14.5H19.2l1-2.1h7.1V9.7Z" style="fill:#d32626"/><polygon points="25.7 13.7 0.5 13.7 4.3 26.5 29.5 26.5 25.7 13.7" style="fill:#d32626"/><path d="M28.3,27.423c-1.729-.4-2.332-2.482-1.329-4.583a8.945,8.945,0,0,1,2.217-2.779l.314-.26.009.357a6.729,6.729,0,0,0,.748,2.425,14.092,14.092,0,0,1,.625,1.631,3.191,3.191,0,0,1-.073,1.958A2.67,2.67,0,0,1,29.7,27.259,2.794,2.794,0,0,1,28.3,27.423Zm.351-3.565c.124-.143.155-.332.164-1l.011-.825-.2.158a1.679,1.679,0,0,0-.635,1.4c.07.214.286.448.411.446A.514.514,0,0,0,28.651,23.858Z" style="fill:#fac6c5"/><path d="M13.124,30.945a3.852,3.852,0,0,1-3.031-4.563c.254-1.07.2-1.008,5.726-6.787l5.2-5.442.738.7.738.7-3,3.132-3,3.132,2.508-.054,2.508-.054,1.773-1.85,1.773-1.85.735.707.735.707-5.213,5.43c-4.783,4.982-5.257,5.452-5.743,5.692a3.889,3.889,0,0,1-2.452.393ZM27.786,18.461c-.138-.082-1.546-1.4-3.129-2.921l-2.879-2.772-.009-.421a.863.863,0,0,1,.194-.673A.99.99,0,0,1,23,11.3a68.841,68.841,0,0,1,6.277,6.023,1,1,0,0,1-1.492,1.133Z" style="fill:#fac6c5"/><path d="M11.578,26.851a2.1,2.1,0,0,0,2.579,2.614c.191-.2,2.407-2.515,7.387-7.737-2.505.054-2.475-.055-4.98,0C11.549,26.923,11.45,26.885,11.578,26.851Z" style="fill:#fac6c5"/></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -254,7 +254,7 @@ GIT-FUTURE: Pfuture"
|
||||
GIT-FACE is taken from the latest git cache, or nil if it's not known."
|
||||
(inline-letevals (btn git-face)
|
||||
(inline-quote
|
||||
(let* ((path (treemacs-button-get ,btn :key))
|
||||
(let* ((path (treemacs-button-get ,btn :path))
|
||||
(ann (treemacs-get-annotation path))
|
||||
(btn-start (treemacs-button-start ,btn))
|
||||
(btn-end (treemacs-button-end ,btn)))
|
||||
@@ -331,13 +331,15 @@ GIT-FACE is taken from the latest git cache, or nil if it's not known."
|
||||
(goto-char (point-min))
|
||||
(let* ((btn (point)))
|
||||
(while (setf btn (next-button btn))
|
||||
(-let [path (treemacs-button-get btn :key)]
|
||||
(let ((path (treemacs-button-get btn :path))
|
||||
(use-git (not (treemacs-button-get btn :no-git))))
|
||||
(treemacs--do-apply-annotation
|
||||
btn
|
||||
(-when-let (git-cache
|
||||
(->> path
|
||||
(treemacs--parent-dir)
|
||||
(ht-get treemacs--git-cache)))
|
||||
(and use-git
|
||||
(->> path
|
||||
(treemacs--parent-dir)
|
||||
(ht-get treemacs--git-cache))))
|
||||
(ht-get git-cache path)))))))))))
|
||||
|
||||
(defun treemacs-apply-annotations (path)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -105,6 +105,11 @@ DEFAULT: Face"
|
||||
"Saves the specific version of git-mode that is active.
|
||||
Values are either `simple', `extended', `deferred' or nil.")
|
||||
|
||||
(defun treemacs--non-simple-git-mode-enabled ()
|
||||
"Indicate whether a version of git-mode is enabled that affects directories."
|
||||
(declare (side-effect-free t))
|
||||
(memq treemacs--git-mode '(deferred extended)))
|
||||
|
||||
(defun treemacs--resize-git-cache ()
|
||||
"Cuts `treemacs--git-cache' back down to size.
|
||||
Specifically its size will be reduced to half of `treemacs--git-cache-max-size'."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs-bookmarks.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -147,6 +147,13 @@ width of the new window when the treemacs window is visible."
|
||||
(when (and (boundp 'evil-escape-excluded-major-modes) (not (boundp 'evil-escape-version)))
|
||||
(add-to-list 'evil-escape-excluded-major-modes 'treemacs-mode)))
|
||||
|
||||
(when (fboundp 'context-menu-mode)
|
||||
(defun treemacs--disable-context-menu-mode ()
|
||||
(treemacs-run-in-all-derived-buffers
|
||||
(with-no-warnings
|
||||
(setq-local context-menu-functions nil))))
|
||||
(add-hook 'context-menu-mode-hook 'treemacs--disable-context-menu-mode))
|
||||
|
||||
(defun treemacs-load-all-the-icons-with-workaround-font (font)
|
||||
"Load the `treemacs-all-the-icons' package using a workaround FONT for tabs.
|
||||
Use this if you experience the issue of icons jumping around when they are
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -84,12 +84,12 @@
|
||||
|
||||
(treemacs-import-functions-from "treemacs-visuals"
|
||||
treemacs-pulse-on-success
|
||||
treemacs--tear-down-icon-highlight
|
||||
treemacs--forget-previously-follow-tag-btn
|
||||
treemacs--forget-last-highlight)
|
||||
treemacs--forget-previously-follow-tag-btn)
|
||||
|
||||
(treemacs-import-functions-from "treemacs-async"
|
||||
treemacs--git-status-process
|
||||
treemacs--non-simple-git-mode-enabled
|
||||
treemacs-update-single-file-git-state
|
||||
treemacs--collapsed-dirs-process)
|
||||
|
||||
(treemacs-import-functions-from "treemacs-dom"
|
||||
@@ -154,6 +154,16 @@ Used in `treemacs-is-node-expanded?'")
|
||||
(substring ,path 0 -1)
|
||||
,path))))
|
||||
|
||||
(define-inline treemacs-string-trim-right (string)
|
||||
"Trim STRING of trailing string matching REGEXP.
|
||||
|
||||
Same as the builtin `string-trim-right', but re-implemented here for Emacs 27."
|
||||
(declare (side-effect-free t))
|
||||
(inline-letevals (string)
|
||||
(inline-quote
|
||||
(let ((i (string-match-p "\\(?:[ \t\n\r]+\\)\\'" ,string)))
|
||||
(if i (substring ,string 0 i) ,string)))))
|
||||
|
||||
(define-inline treemacs--prefix-arg-to-recurse-depth (arg)
|
||||
"Translates prefix ARG into a number.
|
||||
Used for depth-based expansion of nodes - a numeric prefix will translate to
|
||||
@@ -398,18 +408,16 @@ FILE here is a list consisting of an absolute path and file attributes."
|
||||
(and (not (s-matches? treemacs-dotfiles-regex filename))
|
||||
(--none? (funcall it filename ,file) treemacs-ignored-file-predicates))))))
|
||||
|
||||
(define-inline treemacs--file-extension (filename)
|
||||
(defun treemacs--file-extension (filename)
|
||||
"Same as `file-name-extension', but also works with leading periods.
|
||||
|
||||
This is something a of workaround to easily allow assigning icons to a FILENAME
|
||||
with a name like '.gitignore' without always having to check for both filename
|
||||
extensions and special names like this."
|
||||
(declare (side-effect-free t))
|
||||
(inline-letevals (filename)
|
||||
(inline-quote
|
||||
(if (string-match treemacs-file-extension-regex ,filename)
|
||||
(substring ,filename (1+ (match-beginning 0)))
|
||||
,filename))))
|
||||
(if (string-match treemacs-file-extension-regex filename)
|
||||
(substring filename (1+ (match-beginning 0)))
|
||||
filename))
|
||||
|
||||
(define-inline treemacs-is-treemacs-window? (window)
|
||||
"Return t when WINDOW is showing a treemacs buffer."
|
||||
@@ -465,7 +473,10 @@ being edited to trigger."
|
||||
;; filewatch mode needs the node's information to be in the dom
|
||||
(unless (with-no-warnings treemacs-filewatch-mode)
|
||||
(treemacs-run-in-every-buffer
|
||||
(treemacs-on-collapse ,path t)))))))
|
||||
(treemacs-on-collapse ,path t)))
|
||||
(when (treemacs--non-simple-git-mode-enabled)
|
||||
(treemacs-run-in-every-buffer
|
||||
(treemacs-update-single-file-git-state (treemacs--parent-dir ,path))))))))
|
||||
|
||||
(define-inline treemacs--refresh-dir (path &optional project)
|
||||
"Local refresh for button at PATH and PROJECT.
|
||||
@@ -1039,16 +1050,21 @@ Will be added to `treemacs-ignored-file-predicates' on Macs."
|
||||
|
||||
(defun treemacs--popup-window ()
|
||||
"Pop up a side window and buffer for treemacs."
|
||||
(if treemacs-display-in-side-window
|
||||
(-> (treemacs-get-local-buffer-create)
|
||||
(display-buffer-in-side-window `((side . ,treemacs-position)))
|
||||
(select-window))
|
||||
(-> (selected-window)
|
||||
(frame-root-window)
|
||||
(split-window nil treemacs-position)
|
||||
(select-window))
|
||||
(-let [buf (treemacs-get-local-buffer-create)]
|
||||
(switch-to-buffer buf))))
|
||||
(let ((buf (treemacs-get-local-buffer-create)))
|
||||
(display-buffer buf
|
||||
`(,(if treemacs-display-in-side-window
|
||||
'display-buffer-in-side-window
|
||||
'display-buffer-in-direction)
|
||||
. (;; for buffer in direction
|
||||
(direction . ,treemacs-position)
|
||||
(window . root)
|
||||
;; for side windows
|
||||
(slot . -1)
|
||||
(side . ,treemacs-position)
|
||||
;; general-purpose settings
|
||||
(window-width . ,treemacs-width)
|
||||
(dedicated . t))))
|
||||
(select-window (get-buffer-window buf))))
|
||||
|
||||
(defun treemacs--setup-buffer ()
|
||||
"Create and setup a buffer for treemacs in the right position and size."
|
||||
@@ -1064,11 +1080,7 @@ Will be added to `treemacs-ignored-file-predicates' on Macs."
|
||||
(treemacs--popup-window)
|
||||
(with-current-buffer lv-buffer (setf window-size-fixed t)))
|
||||
(treemacs--popup-window))
|
||||
(treemacs--forget-last-highlight)
|
||||
(set-window-dedicated-p (selected-window) t)
|
||||
(setq-local treemacs--in-this-buffer t)
|
||||
(let ((window-size-fixed))
|
||||
(treemacs--set-width treemacs-width)))
|
||||
(setq-local treemacs--in-this-buffer t))
|
||||
|
||||
(define-inline treemacs--parent (path)
|
||||
"Parent of PATH, or PATH itself if PATH is the root directory.
|
||||
@@ -1106,8 +1118,12 @@ Returns a cons cell of a descriptive string name and the sorting symbol."
|
||||
(declare (side-effect-free t))
|
||||
(let* ((sort-names '(("Sort Alphabetically Ascending" . alphabetic-asc)
|
||||
("Sort Alphabetically Descending" . alphabetic-desc)
|
||||
("Sort Alphabetically and Numerically Ascending" . alphabetic-numeric-asc)
|
||||
("Sort Alphabetically and Numerically Descending" . alphabetic-numeric-desc)
|
||||
("Sort Case Insensitive Alphabetically Ascending" . alphabetic-case-insensitive-asc)
|
||||
("Sort Case Insensitive Alphabetically Descending" . alphabetic-case-insensitive-desc)
|
||||
("Sort Case Insensitive Alphabetically and Numerically Ascending" . alphabetic-numeric-case-insensitive-asc)
|
||||
("Sort Case Insensitive Alphabetically and Numerically Descending" . alphabetic-numeric-case-insensitive-desc)
|
||||
("Sort by Size Ascending" . size-asc)
|
||||
("Sort by Size Descending" . size-desc)
|
||||
("Sort by Modification Date Ascending" . mod-time-asc)
|
||||
|
||||
@@ -1,49 +1,61 @@
|
||||
from subprocess import Popen, PIPE
|
||||
import sys
|
||||
|
||||
# mu4e-headers-include-related
|
||||
REL_FLAG = "-r" if sys.argv[1] == "True" else ""
|
||||
UNREAD_CMD = "mu find maildir:'{}' " + REL_FLAG + " --fields 'i' flag:'unread' 2> /dev/null | wc -l"
|
||||
PATH_PREFIX = "treemacs-mu4e"
|
||||
|
||||
# First arg indicates whether 'mu4e-headers-include-related' is t and mu's '-r' flag should be set
|
||||
# to also count related messages
|
||||
# The remaining arguments are a list of maildirs
|
||||
# Command line arguments are a list of maildirs.
|
||||
# The output is a list of items in the form '((P1 A1) (P2 A2))' where P is the node path for a maildir
|
||||
# node, and A is the mail count annotation text
|
||||
# Exmaple: '(((treemacs-mu4e "/web" "/web/") " (176)")((treemacs-mu4e "/web" "/web/Inbox") " (161)"))'
|
||||
# Exmaple: '(((treemacs-mu4e "/web/") " (176)")((treemacs-mu4e "/web/" "/web/Inbox") " (161)"))'
|
||||
|
||||
UNREAD_CMD = "mu find maildir:'{}' --fields 'i' flag:'unread' 2> /dev/null | wc -l"
|
||||
PATH_PREFIX = "treemacs-mu4e"
|
||||
LOCAL_PREFIX = "/" + sys.argv[1]
|
||||
|
||||
def main():
|
||||
maildirs = sys.argv[2:]
|
||||
|
||||
ret = ["("]
|
||||
output = ["("]
|
||||
for maildir in maildirs:
|
||||
|
||||
unread = Popen(UNREAD_CMD.format(maildir), shell=True, stdout=PIPE, bufsize=100, encoding='utf-8').communicate()[0][:-1]
|
||||
mu_dir = maildir
|
||||
is_local = False
|
||||
is_leaf = not maildir.endswith("/")
|
||||
# "Local Folders" is an artificial maildir that is used to group
|
||||
# otherwise free standing folders under a single header like
|
||||
# in thunderbird
|
||||
if mu_dir.startswith(LOCAL_PREFIX):
|
||||
is_local = True
|
||||
mu_dir = mu_dir.replace(LOCAL_PREFIX, "")
|
||||
if mu_dir == "/":
|
||||
continue
|
||||
|
||||
unread = Popen(UNREAD_CMD.format(mu_dir.replace(" ", "\ ")),
|
||||
shell=True,
|
||||
stdout=PIPE,
|
||||
bufsize=100,
|
||||
encoding='utf-8'
|
||||
).communicate()[0][:-1]
|
||||
|
||||
if unread == "0":
|
||||
continue
|
||||
|
||||
path = []
|
||||
path_item = ""
|
||||
split_path = maildir.split("/")[1:]
|
||||
node_path = []
|
||||
path_item = "/"
|
||||
split_path = maildir.split("/")[1:] if is_leaf else maildir.split("/")[1:-1]
|
||||
|
||||
# the script must have access to the true folder for the count to work
|
||||
# when passing things back to elisp the pseudo-hierarchy must be re-established
|
||||
if len(split_path) == 1:
|
||||
split_path.insert(0, "Local Folders")
|
||||
|
||||
for split_part in split_path:
|
||||
path_item = path_item + "/" + split_part
|
||||
path.append("\"" + path_item + "\"")
|
||||
# it makes difference for mu whether a maildir ends in a slash or not
|
||||
for i in range(0, len(split_path) - 1):
|
||||
path_item = path_item + split_path[i] + "/"
|
||||
node_path.append("\"" + path_item + "\"")
|
||||
final_item = "" if is_leaf else "/"
|
||||
node_path.append("\"" + path_item + split_path[-1] + final_item + "\"")
|
||||
|
||||
suffix = '" ({})"'.format(unread)
|
||||
|
||||
ret.append('(({} {}) {})'.format(
|
||||
PATH_PREFIX, " ".join(path), suffix
|
||||
output.append('(({} {}) {})'.format(
|
||||
PATH_PREFIX, " ".join(node_path), suffix
|
||||
))
|
||||
|
||||
ret.append(")")
|
||||
print("".join(ret))
|
||||
output.append(")")
|
||||
print("".join(output))
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -131,7 +131,8 @@ happen automatically when needed."
|
||||
:type 'list
|
||||
:group 'treemacs)
|
||||
|
||||
(defcustom treemacs-read-string-input 'from-child-frame
|
||||
(defcustom treemacs-read-string-input
|
||||
(if (getenv "WAYLAND_DISPLAY") 'from-minibuffer 'from-child-frame)
|
||||
"The function treemacs uses to read user input.
|
||||
Only applies to plaintext input, like when renaming a project, file or
|
||||
workspace.
|
||||
@@ -141,7 +142,10 @@ There are 2 options:
|
||||
child frame pop-up. Only available in GUI frames, otherwise the default
|
||||
minibuffer input is used.
|
||||
- `from-minibuffer': will read input from the minibuffer, same as baseline
|
||||
Emacs."
|
||||
Emacs.
|
||||
|
||||
Note: there seem to be issues with focusing child frames on wayland, therefore
|
||||
treemacs will use the minibuffer if it thinks you are running wayland."
|
||||
:type '(choice (const :tag "With Child Frame Popup" from-child-frame)
|
||||
(const :tag "From the Minibuffer (Emacs Default)" from-minibuffer))
|
||||
:group 'treemacs)
|
||||
@@ -298,8 +302,12 @@ Files will still always be shown after directories.
|
||||
Valid values are:
|
||||
* `alphabetic-asc',
|
||||
* `alphabetic-desc',
|
||||
* `alphabetic-numeric-asc',
|
||||
* `alphabetic-numeric-desc',
|
||||
* `alphabetic-case-insensitive-asc',
|
||||
* `alphabetic-case-insensitive-desc',
|
||||
* `alphabetic-numeric-case-insensitive-asc',
|
||||
* `alphabetic-numeric-case-insensitive-desc',
|
||||
* `size-asc',
|
||||
* `size-desc',
|
||||
* `mod-time-asc',
|
||||
@@ -329,8 +337,12 @@ to no effect on your usage of treemacs until you begin frequently refreshing
|
||||
treemacs views containing hundreds or even thousands of nodes."
|
||||
:type '(choice (const alphabetic-asc)
|
||||
(const alphabetic-desc)
|
||||
(const alphabetic-numeric-asc)
|
||||
(const alphabetic-numeric-desc)
|
||||
(const alphabetic-case-insensitive-asc)
|
||||
(const alphabetic-case-insensitive-desc)
|
||||
(const alphabetic-numeric-case-insensitive-asc)
|
||||
(const alphabetic-numeric-case-insensitive-desc)
|
||||
(const size-asc)
|
||||
(const size-desc)
|
||||
(const mod-time-asc)
|
||||
@@ -715,6 +727,15 @@ fairly expensive."
|
||||
:type 'boolean
|
||||
:group 'treemacs-follow)
|
||||
|
||||
(defcustom treemacs-project-follow-into-home nil
|
||||
"When non-nil `treemacs-project-follow-mode' will also follow into $HOME.
|
||||
|
||||
By default project-following excludes the home directory as an option for the
|
||||
current project. Setting this to non-nil will open up $HOME to being the final
|
||||
fallback."
|
||||
:type 'boolean
|
||||
:group 'treemacs-follow)
|
||||
|
||||
(defcustom treemacs-deferred-git-apply-delay 0.5
|
||||
"Delay in seconds of idle time before git fontification is applied.
|
||||
This is only relevant when using the deferred variant of git-mode."
|
||||
@@ -770,12 +791,15 @@ A locked width means that changes it is only possible with the commands
|
||||
:group 'treemacs-window)
|
||||
|
||||
(defcustom treemacs-window-background-color nil
|
||||
"Custom background colours for the treemacs window.
|
||||
Value must be a cons cell consisting of two colours: first the background of the
|
||||
treemacs window proper, then a second colour for treemacs' `hl-line' overlay
|
||||
marking the selected line."
|
||||
"This variable is obsolete and no longer in use.
|
||||
Instead you can modify `treemacs-window-background-face' and
|
||||
`treemacs-hl-line-face'."
|
||||
:type '(cons color color)
|
||||
:group 'treemacs-window)
|
||||
(make-obsolete-variable
|
||||
'treemacs-window-background-color
|
||||
"`treemacs-window-background-face' & `treemacs-hl-line-face'"
|
||||
"v3.2" 'set)
|
||||
|
||||
(defcustom treemacs-width 35
|
||||
"Width of the treemacs window."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs-diagnostics.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -36,6 +36,16 @@ Using this face is incompatible with `treemacs-git-mode' (exept for the simple
|
||||
variant), so it will only be used if git-mode is disabled or set to simple."
|
||||
:group 'treemacs-faces)
|
||||
|
||||
(defface treemacs-window-background-face
|
||||
'((t :inherit default))
|
||||
"Face used for the background of the treemacs window."
|
||||
:group 'treemacs-faces)
|
||||
|
||||
(defface treemacs-hl-line-face
|
||||
'((t :inherit hl-line))
|
||||
"Face used for the hl-line selection in the treemacs window."
|
||||
:group 'treemacs-faces)
|
||||
|
||||
(defface treemacs-file-face
|
||||
'((t :inherit default))
|
||||
"Face used by treemacs for files."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -32,6 +32,7 @@
|
||||
(require 'treemacs-logging)
|
||||
(require 'treemacs-rendering)
|
||||
(require 'treemacs-annotations)
|
||||
(require 'treemacs-async)
|
||||
|
||||
(eval-when-compile
|
||||
(require 'inline)
|
||||
@@ -540,9 +541,13 @@ IS-FILE?: Bool"
|
||||
;; update only the part that changed to keep things smooth
|
||||
;; for files that's just their parent, for directories we have to take
|
||||
;; flattening into account
|
||||
(if (treemacs-button-get created-under-btn :collapsed)
|
||||
(treemacs-update-node (treemacs-button-get (treemacs-button-get created-under-btn :parent) :path))
|
||||
(treemacs-update-node (treemacs-button-get created-under-btn :path))))
|
||||
(-let [path-to-update
|
||||
(if (treemacs-button-get created-under-btn :collapsed)
|
||||
(treemacs-button-get (treemacs-button-get created-under-btn :parent) :path)
|
||||
(treemacs-button-get created-under-btn :path))]
|
||||
(treemacs-update-node path-to-update)
|
||||
(when (treemacs--non-simple-git-mode-enabled)
|
||||
(treemacs-update-single-file-git-state path-to-update))))
|
||||
(treemacs-goto-file-node path-to-create project)
|
||||
(recenter))
|
||||
(treemacs-pulse-on-success
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -38,12 +38,11 @@
|
||||
`(left-fringe ,treemacs--fringe-indicator-bitmap treemacs-fringe-indicator-face))
|
||||
"The `before-string' property value used by the fringe indicator overlay.")
|
||||
|
||||
(define-inline treemacs--move-fringe-indicator-to-point ()
|
||||
(defun treemacs--move-fringe-indicator-to-point ()
|
||||
"Move the fringe indicator to the position of point."
|
||||
(inline-quote
|
||||
(when treemacs--fringe-indicator-overlay
|
||||
(-let [pabol (line-beginning-position)]
|
||||
(move-overlay treemacs--fringe-indicator-overlay pabol (1+ pabol))))))
|
||||
(when treemacs--fringe-indicator-overlay
|
||||
(-let [pabol (line-beginning-position)]
|
||||
(move-overlay treemacs--fringe-indicator-overlay pabol (1+ pabol)))))
|
||||
|
||||
(defun treemacs--enable-fringe-indicator ()
|
||||
"Enabled the fringe indicator in the current buffer."
|
||||
@@ -78,6 +77,7 @@ WINDOW is the treemacs window that has just been focused or unfocused."
|
||||
"Tear down `treemacs-fringe-indicator-mode'."
|
||||
(treemacs-run-in-all-derived-buffers
|
||||
(treemacs--disable-fringe-indicator)
|
||||
(advice-remove #'hl-line-highlight #'treemacs--move-fringe-indicator-to-point)
|
||||
(remove-hook 'window-selection-change-functions
|
||||
#'treemacs--show-fringe-indicator-only-when-focused
|
||||
:local)))
|
||||
@@ -120,6 +120,7 @@ fringe indicator when the treemacs window is selected."
|
||||
(setf treemacs-fringe-indicator-mode arg)
|
||||
(treemacs-run-in-all-derived-buffers
|
||||
(treemacs--enable-fringe-indicator)
|
||||
(advice-add #'hl-line-highlight :after #'treemacs--move-fringe-indicator-to-point)
|
||||
(when (memq arg '(t only-when-focused))
|
||||
(add-hook 'window-selection-change-functions
|
||||
#'treemacs--show-fringe-indicator-only-when-focused
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs-git-commit-diff-mode.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -56,7 +56,7 @@ Look for the PROJECT either in BUFFER or the local treemacs buffer."
|
||||
:on-success
|
||||
(when (buffer-live-p buffer)
|
||||
(-let [out (-> (pfuture-callback-output)
|
||||
(string-trim-right)
|
||||
(treemacs-string-trim-right)
|
||||
(read))]
|
||||
(with-current-buffer buffer
|
||||
(if out
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -29,48 +29,13 @@
|
||||
(require 'ht)
|
||||
(require 'treemacs-themes)
|
||||
(require 'treemacs-logging)
|
||||
(require 'treemacs-scope)
|
||||
|
||||
(eval-when-compile
|
||||
(require 'cl-lib)
|
||||
(require 'inline)
|
||||
(require 'treemacs-macros))
|
||||
|
||||
;; An explanation for the what and why of the icon highlighting code below:
|
||||
;; Using png images in treemacs has one annoying visual flaw: they overwrite the overlay
|
||||
;; used by hl-line, such that the line marked by hl-line will always show a 22x22 pixel
|
||||
;; gap wherever treemacs places an icon, regardess of transparency.
|
||||
;; Using xpm instead of png images is one way to work around this, but it degrades icon
|
||||
;; quality to an unacceptable degree. Another way is to directly change images' :background
|
||||
;; property. The backgrounds colours are derived from the current theme with `treemacs--setup-icon-highlight'
|
||||
;; and saved in `treemacs--selected-icon-background' and `treemacs--not-selected-icon-background'.
|
||||
;; Every icon string stores two images with the proper :background values in its properties
|
||||
;; 'img-selected and 'img-unselected. The 'display property of the icon in the current line
|
||||
;; is then highlighted, and the previously highlighted icon unhighlighted, by advising
|
||||
;; `hl-line-highlight'. The last displayed icon is saved as a button marker in `treemacs--last-highlight'.
|
||||
;; Since it is a marker in the treemacs buffer it is important for it to be reset whenever it might
|
||||
;; become invalid.
|
||||
|
||||
(eval-and-compile
|
||||
(defvar treemacs--not-selected-icon-background
|
||||
(pcase (face-attribute 'default :background nil t)
|
||||
((or 'unspecified 'unspecified-bg "unspecified" "unspecified-bg")
|
||||
(unless (or noninteractive (boundp 'treemacs-no-load-time-warnings))
|
||||
(message "[Treemacs] Warning: coudn't find default background colour for icons, falling back on #2d2d31."))
|
||||
"#2d2d31" )
|
||||
(other other)))
|
||||
"Background for non-selected icons.")
|
||||
|
||||
(eval-and-compile
|
||||
(defvar treemacs--selected-icon-background
|
||||
(-let [bg (face-attribute 'hl-line :background nil t)]
|
||||
(if (member bg '(unspecified unspecified-b "unspecified" "unspecified-bg"))
|
||||
(prog1 treemacs--not-selected-icon-background
|
||||
(unless (or noninteractive (boundp 'treemacs-no-load-time-warnings))
|
||||
(message "[Treemacs] Warning: couldn't find hl-line-mode's background color for icons, falling back on %s."
|
||||
treemacs--not-selected-icon-background)))
|
||||
bg)))
|
||||
"Background for selected icons.")
|
||||
|
||||
(define-inline treemacs--set-img-property (image property value)
|
||||
"Set IMAGE's PROPERTY to VALUE."
|
||||
;; the emacs26 code where this is copied from says it's for internal
|
||||
@@ -115,33 +80,6 @@ account."
|
||||
(plist-get it :background)
|
||||
(face-attribute ,face :background nil t)))))
|
||||
|
||||
(defun treemacs--setup-icon-background-colors (&rest _)
|
||||
"Align icon backgrounds with current Emacs theme.
|
||||
Fetch the current Emacs theme's background & hl-line colours and inject them
|
||||
into the gui icons of every theme in `treemacs--themes'.
|
||||
Also called as advice after `load-theme', hence the ignored argument."
|
||||
(let* ((default-background (treemacs--get-local-face-background 'default))
|
||||
(hl-line-background (treemacs--get-local-face-background 'hl-line))
|
||||
(test-icon (treemacs-get-icon-value 'dir-open))
|
||||
(icon-background (treemacs--get-img-property (get-text-property 0 'img-unselected test-icon) :background))
|
||||
(icon-hl-background (treemacs--get-img-property (get-text-property 0 'img-selected test-icon) :background)))
|
||||
(when (memq default-background '(unspecified-bg unspecified))
|
||||
(treemacs-log-failure "Current theme fails to specify default background color, falling back on #2d2d31")
|
||||
(setq default-background "#2d2d31"))
|
||||
;; make sure we only change all the icons' colors when we have to
|
||||
(unless (and (string= default-background icon-background)
|
||||
(string= hl-line-background icon-hl-background))
|
||||
(setf treemacs--selected-icon-background hl-line-background
|
||||
treemacs--not-selected-icon-background default-background)
|
||||
(dolist (theme treemacs--themes)
|
||||
(treemacs--maphash (treemacs-theme->gui-icons theme) (_ icon)
|
||||
(treemacs--set-img-property
|
||||
(get-text-property 0 'img-selected icon)
|
||||
:background treemacs--selected-icon-background)
|
||||
(treemacs--set-img-property
|
||||
(get-text-property 0 'img-unselected icon)
|
||||
:background treemacs--not-selected-icon-background))))))
|
||||
|
||||
(define-inline treemacs--is-image-creation-impossible? ()
|
||||
"Will return non-nil when Emacs is unable to create images.
|
||||
In this scenario (usually caused by running Emacs without a graphical
|
||||
@@ -183,37 +121,40 @@ Necessary since root icons are not rectangular."
|
||||
(h (round (* ,height 1.1818))))
|
||||
(setq ,width w ,height h)))
|
||||
|
||||
(define-inline treemacs--create-image (file-path)
|
||||
(defun treemacs--create-image (file-path)
|
||||
"Load image from FILE-PATH and size it based on `treemacs--icon-size'."
|
||||
(inline-letevals (file-path)
|
||||
(inline-quote
|
||||
(let ((height treemacs--icon-size)
|
||||
(width treemacs--icon-size))
|
||||
(when (and (integerp treemacs--icon-size)
|
||||
(s-starts-with? "root-" ,file-path))
|
||||
(treemacs--root-icon-size-adjust width height))
|
||||
(if (and (integerp treemacs--icon-size) (image-type-available-p 'imagemagick))
|
||||
(create-image ,file-path 'imagemagick nil :ascent 'center :width width :height height)
|
||||
(create-image ,file-path 'png nil :ascent 'center :width width :height height))))))
|
||||
(let ((height treemacs--icon-size)
|
||||
(width treemacs--icon-size))
|
||||
(when (and (integerp treemacs--icon-size)
|
||||
(s-starts-with? "root-" file-path))
|
||||
(treemacs--root-icon-size-adjust width height))
|
||||
(if (and (integerp treemacs--icon-size) (image-type-available-p 'imagemagick))
|
||||
(create-image
|
||||
file-path 'imagemagick nil
|
||||
:ascent 'center
|
||||
:width width
|
||||
:height height
|
||||
:mask 'heuristic)
|
||||
(create-image
|
||||
file-path
|
||||
(intern (treemacs--file-extension (treemacs--filename file-path)))
|
||||
nil
|
||||
:ascent 'center
|
||||
:width width
|
||||
:height height
|
||||
:mask 'heuristic))))
|
||||
|
||||
(define-inline treemacs--create-icon-strings (file fallback)
|
||||
(defun treemacs--create-icon-strings (file fallback)
|
||||
"Create propertized icon strings for a given FILE image and TUI FALLBACK."
|
||||
(inline-letevals (file fallback)
|
||||
(inline-quote
|
||||
(let ((tui-icon ,fallback)
|
||||
(gui-icon
|
||||
(if (treemacs--is-image-creation-impossible?)
|
||||
,fallback
|
||||
(let* ((img-selected (treemacs--create-image ,file))
|
||||
(img-unselected (copy-sequence img-selected)))
|
||||
(nconc img-selected `(:background ,treemacs--selected-icon-background))
|
||||
(nconc img-unselected `(:background ,treemacs--not-selected-icon-background))
|
||||
(concat (propertize " "
|
||||
'display img-unselected
|
||||
'img-selected img-selected
|
||||
'img-unselected img-unselected)
|
||||
" ")))))
|
||||
(cons gui-icon tui-icon)))))
|
||||
(let ((tui-icon fallback)
|
||||
(gui-icon
|
||||
(if (treemacs--is-image-creation-impossible?)
|
||||
fallback
|
||||
(concat (propertize
|
||||
" "
|
||||
'display (treemacs--create-image file))
|
||||
" "))))
|
||||
(cons gui-icon tui-icon)))
|
||||
|
||||
(defmacro treemacs--splice-icon (icon)
|
||||
"Splice the given ICON data depending on whether it is a value or an sexp."
|
||||
@@ -242,7 +183,6 @@ Necessary since root icons are not rectangular."
|
||||
(when (and (consp extensions) (or (symbolp (car extensions))
|
||||
(stringp (car extensions))))
|
||||
(setf extensions `(quote (,@extensions))))
|
||||
;; (setf extensions (--map (if (stringp it) (downcase it) it) extensions))
|
||||
`(let* ((xs (--map (if (stringp it) (downcase it) it) ,extensions))
|
||||
(fallback ,(if (equal fallback (quote 'same-as-icon))
|
||||
icon
|
||||
@@ -269,7 +209,13 @@ Necessary since root icons are not rectangular."
|
||||
(add-to-list 'treemacs--icon-symbols ext)
|
||||
(set symbol nil))))
|
||||
(--each xs
|
||||
(ht-set! gui-icons it gui-icon)
|
||||
;; NOTE: Disable creation of GUI svg icons without getting in the way of the rest
|
||||
;; of the icon creation process. This is good enough a workaround for Emacs versions
|
||||
;; that don't support svg images for as long as svg icons are a minority.
|
||||
(unless (and ,file
|
||||
(not (image-type-available-p 'svg))
|
||||
(string= (treemacs--file-extension ,file) "svg"))
|
||||
(ht-set! gui-icons it gui-icon))
|
||||
(ht-set! tui-icons it tui-icon))))
|
||||
|
||||
(treemacs-create-theme "Default"
|
||||
@@ -299,10 +245,46 @@ Necessary since root icons are not rectangular."
|
||||
(treemacs-create-icon :file "svgrepo/mail.png" :extensions (mail) :fallback " ")
|
||||
(treemacs-create-icon :file "svgrepo/mail-plus.png" :extensions (mail-plus) :fallback " ")
|
||||
|
||||
;; custom dir icons
|
||||
(treemacs-create-icon :file "svgrepo/dir-src-closed.png" :extensions ("src-closed") :fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "svgrepo/dir-src-open.png" :extensions ("src-open") :fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "svgrepo/dir-test-closed.png" :extensions ("test-closed") :fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "svgrepo/dir-test-open.png" :extensions ("test-open") :fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-binary-closed.png" :extensions ("bin-closed") :fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-binary-open.png" :extensions ("bin-open") :fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-services-closed.png" :extensions ("build-closed") :fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-services-open.png" :extensions ("build-open") :fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "svgrepo/dir-git-closed.png" :extensions ("git-closed") :fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "svgrepo/dir-git-open.png" :extensions ("git-open") :fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-github-closed.png" :extensions ("github-closed") :fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-github-open.png" :extensions ("github-open") :fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-public-closed.png" :extensions ("public-closed") :fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-public-open.png" :extensions ("public-open") :fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-private-closed.png" :extensions ("private-closed") :fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon :file "vsc/dir-private-open.png" :extensions ("private-open") :fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon
|
||||
:file "vsc/dir-temp-closed.png" :extensions ("temp-closed" "tmp-closed")
|
||||
:fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon
|
||||
:file "vsc/dir-temp-open.png" :extensions ("temp-open" "tmp-open")
|
||||
:fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon
|
||||
:file "vsc/dir-docs-closed.png" :extensions ("readme-closed" "docs-closed")
|
||||
:fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon
|
||||
:file "vsc/dir-docs-open.png" :extensions ("readme-open" "docs-open")
|
||||
:fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon
|
||||
:file "vsc/dir-images-closed.png" :extensions ("screenshots-closed" "icons-closed")
|
||||
:fallback (propertize "+ " 'face 'treemacs-term-node-face))
|
||||
(treemacs-create-icon
|
||||
:file "vsc/dir-images-open.png" :extensions ("screenshots-open" "icons-open")
|
||||
:fallback (propertize "- " 'face 'treemacs-term-node-face))
|
||||
|
||||
;; file icons
|
||||
(treemacs-create-icon :file "txt.png" :extensions (fallback))
|
||||
(treemacs-create-icon :file "emacs.png" :extensions ("el" "elc" "eln"))
|
||||
(treemacs-create-icon :file "ledger.png" :extensions ("ledger"))
|
||||
(treemacs-create-icon :file "ledger.png" :extensions ("ledger" "beancount"))
|
||||
(treemacs-create-icon :file "yaml.png" :extensions ("yml" "yaml" "travis.yml"))
|
||||
(treemacs-create-icon
|
||||
:file "shell.png"
|
||||
@@ -452,6 +434,7 @@ Necessary since root icons are not rectangular."
|
||||
|
||||
(define-inline treemacs-icon-for-file (file)
|
||||
"Retrieve an icon for FILE from `treemacs-icons' based on its extension.
|
||||
Works only with files, not directories.
|
||||
Uses `treemacs-icon-fallback' as fallback."
|
||||
(declare (side-effect-free t))
|
||||
(inline-letevals (file)
|
||||
@@ -462,6 +445,28 @@ Uses `treemacs-icon-fallback' as fallback."
|
||||
(treemacs--file-extension file-downcased)
|
||||
(with-no-warnings treemacs-icon-fallback)))))))
|
||||
|
||||
(define-inline treemacs-icon-for-dir (dir state)
|
||||
"Retrieve an icon for DIR from `treemacs-icons' in given STATE.
|
||||
STATE must be either `open' or `closed'.
|
||||
|
||||
Works only with directories, not files.
|
||||
Uses the `dir-open' and `dir-closed' icons as fallback."
|
||||
(declare (side-effect-free t))
|
||||
(inline-letevals (dir state)
|
||||
(inline-quote
|
||||
(let ((name-downcased (-> ,dir (treemacs--filename) (downcase))))
|
||||
(when (eq ?. (aref name-downcased 0))
|
||||
(setf name-downcased (substring name-downcased 1)))
|
||||
(pcase-exhaustive ,state
|
||||
(`open
|
||||
(let ((name (format "%s-%s" name-downcased "open")))
|
||||
(or (ht-get treemacs-icons name)
|
||||
(ht-get treemacs-icons 'dir-open))))
|
||||
(`closed
|
||||
(let ((name (format "%s-%s" name-downcased "closed")))
|
||||
(or (ht-get treemacs-icons name)
|
||||
(ht-get treemacs-icons 'dir-closed)))))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun treemacs-resize-icons (size)
|
||||
"Resize the current theme's icons to the given SIZE.
|
||||
@@ -484,17 +489,14 @@ png are changed."
|
||||
(treemacs-log-failure "Icons cannot be resized without image transforms or imagemagick support.")
|
||||
(setq treemacs--icon-size size)
|
||||
(treemacs--maphash (treemacs-theme->gui-icons treemacs--current-theme) (_ icon)
|
||||
(let ((display (get-text-property 0 'display icon))
|
||||
(img-selected (get-text-property 0 'img-selected icon))
|
||||
(img-unselected (get-text-property 0 'img-unselected icon))
|
||||
(width treemacs--icon-size)
|
||||
(height treemacs--icon-size))
|
||||
(let ((display (get-text-property 0 'display icon))
|
||||
(width treemacs--icon-size)
|
||||
(height treemacs--icon-size))
|
||||
(when (eq 'image (car-safe display))
|
||||
(when (s-ends-with? "root.png" (plist-get (cdr display) :file))
|
||||
(treemacs--root-icon-size-adjust width height))
|
||||
(dolist (property (list display img-selected img-unselected))
|
||||
(plist-put (cdr property) :height height)
|
||||
(plist-put (cdr property) :width width)))))))
|
||||
(plist-put (cdr display) :height height)
|
||||
(plist-put (cdr display) :width width))))))
|
||||
|
||||
(defun treemacs--select-icon-set ()
|
||||
"Select the right set of icons for the current buffer.
|
||||
@@ -529,7 +531,7 @@ Return the fallback icons if TUI is non-nil."
|
||||
Note that treemacs has a very loose definition of what constitutes a file
|
||||
extension - it's either everything past the last period, or just the file's full
|
||||
name if there is no period. This makes it possible to match file names like
|
||||
'.gitignore' and 'Makefile'.
|
||||
\\='.gitignore' and \\='Makefile'.
|
||||
|
||||
Additionally FILE-EXTENSIONS are also not case sensitive and will be stored in a
|
||||
down-cased state."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -40,7 +40,9 @@
|
||||
(require 'treemacs-macros))
|
||||
|
||||
(autoload 'ansi-color-apply-on-region "ansi-color")
|
||||
(autoload 'aw-select "ace-window")
|
||||
|
||||
(treemacs-import-functions-from "ace-window"
|
||||
ace-select-window)
|
||||
|
||||
(treemacs-import-functions-from "cfrs"
|
||||
cfrs-read)
|
||||
@@ -251,7 +253,7 @@ Stay in the current window with a single prefix argument ARG, or close the
|
||||
treemacs window with a double prefix argument."
|
||||
(interactive "P")
|
||||
(treemacs--execute-button-action
|
||||
:window (aw-select "Select window")
|
||||
:window (ace-select-window)
|
||||
:file-action (find-file (treemacs-safe-button-get btn :path))
|
||||
:dir-action (dired (treemacs-safe-button-get btn :path))
|
||||
:tag-section-action (treemacs--visit-or-expand/collapse-tag-node btn arg nil)
|
||||
@@ -282,7 +284,7 @@ treemacs window with a double prefix argument."
|
||||
(interactive "P")
|
||||
(treemacs--execute-button-action
|
||||
:split-function #'split-window-horizontally
|
||||
:window (aw-select "Select window")
|
||||
:window (ace-select-window)
|
||||
:file-action (find-file (treemacs-safe-button-get btn :path))
|
||||
:dir-action (dired (treemacs-safe-button-get btn :path))
|
||||
:tag-section-action (treemacs--visit-or-expand/collapse-tag-node btn arg nil)
|
||||
@@ -297,7 +299,7 @@ treemacs window with a double prefix argument."
|
||||
(interactive "P")
|
||||
(treemacs--execute-button-action
|
||||
:split-function #'split-window-vertically
|
||||
:window (aw-select "Select window")
|
||||
:window (ace-select-window)
|
||||
:file-action (find-file (treemacs-safe-button-get btn :path))
|
||||
:dir-action (dired (treemacs-safe-button-get btn :path))
|
||||
:tag-section-action (treemacs--visit-or-expand/collapse-tag-node btn arg nil)
|
||||
@@ -526,6 +528,24 @@ With a prefix ARG substract the increment value multiple times."
|
||||
(kill-new copied)
|
||||
(treemacs-pulse-on-success "Copied project path: %s" (propertize copied 'face 'font-lock-string-face))))))
|
||||
|
||||
(defun treemacs-paste-dir-at-point-to-minibuffer ()
|
||||
"Paste the directory at point into the minibuffer.
|
||||
This is used by the \"Paste here\" mouse menu button, which assumes that we are
|
||||
running `treemacs--copy-or-move', so that pasting this path into the minibuffer
|
||||
allows us to copy/move the previously-selected file into the path at point."
|
||||
(interactive)
|
||||
(treemacs-block
|
||||
(treemacs-error-return-if (not (active-minibuffer-window))
|
||||
"Minibuffer is not active")
|
||||
(let* ((path-at-point (treemacs--prop-at-point :path))
|
||||
(dir (if (file-directory-p path-at-point)
|
||||
path-at-point
|
||||
(file-name-directory path-at-point))))
|
||||
(select-window (active-minibuffer-window))
|
||||
(delete-region (minibuffer-prompt-end) (point-max))
|
||||
(insert dir))
|
||||
(message "Copied from treemacs")))
|
||||
|
||||
(defun treemacs-delete-other-windows ()
|
||||
"Same as `delete-other-windows', but will not delete the treemacs window.
|
||||
If this command is run when the treemacs window is selected `next-window' will
|
||||
@@ -540,7 +560,7 @@ also not be deleted."
|
||||
;; that we shouldn't prevent from running, so we just restore treemacs instead of preventing
|
||||
;; it from being deleted
|
||||
;; 'no-delete-other-windows could be used instead, but it's only available for emacs 26
|
||||
(when w
|
||||
(when (and w (not (equal 'visible (treemacs-current-visibility))))
|
||||
(treemacs--select-not-visible-window)))))
|
||||
|
||||
(defun treemacs-temp-resort-root (&optional sort-method)
|
||||
@@ -707,7 +727,6 @@ For slower scrolling see `treemacs-previous-line-other-window'"
|
||||
(treemacs-return-if (string-equal old-name new-name)
|
||||
(treemacs-pulse-on-failure "The new name is the same as the old name."))
|
||||
(setf (treemacs-project->name project) new-name)
|
||||
(treemacs--forget-last-highlight)
|
||||
;; after renaming, delete and redisplay the project
|
||||
(goto-char (treemacs-button-end project-btn))
|
||||
(delete-region (line-beginning-position) (line-end-position))
|
||||
@@ -887,7 +906,6 @@ With a prefix ARG also forget about all the nodes opened in the project."
|
||||
(treemacs-pulse-on-failure "There is nothing to close here.")
|
||||
(-let [btn (treemacs-project->position project)]
|
||||
(when (treemacs-is-node-expanded? btn)
|
||||
(treemacs--forget-last-highlight)
|
||||
(goto-char btn)
|
||||
(treemacs--collapse-root-node btn arg)
|
||||
(treemacs--maybe-recenter 'on-distance)))
|
||||
@@ -900,7 +918,6 @@ With a prefix ARG remember which nodes were expanded."
|
||||
(-when-let (buffer (treemacs-get-local-buffer))
|
||||
(with-current-buffer buffer
|
||||
(save-excursion
|
||||
(treemacs--forget-last-highlight)
|
||||
(dolist (project (treemacs-workspace->projects (treemacs-current-workspace)))
|
||||
(-when-let (pos (treemacs-project->position project))
|
||||
(when (eq 'root-node-open (treemacs-button-get pos :state))
|
||||
@@ -1103,7 +1120,6 @@ Prefix ARG will be passed on to the closing function
|
||||
(-if-let* ((btn (treemacs-current-button))
|
||||
(parent (button-get btn :parent)))
|
||||
(progn
|
||||
(treemacs--forget-last-highlight)
|
||||
(goto-char parent)
|
||||
(treemacs-toggle-node arg)
|
||||
(treemacs--evade-image))
|
||||
@@ -1308,10 +1324,40 @@ With a prefix ARG switch to the previous workspace instead."
|
||||
(new-idx (% (+ ws-count (if arg (1- idx) (1+ idx))) ws-count))
|
||||
(new-ws (nth new-idx treemacs--workspaces)))
|
||||
(treemacs-do-switch-workspace new-ws)
|
||||
(treemacs-pulse-on-success "Switched to workdpace '%s'"
|
||||
(treemacs-pulse-on-success "Switched to workspace '%s'"
|
||||
(propertize (treemacs-workspace->name new-ws)
|
||||
'face 'font-lock-string-face)))))
|
||||
|
||||
(defun treemacs-create-workspace-from-project (&optional arg)
|
||||
"Create (and switch to) a workspace containing only the current project.
|
||||
|
||||
By default uses the project at point in the treemacs buffer. If there is no
|
||||
treemacs buffer, then the project of the current file is used instead. With a
|
||||
prefix ARG it is also possible to interactively select the project."
|
||||
(interactive "P")
|
||||
(treemacs-block
|
||||
(-let [project nil]
|
||||
(if (eq t treemacs--in-this-buffer)
|
||||
(setf project (treemacs-project-of-node (treemacs-current-button)))
|
||||
(setf project (treemacs--find-project-for-buffer (buffer-file-name (current-buffer))))
|
||||
(treemacs-select-window))
|
||||
(when (or arg (null project))
|
||||
(setf project (treemacs--select-project-by-name))
|
||||
(treemacs-return-if (null project)))
|
||||
(let* ((ws-name (treemacs-project->name project))
|
||||
(new-ws (treemacs--find-workspace-by-name ws-name)))
|
||||
(if new-ws
|
||||
(setf (treemacs-workspace->projects new-ws) (list project))
|
||||
(-let [ws-create-result (treemacs-do-create-workspace ws-name)]
|
||||
(treemacs-error-return-if (not (equal 'success (car ws-create-result)))
|
||||
"Something went wrong when creating a new workspace: %s" ws-create-result)
|
||||
(setf new-ws (cdr ws-create-result))
|
||||
(setf (treemacs-workspace->projects new-ws) (list project))
|
||||
(treemacs--persist)))
|
||||
(treemacs-do-switch-workspace new-ws)
|
||||
(treemacs-pulse-on-success "Switched to project workspace '%s'"
|
||||
(propertize ws-name 'face 'font-lock-type-face))))))
|
||||
|
||||
(defun treemacs-icon-catalogue ()
|
||||
"Showcase a catalogue of all treemacs themes and their icons."
|
||||
(interactive)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs-mode.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -141,6 +141,7 @@ Will be set by `treemacs--post-command'.")
|
||||
(define-key map (kbd "r") 'treemacs-copy-relative-path-at-point)
|
||||
(define-key map (kbd "p") 'treemacs-copy-project-path-at-point)
|
||||
(define-key map (kbd "f") 'treemacs-copy-file)
|
||||
(define-key map (kbd "v") 'treemacs-paste-dir-at-point-to-minibuffer)
|
||||
map)
|
||||
"Keymap for copy commands in `treemacs-mode'.")
|
||||
|
||||
@@ -225,10 +226,17 @@ Will be set by `treemacs--post-command'.")
|
||||
((memq 'moody-mode-line-buffer-identification
|
||||
(default-value 'mode-line-format))
|
||||
'(:eval (moody-tab " Treemacs " 10 'down)))
|
||||
((and (fboundp 'doom-modeline)
|
||||
(fboundp 'doom-modeline-def-modeline))
|
||||
(doom-modeline-def-modeline 'treemacs '(bar " " major-mode))
|
||||
(doom-modeline 'treemacs))
|
||||
((featurep 'doom-modeline)
|
||||
(with-no-warnings
|
||||
(eval
|
||||
'(progn
|
||||
(require 'doom-modeline)
|
||||
(doom-modeline-def-segment treemacs-workspace-name
|
||||
"Display treemacs."
|
||||
(propertize (format " %s " (treemacs-workspace->name (treemacs-current-workspace)))
|
||||
'face (doom-modeline-face 'doom-modeline-buffer-minor-mode)))
|
||||
(doom-modeline-def-modeline 'treemacs '(bar " " major-mode) '(treemacs-workspace-name))
|
||||
(doom-modeline 'treemacs)))))
|
||||
(t
|
||||
'(:eval (format " Treemacs: %s"
|
||||
(treemacs-workspace->name (treemacs-current-workspace))))))))
|
||||
@@ -338,6 +346,9 @@ Will simply return `treemacs--eldoc-msg'."
|
||||
(setq-local eldoc-documentation-function #'treemacs--eldoc-function)
|
||||
(setq-local eldoc-message-commands treemacs--eldoc-obarray)
|
||||
(setq-local imenu-create-index-function #'treemacs--create-imenu-index-function)
|
||||
(when (boundp 'context-menu-functions)
|
||||
(setq-local context-menu-functions nil))
|
||||
|
||||
;; integrate with bookmark.el
|
||||
(setq-local bookmark-make-record-function #'treemacs--make-bookmark-record)
|
||||
(electric-indent-local-mode -1)
|
||||
@@ -363,10 +374,9 @@ Will simply return `treemacs--eldoc-msg'."
|
||||
;; alongside other window layout chaning commands that might delete it again
|
||||
(set-window-parameter (selected-window) 'no-delete-other-windows treemacs-no-delete-other-windows)
|
||||
|
||||
(when treemacs-window-background-color
|
||||
(face-remap-add-relative 'default :background (car treemacs-window-background-color))
|
||||
(face-remap-add-relative 'fringe :background (car treemacs-window-background-color))
|
||||
(face-remap-add-relative 'hl-line :background (cdr treemacs-window-background-color)))
|
||||
(face-remap-add-relative 'default 'treemacs-window-background-face)
|
||||
(face-remap-add-relative 'fringe 'treemacs-window-background-face)
|
||||
(face-remap-add-relative 'hl-line 'treemacs-hl-line-face)
|
||||
|
||||
(when treemacs-text-scale
|
||||
(text-scale-increase treemacs-text-scale))
|
||||
@@ -377,8 +387,6 @@ Will simply return `treemacs--eldoc-msg'."
|
||||
|
||||
(treemacs--build-indentation-cache 6)
|
||||
(treemacs--select-icon-set)
|
||||
(treemacs--setup-icon-highlight)
|
||||
(treemacs--setup-icon-background-colors)
|
||||
(treemacs--setup-mode-line)
|
||||
(treemacs--reset-dom))
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -277,7 +277,7 @@ and ignore any prefix argument."
|
||||
(list (xref-item-buffer xref) (xref-item-position xref)))))
|
||||
('issue-warning
|
||||
(treemacs-log-failure "Tag '%s' is located in a buffer that does not exist."
|
||||
(propertize (treemacs-with-button-buffer btn (treemacs--get-label-of btn)) 'face 'treemacs-tags-face)))
|
||||
(propertize (treemacs-with-button-buffer btn (treemacs--get-label-of btn)) 'face 'treemacs-tags-face)))
|
||||
(_ (error "[Treemacs] '%s' is an invalid value for treemacs-goto-tag-strategy" treemacs-goto-tag-strategy)))))))
|
||||
|
||||
;;;###autoload
|
||||
@@ -300,7 +300,10 @@ and ignore any prefix argument."
|
||||
(menu
|
||||
(easy-menu-create-menu
|
||||
nil
|
||||
`(("New"
|
||||
`(["Paste here"
|
||||
treemacs-paste-dir-at-point-to-minibuffer
|
||||
:visible ,(string-match-p "\\(\\(Move\\)\\|\\(Copy\\)\\) to: " (or (minibuffer-prompt) ""))]
|
||||
("New"
|
||||
["New File" treemacs-create-file]
|
||||
["New Directory" treemacs-create-dir])
|
||||
["Open" treemacs-visit-node-no-split :visible ,(check node)]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -91,16 +91,24 @@ SELF: Treemacs-Iter struct."
|
||||
(defun treemacs--read-workspaces (iter)
|
||||
"Read a list of workspaces from the lines in ITER.
|
||||
|
||||
Returns a list with 2 elements: the first one is a list of all enabled
|
||||
workspaces, the second is a list of all non-disabled workspaces.
|
||||
|
||||
ITER: Treemacs-Iter Struct."
|
||||
(let (workspaces)
|
||||
(let ((workspaces)
|
||||
(comment-prefix "COMMENT "))
|
||||
(while (s-matches? treemacs--persist-workspace-name-regex (treemacs-iter->peek iter))
|
||||
(-let [workspace (treemacs-workspace->create!)]
|
||||
(setf (treemacs-workspace->name workspace)
|
||||
(substring (treemacs-iter->next! iter) 2)
|
||||
(treemacs-workspace->projects workspace)
|
||||
(treemacs--read-projects iter))
|
||||
(let ((workspace (treemacs-workspace->create!))
|
||||
(workspace-name (substring (treemacs-iter->next! iter) 2))
|
||||
(workspace-projects (treemacs--read-projects iter)))
|
||||
(when (s-starts-with? comment-prefix workspace-name)
|
||||
(setf workspace-name (substring workspace-name (length comment-prefix))
|
||||
(treemacs-workspace->is-disabled? workspace) t))
|
||||
(setf (treemacs-workspace->name workspace) workspace-name
|
||||
(treemacs-workspace->projects workspace) workspace-projects)
|
||||
(push workspace workspaces)))
|
||||
(nreverse workspaces)))
|
||||
(--separate (treemacs-workspace->is-disabled? it)
|
||||
(nreverse workspaces))))
|
||||
|
||||
(defun treemacs--read-projects (iter)
|
||||
"Read a list of projects from ITER until another section is found.
|
||||
@@ -178,14 +186,24 @@ ITER: Treemacs-Iter Struct"
|
||||
desktop-save-buffer nil))
|
||||
(with-current-buffer buffer
|
||||
(dolist (ws (--reject (null (treemacs-workspace->projects it))
|
||||
(treemacs-workspaces)))
|
||||
(push (format "* %s\n" (treemacs-workspace->name ws)) txt)
|
||||
(append (treemacs-workspaces)
|
||||
(treemacs-disabled-workspaces))))
|
||||
(push (format "* %s%s\n"
|
||||
(if (treemacs-workspace->is-disabled? ws) "COMMENT " "")
|
||||
(treemacs-workspace->name ws))
|
||||
txt)
|
||||
(dolist (pr (treemacs-workspace->projects ws))
|
||||
(push (format "** %s%s\n"
|
||||
(if (treemacs-project->is-disabled? pr) "COMMENT " "")
|
||||
(treemacs-project->name pr))
|
||||
txt)
|
||||
(push (format " - path :: %s\n" (abbreviate-file-name (treemacs-project->path pr))) txt)))
|
||||
(push (format
|
||||
" - path :: %s\n"
|
||||
(-let [path (treemacs-project->path pr)]
|
||||
(if (string-prefix-p "/ssh:" path)
|
||||
path
|
||||
(abbreviate-file-name path))))
|
||||
txt)))
|
||||
(delete-region (point-min) (point-max))
|
||||
(insert (apply #'concat (nreverse txt)))
|
||||
(-let [inhibit-message t] (save-buffer))
|
||||
@@ -205,7 +223,13 @@ Will read all lines, except those that start with # or contain only whitespace."
|
||||
(s-starts-with? "#" it)))))
|
||||
|
||||
(cl-defun treemacs--validate-persist-lines
|
||||
(lines &optional (context :start) (prev nil) (paths nil) (proj-count 0))
|
||||
(lines
|
||||
&optional
|
||||
(context :start)
|
||||
(prev nil)
|
||||
(paths nil)
|
||||
(proj-count 0)
|
||||
(ws-count 0))
|
||||
"Recursively verify the make-up of the given LINES, based on their CONTEXT.
|
||||
Lines must start with a workspace name, followed by a project name, followed by
|
||||
the project's path property, followed by either the next project or the next
|
||||
@@ -220,7 +244,10 @@ These are used to make sure that no file path appears in the workspaces more
|
||||
than once.
|
||||
|
||||
PROJ-COUNT counts the number of non-disabled projects in a workspace to make
|
||||
sure that there is at least of project that will be displayed.
|
||||
sure that there is at least one project that will be displayed.
|
||||
|
||||
WS-COUNT counts the number of non-disabled workspaces to make sure that there is
|
||||
at least one workspace that will be used.
|
||||
|
||||
A successful validation returns just the symbol \\='success, in case of an error
|
||||
a list of 3 items is returned: the symbol \\='error, the exact line where the
|
||||
@@ -241,6 +268,8 @@ PROJ-COUNT: Int"
|
||||
(:property
|
||||
(treemacs-return-if (= 0 proj-count)
|
||||
`(error ,prev ,(as-warning "Workspace must contain at least 1 project that is not disabled.")))
|
||||
(treemacs-return-if (= 0 ws-count)
|
||||
`(error ,prev ,(as-warning "There must be at least 1 worspace that is not disabled.")))
|
||||
(treemacs-return
|
||||
'success))
|
||||
(:start
|
||||
@@ -253,13 +282,15 @@ PROJ-COUNT: Int"
|
||||
(:start
|
||||
(treemacs-return-if (not (s-matches? treemacs--persist-workspace-name-regex line))
|
||||
`(error ,line ,(as-warning "First item must be a workspace name")))
|
||||
(treemacs--validate-persist-lines (cdr lines) :workspace line nil 0))
|
||||
(-let [ws-is-disabled? (s-starts-with? "* COMMENT" line)]
|
||||
(unless ws-is-disabled? (cl-incf ws-count)))
|
||||
(treemacs--validate-persist-lines (cdr lines) :workspace line nil 0 ws-count))
|
||||
(:workspace
|
||||
(treemacs-return-if (not (s-matches? treemacs--persist-project-name-regex line))
|
||||
`(error ,line ,(as-warning "Workspace name must be followed by project name")))
|
||||
(-let [proj-is-disabled? (s-starts-with? "** COMMENT" line)]
|
||||
(unless proj-is-disabled? (cl-incf proj-count))
|
||||
(treemacs--validate-persist-lines (cdr lines) :project line nil proj-count)))
|
||||
(treemacs--validate-persist-lines (cdr lines) :project line nil proj-count ws-count)))
|
||||
(:project
|
||||
(treemacs-return-if (not (s-matches? treemacs--persist-kv-regex line))
|
||||
`(error ,prev ,(as-warning "Project name must be followed by path declaration")))
|
||||
@@ -276,7 +307,7 @@ PROJ-COUNT: Int"
|
||||
(--any (treemacs-is-path it :in path) paths))
|
||||
`(error ,line ,(format (as-warning "Path '%s' appears in the workspace more than once.")
|
||||
(propertize path 'face 'font-lock-string-face))))
|
||||
(treemacs--validate-persist-lines (cdr lines) :property line (cons path paths) proj-count)))
|
||||
(treemacs--validate-persist-lines (cdr lines) :property line (cons path paths) proj-count ws-count)))
|
||||
(:property
|
||||
(let ((line-is-workspace-name (s-matches? treemacs--persist-workspace-name-regex line))
|
||||
(line-is-project-name (s-matches? treemacs--persist-project-name-regex line)))
|
||||
@@ -284,11 +315,13 @@ PROJ-COUNT: Int"
|
||||
(line-is-workspace-name
|
||||
(treemacs-return-if (= 0 proj-count)
|
||||
`(error ,prev ,(as-warning "Workspace must contain at least 1 project that is not disabled.")))
|
||||
(treemacs--validate-persist-lines (cdr lines) :workspace line nil 0))
|
||||
(-let [ws-is-disabled? (s-starts-with? "* COMMENT" line)]
|
||||
(unless ws-is-disabled? (cl-incf ws-count)))
|
||||
(treemacs--validate-persist-lines (cdr lines) :workspace line nil 0 ws-count))
|
||||
(line-is-project-name
|
||||
(-let [proj-is-disabled? (s-starts-with? "** COMMENT" line)]
|
||||
(unless proj-is-disabled? (cl-incf proj-count))
|
||||
(treemacs--validate-persist-lines (cdr lines) :project line paths proj-count)))
|
||||
(unless proj-is-disabled? (cl-incf proj-count)))
|
||||
(treemacs--validate-persist-lines (cdr lines) :project line paths proj-count ws-count))
|
||||
(t
|
||||
(treemacs-return-if (-none? #'identity (list line-is-workspace-name line-is-project-name))
|
||||
`(error ,prev ,(as-warning "Path property must be followed by the next workspace or project"))))))))))))
|
||||
@@ -309,7 +342,9 @@ PROJ-COUNT: Int"
|
||||
(condition-case e
|
||||
(pcase (treemacs--validate-persist-lines lines)
|
||||
('success
|
||||
(setf treemacs--workspaces (treemacs--read-workspaces (treemacs-iter->create! :list lines))))
|
||||
(let* ((ws-lists (treemacs--read-workspaces (treemacs-iter->create! :list lines))))
|
||||
(setf treemacs--disabled-workspaces (car ws-lists))
|
||||
(setf treemacs--workspaces (cadr ws-lists))))
|
||||
(`(error ,line ,error-msg)
|
||||
(treemacs--write-error-persist-state lines (format "'%s' in line '%s'" error-msg line))
|
||||
(treemacs-log-err "Could not restore saved state, %s:\n%s\n%s"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(define-package "treemacs" "20221221.1301" "A tree style file explorer package"
|
||||
(define-package "treemacs" "20231101.1150" "A tree style file explorer package"
|
||||
'((emacs "26.1")
|
||||
(cl-lib "0.5")
|
||||
(dash "2.11.0")
|
||||
@@ -8,7 +8,9 @@
|
||||
(hydra "0.13.2")
|
||||
(ht "2.2")
|
||||
(cfrs "1.3.2"))
|
||||
:commit "71e5df66b99ffe16de65fb4783e7484b05aae6cb" :authors
|
||||
:commit "92e173b3daac5e3f03fa7a63475f1d692e0c1958" :authors
|
||||
'(("Alexander Miller" . "alexanderm@web.de"))
|
||||
:maintainers
|
||||
'(("Alexander Miller" . "alexanderm@web.de"))
|
||||
:maintainer
|
||||
'("Alexander Miller" . "alexanderm@web.de")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -45,26 +45,29 @@ Used as a hook for `window-buffer-change-functions', thus the ignored parameter.
|
||||
"Actual, un-debounced, implementation of project following."
|
||||
(-when-let (window (treemacs-get-local-window))
|
||||
(treemacs-block
|
||||
(let* ((ws (treemacs-current-workspace))
|
||||
(new-project-path (treemacs--find-current-user-project))
|
||||
(old-project-path (-some-> ws
|
||||
(treemacs-workspace->projects)
|
||||
(car)
|
||||
(treemacs-project->path))))
|
||||
(treemacs-return-if
|
||||
(or treemacs--in-this-buffer
|
||||
(null new-project-path)
|
||||
(string= (expand-file-name "~")
|
||||
new-project-path)
|
||||
(bound-and-true-p edebug-mode)
|
||||
(frame-parent)
|
||||
(and (= 1 (length (treemacs-workspace->projects ws)))
|
||||
(string= new-project-path old-project-path))))
|
||||
(save-selected-window
|
||||
(treemacs--show-single-project
|
||||
new-project-path (treemacs--filename new-project-path))
|
||||
(treemacs--follow)
|
||||
(hl-line-highlight))))))
|
||||
(let* ((ws (treemacs-current-workspace))
|
||||
(new-project-path (treemacs--find-current-user-project))
|
||||
(old-project-path (-some-> ws
|
||||
(treemacs-workspace->projects)
|
||||
(car)
|
||||
(treemacs-project->path))))
|
||||
(treemacs-return-if
|
||||
(or treemacs--in-this-buffer
|
||||
(null new-project-path)
|
||||
(and
|
||||
(null treemacs-project-follow-into-home)
|
||||
(string=
|
||||
(expand-file-name "~")
|
||||
new-project-path))
|
||||
(bound-and-true-p edebug-mode)
|
||||
(frame-parent)
|
||||
(and (= 1 (length (treemacs-workspace->projects ws)))
|
||||
(string= new-project-path old-project-path))))
|
||||
(save-selected-window
|
||||
(treemacs--show-single-project
|
||||
new-project-path (treemacs--filename new-project-path))
|
||||
(treemacs--follow)
|
||||
(hl-line-highlight))))))
|
||||
|
||||
(defun treemacs--follow-project-after-buffer-init ()
|
||||
"Hook to follow the current project when a treemacs buffer is created.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -125,6 +125,18 @@ the height of treemacs' icons must be taken into account."
|
||||
(inline-letevals (f1 f2)
|
||||
(inline-quote (string-lessp ,f2 ,f1))))
|
||||
|
||||
(define-inline treemacs--sort-alphabetic-numeric-asc (f1 f2)
|
||||
"Sort F1 and F2 alphabetically and numerically ascending."
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(inline-letevals (f1 f2)
|
||||
(inline-quote (string-version-lessp ,f1 ,f2))))
|
||||
|
||||
(define-inline treemacs--sort-alphabetic-numeric-desc (f1 f2)
|
||||
"Sort F1 and F2 alphabetically and numerically descending."
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(inline-letevals (f1 f2)
|
||||
(inline-quote (string-version-lessp ,f2 ,f1))))
|
||||
|
||||
(define-inline treemacs--sort-alphabetic-case-insensitive-asc (f1 f2)
|
||||
"Sort F1 and F2 case insensitive alphabetically ascending."
|
||||
(declare (pure t) (side-effect-free t))
|
||||
@@ -137,6 +149,18 @@ the height of treemacs' icons must be taken into account."
|
||||
(inline-letevals (f1 f2)
|
||||
(inline-quote (string-lessp (downcase ,f2) (downcase ,f1)))))
|
||||
|
||||
(define-inline treemacs--sort-alphabetic-numeric-case-insensitive-asc (f1 f2)
|
||||
"Sort F1 and F2 case insensitive alphabetically and numerically ascending."
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(inline-letevals (f1 f2)
|
||||
(inline-quote (string-version-lessp (downcase ,f1) (downcase ,f2)))))
|
||||
|
||||
(define-inline treemacs--sort-alphabetic-numeric-case-insensitive-desc (f1 f2)
|
||||
"Sort F1 and F2 case insensitive alphabetically and numerically descending."
|
||||
(declare (pure t) (side-effect-free t))
|
||||
(inline-letevals (f1 f2)
|
||||
(inline-quote (string-version-lessp (downcase ,f2) (downcase ,f1)))))
|
||||
|
||||
(define-inline treemacs--sort-size-asc (f1 f2)
|
||||
"Sort F1 and F2 by size ascending."
|
||||
(declare (side-effect-free t))
|
||||
@@ -176,8 +200,12 @@ the height of treemacs' icons must be taken into account."
|
||||
(pcase treemacs-sorting
|
||||
('alphabetic-asc #'treemacs--sort-alphabetic-asc)
|
||||
('alphabetic-desc #'treemacs--sort-alphabetic-desc)
|
||||
('alphabetic-numeric-asc #'treemacs--sort-alphabetic-numeric-asc)
|
||||
('alphabetic-numeric-desc #'treemacs--sort-alphabetic-numeric-desc)
|
||||
('alphabetic-case-insensitive-asc #'treemacs--sort-alphabetic-case-insensitive-asc)
|
||||
('alphabetic-case-insensitive-desc #'treemacs--sort-alphabetic-case-insensitive-desc)
|
||||
('alphabetic-numeric-case-insensitive-asc #'treemacs--sort-alphabetic-numeric-case-insensitive-asc)
|
||||
('alphabetic-numeric-case-insensitive-desc #'treemacs--sort-alphabetic-numeric-case-insensitive-desc)
|
||||
('size-asc #'treemacs--sort-size-asc)
|
||||
('size-desc #'treemacs--sort-size-desc)
|
||||
('mod-time-asc #'treemacs--sort-mod-time-asc)
|
||||
@@ -202,23 +230,24 @@ the height of treemacs' icons must be taken into account."
|
||||
PREFIX is a string inserted as indentation.
|
||||
PARENT is the (optional) button under which this one is inserted.
|
||||
DEPTH indicates how deep in the filetree the current button is."
|
||||
;; for directories the icon is included in the prefix since it's always known
|
||||
(inline-letevals (path prefix parent depth)
|
||||
(inline-quote
|
||||
(list
|
||||
,prefix
|
||||
(propertize (->> ,path file-name-nondirectory (funcall treemacs-directory-name-transformer))
|
||||
'button '(t)
|
||||
'category 'default-button
|
||||
'help-echo nil
|
||||
'keymap nil
|
||||
:default-face 'treemacs-directory-face
|
||||
:state 'dir-node-closed
|
||||
:path ,path
|
||||
:key ,path
|
||||
:symlink (file-symlink-p ,path)
|
||||
:parent ,parent
|
||||
:depth ,depth)))))
|
||||
(let ((dir-name (file-name-nondirectory ,path)))
|
||||
(list
|
||||
,prefix
|
||||
(treemacs-icon-for-dir dir-name 'closed)
|
||||
(propertize (->> dir-name (funcall treemacs-directory-name-transformer))
|
||||
'button '(t)
|
||||
'category 'default-button
|
||||
'help-echo nil
|
||||
'keymap nil
|
||||
:default-face 'treemacs-directory-face
|
||||
:state 'dir-node-closed
|
||||
:path ,path
|
||||
:key ,path
|
||||
:symlink (file-symlink-p ,path)
|
||||
:parent ,parent
|
||||
:depth ,depth))))))
|
||||
|
||||
(define-inline treemacs--create-file-button-strings (path prefix parent depth)
|
||||
"Return the text to insert for a file button for PATH.
|
||||
@@ -346,10 +375,18 @@ DIRS: List of Collapse Paths. Each Collapse Path is a list of
|
||||
(-let [beg (point)]
|
||||
(insert label-to-add)
|
||||
(add-text-properties beg (point) props)
|
||||
(unless (memq treemacs--git-mode '(deferred extended))
|
||||
(unless (treemacs--non-simple-git-mode-enabled)
|
||||
(add-text-properties
|
||||
beg (point)
|
||||
'(face treemacs-directory-collapsed-face)))))))))))
|
||||
'(face treemacs-directory-collapsed-face)))
|
||||
(-when-let* ((ann (treemacs-get-annotation new-path))
|
||||
(git-cache
|
||||
(->> original-path
|
||||
(treemacs--parent-dir)
|
||||
(ht-get treemacs--git-cache))))
|
||||
(treemacs-button-put
|
||||
b 'face
|
||||
(treemacs-annotation->face-value ann)))))))))))
|
||||
|
||||
(defmacro treemacs--inplace-map-when-unrolled (items interval &rest mapper)
|
||||
"Unrolled in-place mapping operation.
|
||||
@@ -390,10 +427,9 @@ set to PARENT."
|
||||
(setq dir-strings
|
||||
(treemacs--create-buttons
|
||||
:nodes dirs
|
||||
:extra-vars ((dir-prefix (concat prefix treemacs-icon-dir-closed)))
|
||||
:depth ,depth
|
||||
:node-name node
|
||||
:node-action (treemacs--create-dir-button-strings node dir-prefix ,parent ,depth)))
|
||||
:node-action (treemacs--create-dir-button-strings node prefix ,parent ,depth)))
|
||||
(setq file-strings
|
||||
(treemacs--create-buttons
|
||||
:nodes files
|
||||
@@ -446,13 +482,14 @@ set to PARENT."
|
||||
(-let [result nil]
|
||||
(while dir-strings
|
||||
(let* ((prefix (car dir-strings))
|
||||
(dirname (cadr dir-strings))
|
||||
(icon (cadr dir-strings))
|
||||
(dirname (caddr dir-strings))
|
||||
(dirpath (concat ,root "/" dirname)))
|
||||
(unless (--any? (funcall it dirpath git-info) treemacs-pre-file-insert-predicates)
|
||||
(setq result (cons dirname (cons prefix result)))
|
||||
(setq result (cons dirname (cons icon (cons prefix result))))
|
||||
(push (treemacs-dom-node->create! :parent parent-node :key dirpath)
|
||||
dir-dom-nodes)))
|
||||
(setq dir-strings (cddr dir-strings)))
|
||||
(setq dir-strings (cdddr dir-strings)))
|
||||
(setq dir-strings (nreverse result))))
|
||||
(setf
|
||||
file-dom-nodes
|
||||
@@ -467,24 +504,25 @@ set to PARENT."
|
||||
(dolist (it (treemacs-dom-node->children parent-node))
|
||||
(treemacs-dom-node->insert-into-dom! it))
|
||||
|
||||
(treemacs--inplace-map-when-unrolled dir-strings 2
|
||||
(-if-let* ((ann (treemacs-get-annotation (concat ,root "/" it)))
|
||||
(face (treemacs-annotation->face-value ann)))
|
||||
(progn
|
||||
(put-text-property
|
||||
0
|
||||
(length it)
|
||||
'face
|
||||
face
|
||||
it)
|
||||
(concat it (treemacs-annotation->suffix-value ann)))
|
||||
(put-text-property
|
||||
0
|
||||
(length it)
|
||||
'face
|
||||
'treemacs-directory-face
|
||||
it)
|
||||
it))
|
||||
(setf dir-strings
|
||||
(treemacs--inplace-map-when-unrolled dir-strings 3
|
||||
(-if-let* ((ann (treemacs-get-annotation (concat ,root "/" it)))
|
||||
(face (treemacs-annotation->face-value ann)))
|
||||
(progn
|
||||
(put-text-property
|
||||
0
|
||||
(length it)
|
||||
'face
|
||||
face
|
||||
it)
|
||||
(concat it (treemacs-annotation->suffix-value ann)))
|
||||
(put-text-property
|
||||
0
|
||||
(length it)
|
||||
'face
|
||||
'treemacs-directory-face
|
||||
it)
|
||||
it)))
|
||||
(insert (apply #'concat dir-strings))
|
||||
|
||||
(end-of-line)
|
||||
@@ -512,7 +550,8 @@ set to PARENT."
|
||||
(save-excursion
|
||||
(treemacs--flatten-dirs (treemacs--parse-collapsed-dirs ,collapse-process))
|
||||
(treemacs--reentry ,root ,git-future))
|
||||
(line-end-position))))))
|
||||
(with-no-warnings
|
||||
(line-end-position)))))))
|
||||
|
||||
(cl-defmacro treemacs--button-close (&key button new-icon new-state post-close-action)
|
||||
"Close node given by BUTTON, use NEW-ICON and BUTTON's state to NEW-STATE.
|
||||
@@ -614,12 +653,13 @@ RECURSIVE: Bool"
|
||||
(treemacs--git-status-process (file-truename path) project)
|
||||
(or git-future (treemacs--git-status-process path project))))
|
||||
(collapse-future (treemacs--collapsed-dirs-process path project))
|
||||
(recursive (treemacs--prefix-arg-to-recurse-depth recursive)))
|
||||
(recursive (treemacs--prefix-arg-to-recurse-depth recursive))
|
||||
(dir-name (treemacs--filename path)))
|
||||
(treemacs--button-open
|
||||
:immediate-insert nil
|
||||
:button btn
|
||||
:new-state 'dir-node-open
|
||||
:new-icon treemacs-icon-dir-open
|
||||
:new-icon (treemacs-icon-for-dir dir-name 'open)
|
||||
:open-action
|
||||
(progn
|
||||
;; do on-expand first so buttons that need collapsing can quickly find their parent
|
||||
@@ -640,14 +680,15 @@ RECURSIVE: Bool"
|
||||
(defun treemacs--collapse-dir-node (btn &optional recursive)
|
||||
"Close node given by BTN.
|
||||
Remove all open dir and tag entries under BTN when RECURSIVE."
|
||||
(treemacs--button-close
|
||||
:button btn
|
||||
:new-state 'dir-node-closed
|
||||
:new-icon treemacs-icon-dir-closed
|
||||
:post-close-action
|
||||
(-let [path (treemacs-button-get btn :path)]
|
||||
(treemacs--stop-watching path)
|
||||
(treemacs-on-collapse path recursive))))
|
||||
(-let [path (treemacs-button-get btn :path)]
|
||||
(treemacs--button-close
|
||||
:button btn
|
||||
:new-state 'dir-node-closed
|
||||
:new-icon (treemacs-icon-for-dir (treemacs--filename path) 'closed)
|
||||
:post-close-action
|
||||
(progn
|
||||
(treemacs--stop-watching path)
|
||||
(treemacs-on-collapse path recursive)))))
|
||||
|
||||
(defun treemacs--root-face (project)
|
||||
"Get the face to be used for PROJECT."
|
||||
@@ -1021,13 +1062,12 @@ DEPTH: Int"
|
||||
(let* ((strs)
|
||||
(face))
|
||||
(if (file-directory-p ,path)
|
||||
(setf strs (treemacs--create-dir-button-strings
|
||||
,path
|
||||
(concat prefix treemacs-icon-dir-closed)
|
||||
,parent
|
||||
,depth)
|
||||
face 'treemacs-directory-face)
|
||||
(setf strs (treemacs--create-file-button-strings ,path prefix ,parent ,depth)
|
||||
(setf
|
||||
strs (treemacs--create-dir-button-strings
|
||||
,path prefix ,parent ,depth)
|
||||
face 'treemacs-directory-face)
|
||||
(setf strs (treemacs--create-file-button-strings
|
||||
,path prefix ,parent ,depth)
|
||||
face 'treemacs-file-face))
|
||||
(-let [last (-last-item strs)]
|
||||
(put-text-property 0 (length last) 'face face last))
|
||||
@@ -1168,7 +1208,7 @@ GIT-INFO is passed through from the previous branch build."
|
||||
('file-node-closed (treemacs--expand-file-node btn))
|
||||
('tag-node-closed (treemacs--expand-tag-node btn))
|
||||
('root-node-closed (treemacs--expand-root-node btn))
|
||||
(other (funcall (alist-get other treemacs-TAB-actions-config) btn))))
|
||||
(other (funcall (alist-get other treemacs-TAB-actions-config)))))
|
||||
|
||||
(defun treemacs--show-single-project (path name)
|
||||
"Show only a project for the given PATH and NAME in the current workspace."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -45,9 +45,6 @@
|
||||
(treemacs-import-functions-from "treemacs-filewatch-mode"
|
||||
treemacs--stop-filewatch-for-current-buffer)
|
||||
|
||||
(treemacs-import-functions-from "treemacs-visuals"
|
||||
treemacs--tear-down-icon-highlight)
|
||||
|
||||
(treemacs-import-functions-from "treemacs-interface"
|
||||
treemacs-quit
|
||||
treemacs-select-window)
|
||||
@@ -180,7 +177,6 @@ NEW-SCOPE-TYPE: T: treemacs-scope"
|
||||
|
||||
(defun treemacs--on-buffer-kill ()
|
||||
"Cleanup to run when a treemacs buffer is killed."
|
||||
(treemacs--tear-down-icon-highlight)
|
||||
(when (eq t treemacs--in-this-buffer)
|
||||
;; stop watch must come first since we need a reference to the killed buffer
|
||||
;; to remove it from the filewatch list
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from subprocess import Popen, PIPE, DEVNULL
|
||||
from subprocess import run, Popen, PIPE, DEVNULL, check_output
|
||||
import sys
|
||||
import os
|
||||
|
||||
@@ -65,15 +65,15 @@ def main():
|
||||
propagate_state = None
|
||||
while i < l:
|
||||
path, ignore_proc, tracked_proc, changed_proc = proc_list[i]
|
||||
if ignore_proc.wait() == 0:
|
||||
if ignore_proc.communicate() and ignore_proc.returncode == 0:
|
||||
propagate_state = "!"
|
||||
result_list.append((path, propagate_state))
|
||||
break
|
||||
elif tracked_proc.wait() == 1:
|
||||
elif tracked_proc.communicate() and tracked_proc.returncode == 1:
|
||||
propagate_state = "?"
|
||||
result_list.append((path, propagate_state))
|
||||
break
|
||||
elif (changed_proc.wait() == 0 and changed_proc.stdout.read1(1) != b''):
|
||||
elif changed_proc.communicate() != b'' and changed_proc.returncode == 0:
|
||||
result_list.append((path, "M"))
|
||||
else:
|
||||
result_list.append((path, "0"))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -99,7 +99,8 @@ should be placed under."
|
||||
(let ((buff)
|
||||
(result)
|
||||
(mode)
|
||||
(existing-buffer (get-file-buffer file))
|
||||
(existing-buffer (get-file-buffer
|
||||
(or (file-symlink-p file) file)))
|
||||
(org-imenu-depth (max 10 (or 0 (and (boundp 'org-imenu-depth) org-imenu-depth)))))
|
||||
(ignore org-imenu-depth)
|
||||
(if existing-buffer
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -64,7 +64,6 @@
|
||||
"Create a new (bare) theme with the given NAME.
|
||||
- ICON-DIRECTORY is the (mandatory) theme's location.
|
||||
- EXTENDS is the theme to be extended.
|
||||
- BASED-ON is the name of a theme whose icons this one should start with.
|
||||
- CONFIG is a code block to fill the created theme with icons via
|
||||
`treemacs-create-icon'."
|
||||
(declare (indent 1))
|
||||
|
||||
@@ -86,7 +86,13 @@ Set by `treemacs--async-update-part-complete'.")
|
||||
async?
|
||||
|
||||
;; used as a check when the extension is enabled
|
||||
entry-point?)
|
||||
entry-point?
|
||||
|
||||
;; callback to run when a node is expanded
|
||||
on-expand
|
||||
|
||||
;; callback to run when a node is collapsed
|
||||
on-collapse)
|
||||
|
||||
(define-inline treemacs--ext-symbol-to-instance (symbol)
|
||||
"Derive an extension instance from the given SYMBOL."
|
||||
@@ -251,7 +257,9 @@ Also pass additional DATA to predicate function.")
|
||||
no-tab?
|
||||
variadic?
|
||||
async?
|
||||
entry-point?)
|
||||
entry-point?
|
||||
on-expand
|
||||
on-collapse)
|
||||
|
||||
"Base building block for extension node setup.
|
||||
Not meant for direct use. Instead one of the following macros should be
|
||||
@@ -270,7 +278,7 @@ CHILDREN is a form to query a list of items to be rendered as children when a
|
||||
node is expanded. The node being expanded is available as a variable under the
|
||||
name `btn'. It is a `button' in the sense of the built-in button.el library
|
||||
\(really just a marker to a buffer position), so its text-properties can be
|
||||
extracted via `(treemacs-button-get node :property)' (see also MORE-PROPERTIES).
|
||||
extracted via `(treemacs-button-get btn :property)' (see also MORE-PROPERTIES).
|
||||
In addition the item (as produced by the form passed here) that was used to
|
||||
create the node will also be available under the name `item'.
|
||||
|
||||
@@ -321,7 +329,11 @@ cleanup and logging the error.
|
||||
|
||||
ENTRY-POINT indicates that the node type defined here is an entry-point for an
|
||||
extension, it will be used as a type-check when enabling an extension with e.g.
|
||||
`treemacs-enable-top-level-extension'."
|
||||
`treemacs-enable-top-level-extension'.
|
||||
|
||||
ON-EXPAND and ON-COLLAPSE are forms to be invoked at the very end of the
|
||||
expand/collapse process. They are invoked with the current `btn' as their sole
|
||||
argument."
|
||||
|
||||
(declare (indent 1))
|
||||
|
||||
@@ -348,7 +360,9 @@ extension, it will be used as a type-check when enabling an extension with e.g.
|
||||
:more-properties (lambda (&optional btn item) "" (ignore item) (ignore btn) ,more-properties)
|
||||
:child-type (lambda () "" (symbol-value ',child-name))
|
||||
:open-state (lambda () "" ',open-state)
|
||||
:closed-state (lambda () "" ',closed-state)))
|
||||
:closed-state (lambda () "" ',closed-state)
|
||||
:on-expand (lambda (&optional btn ) "" (ignore btn) ,on-expand)
|
||||
:on-collapse (lambda (&optional btn ) "" (ignore btn) ,on-collapse)))
|
||||
|
||||
(treemacs-define-TAB-action
|
||||
',closed-state
|
||||
@@ -412,13 +426,15 @@ For a detailed description of all arguments see
|
||||
child-type
|
||||
more-properties
|
||||
ret-action
|
||||
on-expand
|
||||
on-collapse
|
||||
async?)
|
||||
|
||||
"Define a general-purpose expandable node-type.
|
||||
The NAME, CLOSED-ICON, OPEN-ICON LABEL, KEY, CHILDREN and CHILD-TYPE arguments
|
||||
are mandatory.
|
||||
|
||||
MORE-PROPERTIES, RET-ACTION and ASYNC are optional.
|
||||
MORE-PROPERTIES, RET-ACTION, ON-EXPAND, ON-COLLAPSE and ASYNC are optional.
|
||||
|
||||
For a detailed description of all arguments see
|
||||
`treemacs-do-define-extension-type'."
|
||||
@@ -441,7 +457,9 @@ For a detailed description of all arguments see
|
||||
:child-type ,child-type
|
||||
:more-properties ,more-properties
|
||||
:ret-action ,ret-action
|
||||
:async? ,async?))
|
||||
:async? ,async?
|
||||
:on-expand ,on-expand
|
||||
:on-collapse ,on-collapse))
|
||||
|
||||
(cl-defmacro treemacs-define-entry-node-type
|
||||
(name &key
|
||||
@@ -453,6 +471,8 @@ For a detailed description of all arguments see
|
||||
child-type
|
||||
more-properties
|
||||
ret-action
|
||||
on-expand
|
||||
on-collapse
|
||||
async?)
|
||||
|
||||
"Define a node type with NAME that serves as an entry-point for an extension.
|
||||
@@ -460,7 +480,7 @@ For a detailed description of all arguments see
|
||||
The KEY, LABEL, OPEN-ICON CLOSED-ICON, CHILDREN and CHILD-TYPE arguments are
|
||||
mandatory.
|
||||
|
||||
MORE-PROPERTIES, RET-ACTION and ASYNC are optional.
|
||||
MORE-PROPERTIES, RET-ACTION, ON-EXPAND, ON-COLLAPSE and ASYNC are optional.
|
||||
|
||||
For a detailed description of all arguments see
|
||||
`treemacs-do-define-extension-type'."
|
||||
@@ -484,6 +504,8 @@ For a detailed description of all arguments see
|
||||
:more-properties ,more-properties
|
||||
:async? ,async?
|
||||
:ret-action ,ret-action
|
||||
:on-expand ,on-expand
|
||||
:on-collapse ,on-collapse
|
||||
:entry-point? t))
|
||||
|
||||
(cl-defmacro treemacs-define-variadic-entry-node-type
|
||||
@@ -746,7 +768,8 @@ If a prefix ARG is provided expand recursively."
|
||||
((treemacs-extension->async? ext)
|
||||
(treemacs--do-expand-async-extension-node btn ext arg))
|
||||
(t
|
||||
(treemacs--do-expand-extension-node btn ext nil arg))))))))
|
||||
(treemacs--do-expand-extension-node btn ext nil arg)))
|
||||
(treemacs-extension->get ext :on-expand btn))))))
|
||||
|
||||
(defun treemacs-collapse-extension-node (&optional arg)
|
||||
"Collapse a node created with the extension api.
|
||||
@@ -757,7 +780,8 @@ If a prefix ARG is provided expand recursively."
|
||||
(ext (alist-get state treemacs--extension-registry)))
|
||||
(when (null ext)
|
||||
(error "No extension is registered for state '%s'" state))
|
||||
(treemacs--do-collapse-extension-node btn ext arg)))
|
||||
(treemacs--do-collapse-extension-node btn ext arg)
|
||||
(treemacs-extension->get ext :on-collapse btn)))
|
||||
|
||||
(defun treemacs--do-expand-async-extension-node (btn ext &optional arg)
|
||||
"Expand an async extension node BTN for the given extension EXT.
|
||||
@@ -1055,7 +1079,7 @@ switched over to `treemacs-mode'."
|
||||
(let ((instance (treemacs--ext-symbol-to-instance ',extension)))
|
||||
(treemacs-static-assert
|
||||
(and instance (treemacs-extension->variadic? instance))
|
||||
"%s is not a variadic extension" ,extension)
|
||||
"%s is not a variadic extension" ',extension)
|
||||
instance)
|
||||
(if (numberp ,with-expand-depth) ,with-expand-depth 999))
|
||||
(goto-char 1)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -39,9 +39,6 @@
|
||||
(treemacs-import-functions-from "treemacs-icons"
|
||||
treemacs-get-icon-value)
|
||||
|
||||
(defvar-local treemacs--last-highlight nil
|
||||
"The last button treemacs has highlighted.")
|
||||
|
||||
(defvar-local treemacs--indentation-string-cache-key nil
|
||||
"Cache key for `treemacs--indentation-string-cache.")
|
||||
(defvar-local treemacs--indentation-string-cache (vector)
|
||||
@@ -54,71 +51,10 @@
|
||||
Used to save the values of `treemacs-indentation' and
|
||||
`treemacs-indentation-string'.")
|
||||
|
||||
(define-inline treemacs--forget-last-highlight ()
|
||||
"Set `treemacs--last-highlight' to nil."
|
||||
(inline-quote (setq treemacs--last-highlight nil)))
|
||||
|
||||
(defun treemacs--setup-icon-highlight ()
|
||||
"Make sure treemacs icons background aligns with hi-line's."
|
||||
(advice-add #'hl-line-highlight :after #'treemacs--update-icon-selection)
|
||||
(advice-add #'enable-theme :after #'treemacs--setup-icon-background-colors)
|
||||
(advice-add #'disable-theme :after #'treemacs--setup-icon-background-colors))
|
||||
|
||||
(defun treemacs--tear-down-icon-highlight ()
|
||||
"Tear down highlighting advice when no treemacs buffer exists anymore."
|
||||
(treemacs--forget-last-highlight)
|
||||
(unless (or treemacs--scope-storage
|
||||
(--any (buffer-local-value 'treemacs--in-this-buffer it)
|
||||
(buffer-list)))
|
||||
(advice-remove #'hl-line-highlight #'treemacs--update-icon-selection)
|
||||
(advice-remove #'enable-theme #'treemacs--setup-icon-background-colors)
|
||||
(advice-remove #'disable-theme #'treemacs--setup-icon-background-colors)))
|
||||
|
||||
(defun treemacs--update-icon-selection ()
|
||||
"Highlight current icon, un-highlight `treemacs--last-highlight'."
|
||||
(when treemacs--in-this-buffer
|
||||
(condition-case e
|
||||
(progn
|
||||
(when treemacs-fringe-indicator-mode
|
||||
(treemacs--move-fringe-indicator-to-point))
|
||||
(-when-let (btn (treemacs-current-button))
|
||||
(let* ((pos (max (line-beginning-position) (- (treemacs-button-start btn) 2)))
|
||||
(img-selected (get-text-property pos 'img-selected)))
|
||||
(treemacs-with-writable-buffer
|
||||
(when (and treemacs--last-highlight
|
||||
(> (point-max) treemacs--last-highlight))
|
||||
(let* ((last-pos (- (treemacs-button-start treemacs--last-highlight) 2))
|
||||
(img-unselected (get-text-property last-pos 'img-unselected)))
|
||||
(put-text-property last-pos (1+ last-pos) 'display img-unselected)))
|
||||
(when img-selected
|
||||
(put-text-property pos (1+ pos) 'display img-selected)
|
||||
(setq treemacs--last-highlight btn))))))
|
||||
(error
|
||||
(treemacs-log-err "Error on highlight, this shouldn't happen: %s" e)))))
|
||||
|
||||
(defun treemacs--pulse-png-advice (&rest _)
|
||||
"Make sure icons' background are pulsed alongside the entire line."
|
||||
(when (eq 'treemacs-mode major-mode)
|
||||
(treemacs-with-writable-buffer
|
||||
(-when-let (btn (treemacs-current-button))
|
||||
(let* ((start (max (line-beginning-position) (- (treemacs-button-start btn) 2)))
|
||||
(end (1+ start))
|
||||
(img (get-text-property start 'display))
|
||||
(cp (copy-sequence img)))
|
||||
;; Icons may not always be images, as extensions may use text and e.g.
|
||||
;; all-the-icons font icons as the icon.
|
||||
(when (eq (car-safe cp) 'image)
|
||||
(treemacs--set-img-property cp :background
|
||||
(face-attribute
|
||||
(overlay-get pulse-momentary-overlay 'face)
|
||||
:background nil t))
|
||||
(put-text-property start end 'display cp)))))))
|
||||
|
||||
(defun treemacs--do-pulse (face)
|
||||
"Visually pulse current line using FACE."
|
||||
(pulse-momentary-highlight-one-line (point) face)
|
||||
(advice-add 'pulse-momentary-unhighlight :after #'hl-line-highlight)
|
||||
(advice-add 'pulse-lighten-highlight :after #'treemacs--pulse-png-advice))
|
||||
(advice-add 'pulse-momentary-unhighlight :after #'hl-line-highlight))
|
||||
|
||||
(defsubst treemacs-pulse-on-success (&rest log-args)
|
||||
"Pulse current line with `treemacs-on-success-pulse-face'.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
;;; treemacs.el --- A tree style file viewer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -58,7 +58,6 @@
|
||||
treemacs--maybe-load-workspaces)
|
||||
|
||||
(treemacs-import-functions-from "treemacs-visuals"
|
||||
treemacs--forget-last-highlight
|
||||
treemacs-pulse-on-failure)
|
||||
|
||||
(treemacs-import-functions-from "treemacs-async"
|
||||
@@ -76,9 +75,11 @@
|
||||
(:conc-name treemacs-workspace->)
|
||||
(:constructor treemacs-workspace->create!))
|
||||
name
|
||||
projects)
|
||||
projects
|
||||
is-disabled?)
|
||||
|
||||
(defvar treemacs--workspaces (list (treemacs-workspace->create! :name "Default")))
|
||||
(defvar treemacs--disabled-workspaces (list))
|
||||
|
||||
(defvar treemacs--find-user-project-functions
|
||||
(list #'treemacs--current-builtin-project-function
|
||||
@@ -123,6 +124,11 @@ To be called whenever a project or workspace changes."
|
||||
(declare (side-effect-free t))
|
||||
(inline-quote treemacs--workspaces))
|
||||
|
||||
(define-inline treemacs-disabled-workspaces ()
|
||||
"Return the list of all workspaces in treemacs that are disabled."
|
||||
(declare (side-effect-free t))
|
||||
(inline-quote treemacs--disabled-workspaces))
|
||||
|
||||
(defun treemacs-current-workspace ()
|
||||
"Get the current workspace.
|
||||
The return value can be overridden by let-binding `treemacs-override-workspace'.
|
||||
@@ -281,7 +287,6 @@ Does not preserve the current position in the buffer."
|
||||
(when (treemacs-project->is-expanded? self)
|
||||
(let ((root-btn (treemacs-project->position self)))
|
||||
(goto-char root-btn)
|
||||
(treemacs--forget-last-highlight)
|
||||
(funcall (alist-get (treemacs-button-get root-btn :state)
|
||||
treemacs-TAB-actions-config))
|
||||
(unless (treemacs-project->is-unreadable? self)
|
||||
@@ -603,7 +608,6 @@ Return values may be as follows:
|
||||
(if (equal (point-min) prev-project-pos)
|
||||
(goto-char next-project-pos)
|
||||
(goto-char prev-project-pos)))
|
||||
(treemacs--forget-last-highlight)
|
||||
(treemacs--invalidate-buffer-project-cache)
|
||||
(--when-let (treemacs-get-local-window)
|
||||
(with-selected-window it
|
||||
@@ -655,8 +659,12 @@ Return values may be as follows:
|
||||
(treemacs-return
|
||||
`(success ,new-workspace)))))
|
||||
|
||||
(defun treemacs-do-rename-workspace ()
|
||||
(defun treemacs-do-rename-workspace (&optional workspace new-name)
|
||||
"Rename a workspace.
|
||||
|
||||
Takes either a WORKSPACE and a NEW-NAME as arguments or reads them
|
||||
interactively.
|
||||
|
||||
Return values may be as follows:
|
||||
|
||||
* If the given name is invalid:
|
||||
@@ -667,19 +675,23 @@ Return values may be as follows:
|
||||
- the old-name
|
||||
- the renamed workspace"
|
||||
(treemacs-block
|
||||
(let* ((current-ws (treemacs-current-workspace))
|
||||
(old-name (treemacs-workspace->name current-ws))
|
||||
(name-map (-> (--map (cons (treemacs-workspace->name it) it) treemacs--workspaces)
|
||||
(sort (lambda (n _) (string= (car n) old-name)))))
|
||||
(str-to-rename (completing-read "Rename: " name-map))
|
||||
(ws-to-rename (cdr (assoc str-to-rename name-map)))
|
||||
(new-name (treemacs--read-string "New name: ")))
|
||||
(let ((old-name))
|
||||
(unless workspace
|
||||
(let* ((current-ws (treemacs-current-workspace))
|
||||
(old-name (treemacs-workspace->name current-ws))
|
||||
(name-map (-> (--map (cons (treemacs-workspace->name it) it) treemacs--workspaces)
|
||||
(sort (lambda (n _) (string= (car n) old-name)))))
|
||||
(str-to-rename (completing-read "Rename: " name-map)))
|
||||
(setf workspace (cdr (assoc str-to-rename name-map)))))
|
||||
(setf old-name (treemacs-workspace->name workspace))
|
||||
(unless new-name
|
||||
(setf new-name (treemacs--read-string "New name: ")))
|
||||
(treemacs-return-if (treemacs--is-name-invalid? new-name)
|
||||
`(invalid-name ,new-name))
|
||||
(setf (treemacs-workspace->name ws-to-rename) new-name)
|
||||
(setf (treemacs-workspace->name workspace) new-name)
|
||||
(treemacs--persist)
|
||||
(run-hook-with-args 'treemacs-rename-workspace-functions ws-to-rename old-name)
|
||||
`(success ,old-name ,ws-to-rename))))
|
||||
(run-hook-with-args 'treemacs-rename-workspace-functions workspace old-name)
|
||||
`(success ,old-name ,workspace))))
|
||||
|
||||
(defun treemacs--is-name-invalid? (name)
|
||||
"Validate the NAME of a project or workspace.
|
||||
@@ -750,7 +762,6 @@ PROJECT: Project Struct"
|
||||
(ht-remove! treemacs-dom (treemacs-project->path project-in-buffer))
|
||||
(setf projects-in-buffer (delete project-in-buffer projects-in-buffer))))
|
||||
(treemacs-with-writable-buffer
|
||||
(treemacs--forget-last-highlight)
|
||||
(treemacs--reset-dom)
|
||||
;; delete everything's that's visible and render it again - the order of projects could
|
||||
;; have been changed
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
;;; treemacs.el --- A tree style file explorer package -*- lexical-binding: t -*-
|
||||
|
||||
;; Copyright (C) 2022 Alexander Miller
|
||||
;; Copyright (C) 2023 Alexander Miller
|
||||
|
||||
;; Author: Alexander Miller <alexanderm@web.de>
|
||||
;; Package-Requires: ((emacs "26.1") (cl-lib "0.5") (dash "2.11.0") (s "1.12.0") (ace-window "0.9.0") (pfuture "1.7") (hydra "0.13.2") (ht "2.2") (cfrs "1.3.2"))
|
||||
;; Homepage: https://github.com/Alexander-Miller/treemacs
|
||||
;; Version: 3.0
|
||||
;; Version: 3.1
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
(defconst treemacs-version
|
||||
(eval-when-compile
|
||||
(format "v3.0 (installed %s) @ Emacs %s"
|
||||
(format "v3.1 (installed %s) @ Emacs %s"
|
||||
(format-time-string "%Y.%m.%d" (current-time))
|
||||
emacs-version)))
|
||||
|
||||
@@ -256,8 +256,11 @@ workspace."
|
||||
(name (treemacs--filename path))
|
||||
(ws (treemacs-current-workspace)))
|
||||
(treemacs-return-if
|
||||
(and (= 1 (length (treemacs-workspace->projects ws)))
|
||||
(treemacs-is-path path :in-workspace ws))
|
||||
(-let [projects (treemacs-workspace->projects ws)]
|
||||
(and (= 1 (length projects))
|
||||
(string=
|
||||
path
|
||||
(treemacs-project->path (car projects)))))
|
||||
(treemacs-select-window))
|
||||
(treemacs--show-single-project path name)
|
||||
(treemacs-pulse-on-success "Now showing %s"
|
||||
|
||||