update of packages

This commit is contained in:
2023-11-04 19:26:41 +01:00
parent e162a12b58
commit 3b54a3236d
726 changed files with 297673 additions and 34585 deletions

View File

@@ -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

View 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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View 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

View 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_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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1001 B

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 982 B

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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

View 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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 977 B

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 999 B

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View 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

View 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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View 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

View 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

View 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

View File

@@ -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)

View File

@@ -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'."

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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()

View File

@@ -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."

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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."

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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."

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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))

View File

@@ -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)]

View File

@@ -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

View File

@@ -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"

View File

@@ -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")

View File

@@ -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.

View File

@@ -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."

View File

@@ -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

View File

@@ -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"))

View File

@@ -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

View File

@@ -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

View File

@@ -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))

View File

@@ -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)

View File

@@ -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'.

View File

@@ -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

View File

@@ -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"