Skip to content

Commit bc003f3

Browse files
Emojis: option to use custom mapping
1 parent 7740f1f commit bc003f3

File tree

23 files changed

+728
-124
lines changed

23 files changed

+728
-124
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
---
99
## [0.0.6] - Unreleased
1010

11+
### Added
12+
- Emojis: option to use custom mapping
13+
1114
### Changed
1215
- Child limit: do not print skipped children count
1316
- Max depth: do not print "max depth reached"

README.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,13 +167,13 @@ sorting/
167167
```
168168

169169
## Emojis ❤️
170-
If your terminal supports them, you can choose to use emojis.
170+
You can choose to use default built-in emojis, or define your own emoji mapping.
171171
Folders use the 📂 emoji, and files will have an emoji depending on their extension (when applicable).
172172

173173
```java
174174
// Example: Emojis.java
175175
var prettyPrinter = FileTreePrettyPrinter.builder()
176-
.customizeOptions(options -> options.withEmojis(true))
176+
.customizeOptions(options -> options.withDefaultEmojis()) // or withEmojis(EmojiMapping) for custom mapping
177177
.build();
178178
```
179179

@@ -194,9 +194,6 @@ var prettyPrinter = FileTreePrettyPrinter.builder()
194194
└─ 🎬 file.avi
195195
```
196196

197-
> [!TIP]
198-
> *Idea for a future version: option to allow custom emoji mapping*
199-
200197
## Child limit
201198
You can set a fixed limit to the number of children displayed for each directory. Each directory and file that pass the filter (if set) counts for one.
202199

ROADMAP.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- [x] Option: filtering
66
- [x] Option: ordering
77
- [x] Option: emojis
8+
- [x] Option: custom emojis mapping
89
- [x] Option: compact directories display
910
- [x] Option: line extension (=additional text after the file name)
1011
- [x] Option: children limit (static & dynamic)
@@ -31,12 +32,10 @@
3132
- [x] Publish on Maven Central!
3233

3334
## To do
34-
- [ ] Option: hide number of skipped files and folders for child limit
35-
- [ ] Option: custom emojis
36-
- [ ] Rework/fix Github wiki to be up to date
35+
- [ ] Option: custom tree format
3736

3837
## Backlog / To analyze / To implement if requested
39-
- [ ] Option: custom tree format
38+
- [ ] Rework/fix Github wiki to be up to date
4039
- [ ] Refactor unit tests (custom assert?)
4140
- [ ] Option: color
4241
- [ ] Option: Filename decorator

src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class Emojis {
66

77
public static void main(String[] args) {
88
var prettyPrinter = FileTreePrettyPrinter.builder()
9-
.customizeOptions(options -> options.withEmojis(true))
9+
.customizeOptions(options -> options.withDefaultEmojis())
1010
.build();
1111
var tree = prettyPrinter.prettyPrint("src/example/resources/emojis");
1212
System.out.println(tree);

src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public static void main(String[] args) {
8787
var prettyPrinter = FileTreePrettyPrinter.builder()
8888
.customizeOptions(
8989
options -> options
90-
.withEmojis(true) // Use emojis!
90+
.withDefaultEmojis() // Use emojis!
9191
.withCompactDirectories(true) // Inline directory chains: "src/main/java/..."
9292
.filterDirectories(dirFilter)
9393
.filterFiles(fileFilter)

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PrettyPrintOptions.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.computerdaddyguy.jfiletreeprettyprinter;
22

33
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.RenderingOptions;
4+
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji.EmojiMapping;
45
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.ScanningOptions;
56
import java.nio.file.Path;
67
import java.nio.file.PathMatcher;
@@ -95,21 +96,28 @@ public PrettyPrintOptions withTreeFormat(TreeFormat treeFormat) {
9596

9697
// ---------- Emojis ----------
9798

98-
private boolean emojis = false;
99+
private EmojiMapping emojiMapping = EmojiMapping.none();
99100

100101
@Override
101-
public boolean areEmojisUsed() {
102-
return emojis;
102+
public EmojiMapping getEmojiMapping() {
103+
return emojiMapping;
103104
}
104105

105106
/**
106-
* Whether or not use emojis in directory/filename rendering. Not all terminals supports emojis.
107-
* Default is {@code false}.
107+
* Use default emojis for directory/filename rendering.
108+
*/
109+
public PrettyPrintOptions withDefaultEmojis() {
110+
this.emojiMapping = EmojiMapping.createDefault();
111+
return this;
112+
}
113+
114+
/**
115+
* Use the given emojis mapping for directory/filename rendering.
108116
*
109-
* @param useEmojis {@code true} to use emojis, {@code false} otherwise.
117+
* @see EmojiMapping
110118
*/
111-
public PrettyPrintOptions withEmojis(boolean useEmojis) {
112-
this.emojis = useEmojis;
119+
public PrettyPrintOptions withEmojis(EmojiMapping mapping) {
120+
this.emojiMapping = Objects.requireNonNull(mapping, "mapping is null");
113121
return this;
114122
}
115123

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/file/DefaultFileFormatter.java renamed to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultFileFormatter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.file;
1+
package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer;
22

33
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.DirectoryEntry;
44
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.FileEntry;

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.depth.Depth;
44
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.depth.DepthFormatter;
5-
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.file.FileFormatter;
65
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.DirectoryEntry;
76
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.FileEntry;
87
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.MaxDepthReachEntry;

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/file/EmojiFileFormatter.java renamed to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/EmojiFileFormatter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.file;
1+
package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer;
22

3+
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji.EmojiMapping;
34
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.DirectoryEntry;
45
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.FileEntry;
56
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.MaxDepthReachEntry;
@@ -22,7 +23,7 @@ public EmojiFileFormatter(FileFormatter decorated, EmojiMapping emojiMapping) {
2223
}
2324

2425
private String getFileEmojiPrefix(Path p) {
25-
var emoji = emojiMapping.getFileEmoji(p);
26+
var emoji = emojiMapping.getPathEmoji(p);
2627
return getEmojiPrefix(emoji);
2728
}
2829

src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/file/FileFormatter.java renamed to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/FileFormatter.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.file;
1+
package io.github.computerdaddyguy.jfiletreeprettyprinter.renderer;
22

3+
import io.github.computerdaddyguy.jfiletreeprettyprinter.renderer.emoji.EmojiMapping;
34
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.DirectoryEntry;
45
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.FileEntry;
56
import io.github.computerdaddyguy.jfiletreeprettyprinter.scanner.TreeEntry.MaxDepthReachEntry;
@@ -9,7 +10,7 @@
910
import org.jspecify.annotations.NullMarked;
1011

1112
@NullMarked
12-
public interface FileFormatter {
13+
interface FileFormatter {
1314

1415
String formatDirectoryBegin(DirectoryEntry dirEntry, List<Path> dirs);
1516

@@ -23,10 +24,6 @@ static FileFormatter createDefault() {
2324
return new DefaultFileFormatter();
2425
}
2526

26-
static FileFormatter wrapWithEmojis(FileFormatter decorated) {
27-
return wrapWithEmojis(decorated, EmojiMapping.createDefault());
28-
}
29-
3027
static FileFormatter wrapWithEmojis(FileFormatter decorated, EmojiMapping emojiMapping) {
3128
return new EmojiFileFormatter(decorated, emojiMapping);
3229
}

0 commit comments

Comments
 (0)