Add .config/DankMaterialShell/firefox.css
Add .config/DankMaterialShell/plugin_settings.json Add .config/DankMaterialShell/plugins/calculator/CalculatorLauncher.qml Add .config/DankMaterialShell/plugins/calculator/CalculatorSettings.qml Add .config/DankMaterialShell/plugins/calculator/README.md Add .config/DankMaterialShell/plugins/calculator/calculator.js Add .config/DankMaterialShell/plugins/calculator/.git/HEAD Add .config/DankMaterialShell/plugins/calculator/.git/config Add .config/DankMaterialShell/plugins/calculator/.git/index Add .config/DankMaterialShell/plugins/calculator/.git/objects/info/.keep Add .config/DankMaterialShell/plugins/calculator/.git/objects/pack/pack-67f644835e660794f65c9273e46788b0c3da57cf.idx Add .config/DankMaterialShell/plugins/calculator/.git/objects/pack/pack-67f644835e660794f65c9273e46788b0c3da57cf.rev Add .config/DankMaterialShell/plugins/calculator/.git/objects/pack/pack-67f644835e660794f65c9273e46788b0c3da57cf.pack Add .config/DankMaterialShell/plugins/calculator/.git/refs/heads/main Add .config/DankMaterialShell/plugins/calculator/.git/refs/remotes/origin/main Add .config/DankMaterialShell/plugins/calculator/.git/refs/remotes/origin/qalc Add .config/DankMaterialShell/plugins/calculator/.git/refs/tags/.keep Add .config/DankMaterialShell/plugins/calculator/plugin.json Add .config/DankMaterialShell/plugins/calculator/screenshot.png Add .config/DankMaterialShell/plugins/calculator/test_precision.js Add .config/DankMaterialShell/plugins/calculator/test_single.js Add .config/DankMaterialShell/plugins/commandRunner/CommandRunner.qml Add .config/DankMaterialShell/plugins/commandRunner/CommandRunnerSettings.qml Add .config/DankMaterialShell/plugins/commandRunner/LICENSE Add .config/DankMaterialShell/plugins/commandRunner/README.md Add .config/DankMaterialShell/plugins/commandRunner/.git/HEAD Add .config/DankMaterialShell/plugins/commandRunner/.git/config Add .config/DankMaterialShell/plugins/commandRunner/.git/index Add .config/DankMaterialShell/plugins/commandRunner/.git/objects/info/.keep Add .config/DankMaterialShell/plugins/commandRunner/.git/objects/pack/pack-5a720f795fd2994ef506cd867d86ca7df8a25a31.idx Add .config/DankMaterialShell/plugins/commandRunner/.git/objects/pack/pack-5a720f795fd2994ef506cd867d86ca7df8a25a31.rev Add .config/DankMaterialShell/plugins/commandRunner/.git/objects/pack/pack-5a720f795fd2994ef506cd867d86ca7df8a25a31.pack Add .config/DankMaterialShell/plugins/commandRunner/.git/refs/heads/main Add .config/DankMaterialShell/plugins/commandRunner/.git/refs/remotes/origin/main Add .config/DankMaterialShell/plugins/commandRunner/.git/refs/tags/.keep Add .config/DankMaterialShell/plugins/commandRunner/plugin.json Add .config/DankMaterialShell/plugins/commandRunner/screenshot.png Add .config/DankMaterialShell/plugins/dankActions.meta Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankActions/DankActionsSettings.qml Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankActions/DankActionsWidget.qml Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankActions/plugin.json Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankBatteryAlerts/DankBatteryAlerts.qml Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankBatteryAlerts/DankBatteryAlertsSettings.qml Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankBatteryAlerts/plugin.json Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankHooks/DankHooks.qml Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankHooks/DankHooksSettings.qml Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankHooks/README.md Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankHooks/plugin.json Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankPomodoroTimer/DankPomodoroSettings.qml Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankPomodoroTimer/DankPomodoroWidget.qml Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/DankPomodoroTimer/plugin.json Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/LICENSE Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/README.md Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/HEAD Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/config Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/index Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/objects/info/.keep Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/objects/pack/pack-3221a15c022ef4a7bb6bf2c47e40068b66b3588b.idx Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/objects/pack/pack-3221a15c022ef4a7bb6bf2c47e40068b66b3588b.rev Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/objects/pack/pack-3221a15c022ef4a7bb6bf2c47e40068b66b3588b.pack Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/refs/heads/master Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/refs/remotes/origin/master Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.git/refs/tags/.keep Add .config/DankMaterialShell/plugins/.repos/0026f1eba8dedaec/.gitignore Add .config/DankMaterialShell/plugins/emojiLauncher/EmojiLauncher.qml Add .config/DankMaterialShell/plugins/emojiLauncher/EmojiLauncherSettings.qml Add .config/DankMaterialShell/plugins/emojiLauncher/LICENSE Add .config/DankMaterialShell/plugins/emojiLauncher/README.md Add .config/DankMaterialShell/plugins/emojiLauncher/catalog.js Add .config/DankMaterialShell/plugins/emojiLauncher/data/emojis.txt Add .config/DankMaterialShell/plugins/emojiLauncher/data/math.txt Add .config/DankMaterialShell/plugins/emojiLauncher/data/nerdfont.txt Add .config/DankMaterialShell/plugins/emojiLauncher/.git/HEAD Add .config/DankMaterialShell/plugins/emojiLauncher/.git/config Add .config/DankMaterialShell/plugins/emojiLauncher/.git/index Add .config/DankMaterialShell/plugins/emojiLauncher/.git/objects/info/.keep Add .config/DankMaterialShell/plugins/emojiLauncher/.git/objects/pack/pack-e04a5b1ea381dc3a792b8bf08cf70e735b195c0d.idx Add .config/DankMaterialShell/plugins/emojiLauncher/.git/objects/pack/pack-e04a5b1ea381dc3a792b8bf08cf70e735b195c0d.rev Add .config/DankMaterialShell/plugins/emojiLauncher/.git/objects/pack/pack-e04a5b1ea381dc3a792b8bf08cf70e735b195c0d.pack Add .config/DankMaterialShell/plugins/emojiLauncher/.git/refs/heads/main Add .config/DankMaterialShell/plugins/emojiLauncher/.git/refs/remotes/origin/main Add .config/DankMaterialShell/plugins/emojiLauncher/.git/refs/tags/.keep Add .config/DankMaterialShell/plugins/emojiLauncher/plugin.json Add .config/DankMaterialShell/plugins/emojiLauncher/screenshot.png Add .config/DankMaterialShell/plugins/emojiLauncher/scripts/generate_catalog.py Add .config/DankMaterialShell/plugins/dankActions Add .config/DankMaterialShell/plugins/webSearch/LICENSE Add .config/DankMaterialShell/plugins/webSearch/README.md Add .config/DankMaterialShell/plugins/webSearch/WebSearch.qml Add .config/DankMaterialShell/plugins/webSearch/WebSearchSettings.qml Add .config/DankMaterialShell/plugins/webSearch/.git/HEAD Add .config/DankMaterialShell/plugins/webSearch/.git/config Add .config/DankMaterialShell/plugins/webSearch/.git/index Add .config/DankMaterialShell/plugins/webSearch/.git/objects/info/.keep Add .config/DankMaterialShell/plugins/webSearch/.git/objects/pack/pack-6a60c736f418e5b4b1f0505f66c1e2a371d46fed.idx Add .config/DankMaterialShell/plugins/webSearch/.git/objects/pack/pack-6a60c736f418e5b4b1f0505f66c1e2a371d46fed.rev Add .config/DankMaterialShell/plugins/webSearch/.git/objects/pack/pack-6a60c736f418e5b4b1f0505f66c1e2a371d46fed.pack Add .config/DankMaterialShell/plugins/webSearch/.git/refs/heads/main Add .config/DankMaterialShell/plugins/webSearch/.git/refs/remotes/origin/main Add .config/DankMaterialShell/plugins/webSearch/.git/refs/tags/.keep Add .config/DankMaterialShell/plugins/webSearch/plugin.json Add .config/DankMaterialShell/plugins/webSearch/screenshot.png Add .config/DankMaterialShell/settings.json
This commit is contained in:
parent
b22161e0ca
commit
809b12203c
103 changed files with 25020 additions and 0 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,251 @@
|
|||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import qs.Common
|
||||
import qs.Widgets
|
||||
|
||||
FocusScope {
|
||||
id: root
|
||||
|
||||
property var pluginService: null
|
||||
|
||||
implicitHeight: settingsColumn.implicitHeight
|
||||
height: implicitHeight
|
||||
|
||||
Column {
|
||||
id: settingsColumn
|
||||
anchors.fill: parent
|
||||
anchors.margins: 16
|
||||
spacing: 16
|
||||
|
||||
StyledText {
|
||||
text: "Emoji & Unicode Launcher Settings"
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
font.weight: Font.Bold
|
||||
color: Theme.surfaceText
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: "Search and copy emojis and unicode characters directly from the launcher."
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceVariantText
|
||||
wrapMode: Text.WordWrap
|
||||
width: parent.width - 32
|
||||
}
|
||||
|
||||
StyledRect {
|
||||
width: parent.width - 32
|
||||
height: 1
|
||||
color: Theme.outlineVariant
|
||||
}
|
||||
|
||||
Column {
|
||||
spacing: 12
|
||||
width: parent.width - 32
|
||||
|
||||
StyledText {
|
||||
text: "Trigger Configuration"
|
||||
font.pixelSize: Theme.fontSizeLarge
|
||||
font.weight: Font.Medium
|
||||
color: Theme.surfaceText
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: noTriggerToggle.checked ? "Items will always show in the launcher (no trigger needed)." : "Set the trigger text to activate this plugin. Type the trigger in the launcher to filter to emojis and unicode characters."
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
wrapMode: Text.WordWrap
|
||||
width: parent.width
|
||||
}
|
||||
|
||||
Row {
|
||||
spacing: 12
|
||||
|
||||
CheckBox {
|
||||
id: noTriggerToggle
|
||||
text: "No trigger (always show)"
|
||||
checked: loadSettings("noTrigger", false)
|
||||
|
||||
contentItem: StyledText {
|
||||
text: noTriggerToggle.text
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceText
|
||||
leftPadding: noTriggerToggle.indicator.width + 8
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
indicator: StyledRect {
|
||||
implicitWidth: 20
|
||||
implicitHeight: 20
|
||||
radius: Theme.cornerRadiusSmall
|
||||
border.color: noTriggerToggle.checked ? Theme.primary : Theme.outline
|
||||
border.width: 2
|
||||
color: noTriggerToggle.checked ? Theme.primary : "transparent"
|
||||
|
||||
StyledRect {
|
||||
width: 12
|
||||
height: 12
|
||||
anchors.centerIn: parent
|
||||
radius: 2
|
||||
color: Theme.onPrimary
|
||||
visible: noTriggerToggle.checked
|
||||
}
|
||||
}
|
||||
|
||||
onCheckedChanged: {
|
||||
saveSettings("noTrigger", checked)
|
||||
if (checked) {
|
||||
saveSettings("trigger", "")
|
||||
} else {
|
||||
saveSettings("trigger", triggerField.text || ":")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Row {
|
||||
spacing: 12
|
||||
anchors.left: parent.left
|
||||
anchors.right: parent.right
|
||||
visible: !noTriggerToggle.checked
|
||||
|
||||
StyledText {
|
||||
text: "Trigger:"
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
color: Theme.surfaceText
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
DankTextField {
|
||||
id: triggerField
|
||||
width: 100
|
||||
height: 40
|
||||
text: loadSettings("trigger", ":")
|
||||
placeholderText: ":"
|
||||
backgroundColor: Theme.surfaceContainer
|
||||
textColor: Theme.surfaceText
|
||||
|
||||
onTextEdited: {
|
||||
const newTrigger = text.trim()
|
||||
saveSettings("trigger", newTrigger || ":")
|
||||
saveSettings("noTrigger", newTrigger === "")
|
||||
}
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: "Examples: :, ;, /emoji, etc."
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
StyledRect {
|
||||
width: parent.width - 32
|
||||
height: 1
|
||||
color: Theme.outlineVariant
|
||||
}
|
||||
|
||||
Column {
|
||||
spacing: 8
|
||||
width: parent.width - 32
|
||||
|
||||
StyledText {
|
||||
text: "Features:"
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
font.weight: Font.Medium
|
||||
color: Theme.surfaceText
|
||||
}
|
||||
|
||||
Column {
|
||||
spacing: 4
|
||||
leftPadding: 16
|
||||
|
||||
StyledText {
|
||||
text: "• 1k+ emojis & unicode symbols (faces, tools, math, currency)"
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: "• Nerd Font glyph catalog for launcher / terminal icons"
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: "• Search by name, character, or keyword"
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: "• Click to copy to clipboard"
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
StyledRect {
|
||||
width: parent.width - 32
|
||||
height: 1
|
||||
color: Theme.outlineVariant
|
||||
}
|
||||
|
||||
Column {
|
||||
spacing: 8
|
||||
width: parent.width - 32
|
||||
|
||||
StyledText {
|
||||
text: "Usage:"
|
||||
font.pixelSize: Theme.fontSizeMedium
|
||||
font.weight: Font.Medium
|
||||
color: Theme.surfaceText
|
||||
}
|
||||
|
||||
Column {
|
||||
spacing: 4
|
||||
leftPadding: 16
|
||||
bottomPadding: 24
|
||||
|
||||
StyledText {
|
||||
text: "1. Open Launcher (Ctrl+Space or click launcher button)"
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: noTriggerToggle.checked ? "2. Emojis are always visible in the launcher" : "2. Type your trigger (default: :) to filter to emojis/unicode"
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: noTriggerToggle.checked ? "3. Search by typing: 'smile', 'heart', 'copyright', etc." : "3. Search by typing: ': smile', ': heart', ': copyright', etc."
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: "4. Select and press Enter to copy to clipboard"
|
||||
font.pixelSize: Theme.fontSizeSmall
|
||||
color: Theme.surfaceVariantText
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function saveSettings(key, value) {
|
||||
if (pluginService) {
|
||||
pluginService.savePluginData("emojiLauncher", key, value)
|
||||
}
|
||||
}
|
||||
|
||||
function loadSettings(key, defaultValue) {
|
||||
if (pluginService) {
|
||||
return pluginService.loadPluginData("emojiLauncher", key, defaultValue)
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2025 DankMaterialShell Contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
@ -0,0 +1,130 @@
|
|||
# Emoji & Unicode Launcher
|
||||
|
||||
A DankMaterialShell launcher plugin that provides quick access to thousands of emojis, mathematical symbols, and Nerd Font glyphs with instant clipboard copying.
|
||||
|
||||

|
||||
|
||||
## Features
|
||||
|
||||
- **Expanded Emoji Catalog** - 900+ curated emoji entries combined with the bundled emoji dataset for complete coverage (gear, toolbox, etc.)
|
||||
- **Unicode & Math Symbols** - Hundreds of useful unicode characters from arrows to operators and currency signs
|
||||
- **Nerd Font Glyphs** - Searchable Nerd Font icons for launcher, terminal, and code workflows
|
||||
- **Instant Copy** - One-click copy to clipboard with visual confirmation
|
||||
- **Smart Search** - Search by name, character, or keywords
|
||||
- **Configurable Trigger** - Default `:` or set your own trigger (or disable for always-on)
|
||||
- **Toast Notifications** - Visual feedback for every action
|
||||
|
||||
## Installation
|
||||
|
||||
### From Plugin Registry (Recommended)
|
||||
```bash
|
||||
# Coming soon - will be available via DMS plugin manager
|
||||
```
|
||||
|
||||
### Manual Installation
|
||||
```bash
|
||||
# Copy plugin to DMS plugins directory
|
||||
cp -r EmojiLauncher ~/.config/DankMaterialShell/plugins/
|
||||
|
||||
# Enable in DMS
|
||||
# 1. Open Settings (Ctrl+,)
|
||||
# 2. Go to Plugins tab
|
||||
# 3. Click "Scan for Plugins"
|
||||
# 4. Toggle "Emoji & Unicode Launcher" to enable
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### Default Trigger Mode
|
||||
1. Open launcher (Ctrl+Space)
|
||||
2. Type `:` followed by search query
|
||||
3. Examples:
|
||||
- `:smile` - Find smiling emojis
|
||||
- `:heart` - Find heart emojis
|
||||
- `:copyright` - Find © symbol
|
||||
- `:arrow` - Find arrow characters
|
||||
4. Select item and press Enter to copy
|
||||
|
||||
### Always-On Mode
|
||||
Configure in settings to show emoji/unicode items without a trigger prefix.
|
||||
|
||||
## Search Examples
|
||||
|
||||
**Emojis:**
|
||||
- `smile` → 😀 😃 😄 😁 😊
|
||||
- `heart` → ❤️ 🧡 💛 💚 💙 💜
|
||||
- `fire` → 🔥
|
||||
- `star` → ⭐ ✨ 🌟
|
||||
|
||||
**Unicode Characters:**
|
||||
- `copyright` → ©
|
||||
- `trademark` → ™
|
||||
- `degree` → °
|
||||
- `pi` → π
|
||||
- `arrow` → → ← ↑ ↓
|
||||
- `infinity` → ∞
|
||||
- `euro` → €
|
||||
|
||||
## Configuration
|
||||
|
||||
Access settings via DMS Settings → Plugins → Emoji & Unicode Launcher:
|
||||
|
||||
- **Trigger**: Set custom trigger character (`:`, `;`, `/emoji`, etc.) or disable for always-on mode
|
||||
- **No Trigger Mode**: Toggle to show items without trigger prefix
|
||||
|
||||
## Character Database
|
||||
|
||||
### Data Sources
|
||||
- `data/emojis.txt` — comprehensive emoji list (Terminal Root)
|
||||
- `data/math.txt` — math and general-purpose unicode symbols
|
||||
- `data/nerdfont.txt` — curated Nerd Font glyph export
|
||||
|
||||
All files ship with the plugin, so search works fully offline.
|
||||
|
||||
### Highlights
|
||||
- **Emoji coverage:** faces, hands, tools, activities, symbols, and flags (including gear ⚙️ and toolbox 🧰)
|
||||
- **Unicode symbols:** math operators, arrows, currency, Greek letters, quotes, and miscellaneous symbols
|
||||
- **Nerd Font glyphs:** VS Code Codicons, Powerline (ple-) separators, development icons, and other monospace-friendly glyphs for terminal/theming
|
||||
|
||||
### Updating the catalog
|
||||
1. Modify the plain-text sources in `data/` (`emojis.txt`, `math.txt`, `nerdfont.txt`).
|
||||
2. Run `scripts/generate_catalog.py` to rebuild `catalog.js` (the file bundled with the plugin). The script parses the text files, normalizes names, and refreshes search keywords.
|
||||
|
||||
## Requirements
|
||||
|
||||
- DankMaterialShell >= 0.1.0
|
||||
- `wl-copy` (from wl-clipboard package)
|
||||
- Wayland compositor (Niri, Hyprland, etc.)
|
||||
|
||||
## Compatibility
|
||||
|
||||
- **Compositors**: Niri and Hyprland
|
||||
- **Distros**: Universal - works on any Linux distribution
|
||||
|
||||
## Technical Details
|
||||
|
||||
- **Type**: Launcher plugin
|
||||
- **Trigger**: `:` (configurable)
|
||||
- **Language**: QML (Qt Modeling Language)
|
||||
- **Dependencies**: None (uses built-in character database)
|
||||
|
||||
## Contributing
|
||||
|
||||
Found a bug or want to add more characters? Open an issue or submit a pull request!
|
||||
|
||||
## Credits
|
||||
|
||||
Emoji database sourced from [Terminal Root's emoji collection](https://terminalroot.com/emojis.txt) - a comprehensive list of emojis with searchable names.
|
||||
|
||||
## License
|
||||
|
||||
MIT License - See LICENSE file for details
|
||||
|
||||
## Author
|
||||
|
||||
Created for the DankMaterialShell community
|
||||
|
||||
## Links
|
||||
|
||||
- [DankMaterialShell](https://github.com/AvengeMedia/DankMaterialShell)
|
||||
- [Plugin Registry](https://github.com/AvengeMedia/dms-plugin-registry)
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1 @@
|
|||
ref: refs/heads/main
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
[core]
|
||||
bare = false
|
||||
filemode = true
|
||||
[remote "origin"]
|
||||
url = https://github.com/devnullvoid/dms-emoji-launcher
|
||||
fetch = +refs/heads/*:refs/remotes/origin/*
|
||||
[branch "main"]
|
||||
remote = origin
|
||||
merge = refs/heads/main
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1 @@
|
|||
2951ec7f823c983c11b6b231403581a386a7c9f6
|
||||
|
|
@ -0,0 +1 @@
|
|||
2951ec7f823c983c11b6b231403581a386a7c9f6
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"id": "emojiLauncher",
|
||||
"name": "Emoji & Unicode Launcher",
|
||||
"description": "Search and copy emojis and unicode characters",
|
||||
"version": "1.2.0",
|
||||
"author": "devnullvoid",
|
||||
"icon": "emoji_emotions",
|
||||
"type": "launcher",
|
||||
"capabilities": ["emoji-search", "unicode-search"],
|
||||
"component": "./EmojiLauncher.qml",
|
||||
"settings": "./EmojiLauncherSettings.qml",
|
||||
"trigger": ":",
|
||||
"permissions": ["settings_read", "settings_write"]
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 69 KiB |
|
|
@ -0,0 +1,161 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Builds the catalog.js bundle from the plain-text data sources."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
DATA = ROOT / "data"
|
||||
OUTPUT = ROOT / "catalog.js"
|
||||
|
||||
|
||||
def main() -> None:
|
||||
emoji_entries = parse_emoji(DATA / "emojis.txt")
|
||||
unicode_entries = parse_unicode(DATA / "math.txt")
|
||||
nerd_font_entries = parse_nerdfont(DATA / "nerdfont.txt")
|
||||
|
||||
write_catalog(
|
||||
emoji_entries=emoji_entries,
|
||||
unicode_entries=unicode_entries,
|
||||
nerd_font_entries=nerd_font_entries,
|
||||
)
|
||||
|
||||
|
||||
def parse_emoji(path: Path) -> list[dict]:
|
||||
return _parse_symbol_file(
|
||||
path,
|
||||
key_name="emoji",
|
||||
extra_keywords=lambda raw: [],
|
||||
)
|
||||
|
||||
|
||||
def parse_unicode(path: Path) -> list[dict]:
|
||||
return _parse_symbol_file(
|
||||
path,
|
||||
key_name="char",
|
||||
extra_keywords=lambda raw: [],
|
||||
)
|
||||
|
||||
|
||||
def parse_nerdfont(path: Path) -> list[dict]:
|
||||
def extra_keywords(raw: str) -> list[str]:
|
||||
extras = ["nerdfont", raw]
|
||||
if raw.startswith("ple-"):
|
||||
extras.extend(["powerline", "ple"])
|
||||
return extras
|
||||
|
||||
entries = _parse_symbol_file(
|
||||
path,
|
||||
key_name="char",
|
||||
preprocess_name=lambda name: re.sub(r"[_-]+", " ", name).strip(),
|
||||
extra_keywords=extra_keywords,
|
||||
)
|
||||
|
||||
for entry in entries:
|
||||
name = entry.get("name", "")
|
||||
if name.startswith("Ple "):
|
||||
entry["name"] = "Powerline " + name[4:]
|
||||
|
||||
return entries
|
||||
|
||||
|
||||
def _parse_symbol_file(
|
||||
path: Path,
|
||||
*,
|
||||
key_name: str,
|
||||
preprocess_name=lambda name: name,
|
||||
extra_keywords=lambda raw: [],
|
||||
) -> list[dict]:
|
||||
text = path.read_text(encoding="utf-8")
|
||||
entries: list[dict] = []
|
||||
|
||||
for raw_line in text.splitlines():
|
||||
if not raw_line:
|
||||
continue
|
||||
trimmed = raw_line.strip()
|
||||
if not trimmed or trimmed.startswith("#"):
|
||||
continue
|
||||
|
||||
match = re.match(r"^(\S+|\s)\s+(.*)$", raw_line)
|
||||
if not match:
|
||||
continue
|
||||
|
||||
symbol = match.group(1)
|
||||
raw_name = match.group(2).strip()
|
||||
|
||||
if not raw_name or ".." in symbol:
|
||||
continue
|
||||
|
||||
cleaned_name = preprocess_name(raw_name) or raw_name
|
||||
friendly = prettify_name(cleaned_name)
|
||||
keywords = build_keywords(cleaned_name, extra_keywords(raw_name))
|
||||
|
||||
entry = {
|
||||
key_name: symbol,
|
||||
"name": friendly,
|
||||
"keywords": keywords,
|
||||
}
|
||||
entries.append(entry)
|
||||
|
||||
return entries
|
||||
|
||||
|
||||
def prettify_name(raw: str) -> str:
|
||||
tokens = [token for token in re.split(r"\s+", raw) if token]
|
||||
return " ".join(token.capitalize() for token in tokens)
|
||||
|
||||
|
||||
def build_keywords(raw: str, extras: list[str]) -> list[str]:
|
||||
seen: set[str] = set()
|
||||
keywords: list[str] = []
|
||||
|
||||
def add_token(token: str) -> None:
|
||||
lowered = token.lower()
|
||||
if lowered and lowered not in seen:
|
||||
seen.add(lowered)
|
||||
keywords.append(lowered)
|
||||
|
||||
def tokenize(value: str) -> list[str]:
|
||||
return [part for part in re.split(r"[^a-zA-Z0-9+]+", value.lower()) if part]
|
||||
|
||||
for token in tokenize(raw):
|
||||
add_token(token)
|
||||
|
||||
for extra in extras:
|
||||
for token in tokenize(extra):
|
||||
add_token(token)
|
||||
|
||||
return keywords
|
||||
|
||||
|
||||
def write_catalog(*, emoji_entries, unicode_entries, nerd_font_entries) -> None:
|
||||
OUTPUT.write_text(
|
||||
"\n".join(
|
||||
[
|
||||
"// Auto-generated by scripts/generate_catalog.py",
|
||||
"// Do not edit manually.",
|
||||
".pragma library",
|
||||
"",
|
||||
f"var emojiEntries = {json.dumps(emoji_entries, ensure_ascii=False)};",
|
||||
f"var unicodeEntries = {json.dumps(unicode_entries, ensure_ascii=False)};",
|
||||
f"var nerdFontEntries = {json.dumps(nerd_font_entries, ensure_ascii=False)};",
|
||||
"",
|
||||
"function clone(array) {",
|
||||
" return array ? array.slice() : [];",
|
||||
"}",
|
||||
"",
|
||||
"function getEmojiEntries() { return clone(emojiEntries); }",
|
||||
"function getUnicodeEntries() { return clone(unicodeEntries); }",
|
||||
"function getNerdFontEntries() { return clone(nerdFontEntries); }",
|
||||
]
|
||||
)
|
||||
+ "\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue