functions/Aliases.ps1
|
function Get-EmojiAlias { <# .SYNOPSIS Gets an emoji by its alias/shortcut. .DESCRIPTION Retrieves an emoji using a predefined alias or shortcut name. Aliases provide quick access to commonly used emojis without needing to search. .PARAMETER Alias The alias/shortcut name for the emoji (e.g., "thumbsup", "fire", "rocket") .PARAMETER List Lists all available aliases .PARAMETER Copy Copy the emoji to clipboard after retrieving .EXAMPLE Get-EmojiAlias -Alias "fire" Returns: 🔥 .EXAMPLE Get-EmojiAlias -Alias "thumbsup" -Copy Returns the 👍 emoji and copies it to clipboard .EXAMPLE Get-EmojiAlias -List Shows all available emoji aliases #> [CmdletBinding()] param( [Parameter(Position = 0, ValueFromPipeline = $true)] [string]$Alias, [Parameter()] [switch]$List, [Parameter()] [switch]$Copy ) # Load aliases $aliasPath = Join-Path $PSScriptRoot "..\data\aliases.json" if ($List) { if (-not (Test-Path $aliasPath)) { Write-Warning "No aliases defined yet. Use New-EmojiAlias to create aliases." return } $aliases = Get-Content $aliasPath -Encoding UTF8 | ConvertFrom-Json Write-Host "`n🔖 Available Emoji Aliases" -ForegroundColor Cyan Write-Host ("=" * 60) -ForegroundColor Cyan $aliases.PSObject.Properties | Sort-Object Name | ForEach-Object { $emojiData = $Script:EmojiData | Where-Object { $_.emoji -eq $_.Value } | Select-Object -First 1 if ($emojiData) { Write-Host ("{0,-15} {1} {2}" -f $_.Name, $_.Value, $emojiData.name) -ForegroundColor White } else { Write-Host ("{0,-15} {1}" -f $_.Name, $_.Value) -ForegroundColor White } } Write-Host "`n" return } if (-not $Alias) { Write-Error "Please provide an alias name or use -List to see all aliases." return } if (-not (Test-Path $aliasPath)) { Write-Error "No aliases defined. Use New-EmojiAlias to create your first alias." return } $aliases = Get-Content $aliasPath -Encoding UTF8 | ConvertFrom-Json $emoji = $aliases.$Alias if (-not $emoji) { Write-Error "Alias '$Alias' not found. Use Get-EmojiAlias -List to see available aliases." return } if ($Copy) { $emoji | Copy-Emoji } else { # Return emoji with details $emojiData = $Script:EmojiData | Where-Object { $_.emoji -eq $emoji } | Select-Object -First 1 if ($emojiData) { $emojiData | Format-Table emoji, name, category, keywords -AutoSize } else { Write-Output $emoji } } } function New-EmojiAlias { <# .SYNOPSIS Creates a new emoji alias/shortcut. .DESCRIPTION Defines a custom alias (shortcut name) for an emoji to enable quick access. .PARAMETER Alias The alias/shortcut name to create (e.g., "fire", "rocket", "ok") .PARAMETER Emoji The emoji character to associate with the alias .PARAMETER Force Overwrite existing alias if it already exists .EXAMPLE New-EmojiAlias -Alias "fire" -Emoji "🔥" Creates an alias "fire" for 🔥 .EXAMPLE New-EmojiAlias -Alias "ok" -Emoji "👍" Creates an alias "ok" for 👍 .EXAMPLE "🚀","💻","🔥" | New-EmojiAlias -Alias "rocket","computer","fire" Creates multiple aliases at once #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Low')] param( [Parameter(Mandatory = $true, Position = 0)] [string]$Alias, [Parameter(Mandatory = $true, Position = 1, ValueFromPipeline = $true)] [string]$Emoji, [Parameter()] [switch]$Force ) $aliasPath = Join-Path $PSScriptRoot "..\data\aliases.json" # Validate alias name (alphanumeric and underscores only) if ($Alias -notmatch '^[a-zA-Z0-9_]+$') { Write-Error "Alias name must contain only letters, numbers, and underscores." return } # Load or create aliases $aliases = @{} if (Test-Path $aliasPath) { $aliases = Get-Content $aliasPath -Encoding UTF8 | ConvertFrom-Json -AsHashtable } # Check if alias exists if ($aliases.ContainsKey($Alias) -and -not $Force) { Write-Error "Alias '$Alias' already exists. Use -Force to overwrite." return } # ShouldProcess check $operation = if ($aliases.ContainsKey($Alias)) { "Update" } else { "Create" } if (-not $PSCmdlet.ShouldProcess("alias '$Alias' for emoji $Emoji", $operation)) { return } # Add alias $aliases[$Alias] = $Emoji # Save $aliases | ConvertTo-Json | Set-Content $aliasPath -Encoding UTF8 Write-Host "✅ Created alias '$Alias' for $Emoji" -ForegroundColor Green } function Remove-EmojiAlias { <# .SYNOPSIS Removes an emoji alias/shortcut. .DESCRIPTION Deletes a previously defined emoji alias. .PARAMETER Alias The alias name to remove .PARAMETER Force Skip confirmation prompt .EXAMPLE Remove-EmojiAlias -Alias "fire" Removes the "fire" alias .EXAMPLE Remove-EmojiAlias -Alias "rocket" -Force Removes the alias without confirmation #> [CmdletBinding(SupportsShouldProcess)] param( [Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)] [string]$Alias, [Parameter()] [switch]$Force ) $aliasPath = Join-Path $PSScriptRoot "..\data\aliases.json" if (-not (Test-Path $aliasPath)) { Write-Error "No aliases defined." return } $aliases = Get-Content $aliasPath -Encoding UTF8 | ConvertFrom-Json -AsHashtable if (-not $aliases.ContainsKey($Alias)) { Write-Error "Alias '$Alias' not found." return } $emoji = $aliases[$Alias] if (-not $Force -and -not $PSCmdlet.ShouldProcess($Alias, "Remove alias for $emoji")) { return } $aliases.Remove($Alias) # Save $aliases | ConvertTo-Json | Set-Content $aliasPath -Encoding UTF8 Write-Host "✅ Removed alias '$Alias'" -ForegroundColor Green } function Set-EmojiAlias { <# .SYNOPSIS Updates an existing emoji alias. .DESCRIPTION Changes the emoji associated with an existing alias. .PARAMETER Alias The alias name to update .PARAMETER Emoji The new emoji character .EXAMPLE Set-EmojiAlias -Alias "fire" -Emoji "🔥" Updates the "fire" alias #> [CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'Low')] param( [Parameter(Mandatory = $true, Position = 0)] [string]$Alias, [Parameter(Mandatory = $true, Position = 1)] [string]$Emoji ) if ($PSCmdlet.ShouldProcess("alias '$Alias'", "Update")) { New-EmojiAlias -Alias $Alias -Emoji $Emoji -Force -Confirm:$false Write-Host "✅ Updated alias '$Alias' to $Emoji" -ForegroundColor Green } } function Initialize-DefaultEmojiAliases { <# .SYNOPSIS Creates a set of default emoji aliases. .DESCRIPTION Initializes commonly used emoji aliases for quick access. .PARAMETER Force Overwrite existing aliases .EXAMPLE Initialize-DefaultEmojiAliases Creates default emoji aliases #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = 'Function creates multiple aliases, plural is semantically correct')] [CmdletBinding()] param( [Parameter()] [switch]$Force ) $defaultAliases = @{ # Expressions "smile" = "😊" "grin" = "😁" "laugh" = "😂" "wink" = "😉" "heart" = "❤️" "love" = "😍" "kiss" = "😘" "cool" = "😎" "thinking" = "🤔" "shrug" = "🤷" # Reactions "thumbsup" = "👍" "thumbsdown" = "👎" "ok" = "👌" "clap" = "👏" "pray" = "🙏" "muscle" = "💪" "fire" = "🔥" "boom" = "💥" "star" = "⭐" "sparkles" = "✨" # Symbols "check" = "✅" "x" = "❌" "warning" = "⚠️" "question" = "❓" "info" = "ℹ️" "idea" = "💡" "rocket" = "🚀" "trophy" = "🏆" "target" = "🎯" "flag" = "🚩" # Tech "computer" = "💻" "laptop" = "💻" "phone" = "📱" "email" = "📧" "folder" = "📁" "file" = "📄" "chart" = "📊" "calendar" = "📅" "clock" = "🕐" "bug" = "🐛" # Nature "sun" = "☀️" "moon" = "🌙" "cloud" = "☁️" "rain" = "🌧️" "snow" = "❄️" "tree" = "🌲" "flower" = "🌸" "leaf" = "🍃" # Food "pizza" = "🍕" "burger" = "🍔" "coffee" = "☕" "beer" = "🍺" "cake" = "🎂" "apple" = "🍎" # Activities "game" = "🎮" "music" = "🎵" "movie" = "🎬" "book" = "📚" "party" = "🎉" "gift" = "🎁" # Transport "car" = "🚗" "plane" = "✈️" "train" = "🚆" "bike" = "🚲" # Time "hourglass" = "⏳" "alarm" = "⏰" "timer" = "⏱️" # Money "money" = "💰" "dollar" = "💵" "chart_up" = "📈" "chart_down" = "📉" } $aliasPath = Join-Path $PSScriptRoot "..\data\aliases.json" # Load existing aliases $aliases = @{} if (Test-Path $aliasPath) { $aliases = Get-Content $aliasPath -Encoding UTF8 | ConvertFrom-Json -AsHashtable } $added = 0 $skipped = 0 foreach ($alias in $defaultAliases.GetEnumerator()) { if ($aliases.ContainsKey($alias.Key) -and -not $Force) { $skipped++ continue } $aliases[$alias.Key] = $alias.Value $added++ } # Save $aliases | ConvertTo-Json | Set-Content $aliasPath -Encoding UTF8 Write-Host "✅ Initialized default emoji aliases" -ForegroundColor Green Write-Host " Added: $added aliases" -ForegroundColor White if ($skipped -gt 0) { Write-Host " Skipped: $skipped existing aliases (use -Force to overwrite)" -ForegroundColor Yellow } Write-Host "`nUse 'Get-EmojiAlias -List' to see all aliases" -ForegroundColor Cyan } function Import-EmojiAliases { <# .SYNOPSIS Imports emoji aliases from a JSON file. .DESCRIPTION Loads emoji aliases from an exported JSON file. .PARAMETER Path Path to the JSON file containing aliases .PARAMETER Merge Merge with existing aliases instead of replacing .EXAMPLE Import-EmojiAliases -Path "my-aliases.json" Imports aliases from file .EXAMPLE Import-EmojiAliases -Path "my-aliases.json" -Merge Merges imported aliases with existing ones #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = 'Function imports multiple aliases, plural is semantically correct')] [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Path, [Parameter()] [switch]$Merge ) if (-not (Test-Path $Path)) { Write-Error "File not found: $Path" return } $importedAliases = Get-Content $Path -Encoding UTF8 | ConvertFrom-Json -AsHashtable $aliasPath = Join-Path $PSScriptRoot "..\data\aliases.json" if ($Merge -and (Test-Path $aliasPath)) { $existingAliases = Get-Content $aliasPath -Encoding UTF8 | ConvertFrom-Json -AsHashtable foreach ($alias in $importedAliases.GetEnumerator()) { $existingAliases[$alias.Key] = $alias.Value } $existingAliases | ConvertTo-Json | Set-Content $aliasPath -Encoding UTF8 } else { $importedAliases | ConvertTo-Json | Set-Content $aliasPath -Encoding UTF8 } Write-Host "✅ Imported $($importedAliases.Count) emoji aliases from $Path" -ForegroundColor Green } function Export-EmojiAliases { <# .SYNOPSIS Exports emoji aliases to a JSON file. .DESCRIPTION Saves all defined emoji aliases to a JSON file for backup or sharing. .PARAMETER Path Path where the JSON file will be saved .EXAMPLE Export-EmojiAliases -Path "my-aliases.json" Exports all aliases to file #> [Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSUseSingularNouns', '', Justification = 'Function exports multiple aliases, plural is semantically correct')] [CmdletBinding()] param( [Parameter(Mandatory = $true)] [string]$Path ) $aliasPath = Join-Path $PSScriptRoot "..\data\aliases.json" if (-not (Test-Path $aliasPath)) { Write-Error "No aliases to export." return } Copy-Item $aliasPath $Path -Force $aliases = Get-Content $aliasPath -Encoding UTF8 | ConvertFrom-Json $count = ($aliases.PSObject.Properties | Measure-Object).Count Write-Host "✅ Exported $count emoji aliases to $Path" -ForegroundColor Green } |