feat: add cross-platform file association management

Add an EE::System::FileAssociation abstraction with XDG, Windows,
and macOS implementations.

Expose extensions from syntax predefinitions and add custom widget
support to UISettingsPanel. Add an ecode settings page for selecting
file associations and installing an XDG desktop entry.

Apply changes asynchronously with lifecycle-safe UI handling, disable
controls while applying, and avoid redundant XDG database updates.

Add translations and coverage for the new functionality.

Implements SpartanJ/ecode#192
This commit is contained in:
Martín Lucas Golini
2026-09-17 11:04:25 -03:00
parent 9956f38c2a
commit c530e4bd6e
17 changed files with 1340 additions and 6 deletions

View File

@@ -1121,6 +1121,14 @@ Für sichtbare Änderung ecode neu starten.</string>
<string name="enable_exclusive_mode_by_default">Exklusivmodus standardmäßig aktivieren</string>
<string name="enable_exclusive_mode_by_default_tooltip">Deaktiviert globale Tastenkürzel in neu erstellten Terminals.</string>
<string name="file_associations">Dateizuordnungen</string>
<string name="apply">Anwenden</string>
<string name="extension">Erweiterung</string>
<string name="registered">Registriert</string>
<string name="install_desktop_entry">Anwendungsstarter installieren</string>
<string name="system_file_associations">System-Dateizuordnungen</string>
<string name="system_file_associations_desc">Ecode für die ausgewählten Dateierweiterungen verfügbar machen. Das Betriebssystem kann weiterhin eine Bestätigung der Standardanwendung verlangen.</string>
<string name="file_associations_updated">Dateizuordnungen aktualisiert.</string>
<string name="file_associations_update_failed">Dateizuordnungen konnten nicht aktualisiert werden.</string>
<string name="full">Voll</string>
<string name="grayscale">Graustufen</string>
<string name="hide_tabbar">Tableiste ausblenden</string>

View File

@@ -1106,6 +1106,14 @@ Restart ecode to see the changes.</string>
<string name="enable_exclusive_mode_by_default">Enable Exclusive Mode by Default</string>
<string name="enable_exclusive_mode_by_default_tooltip">Disable global keybindings in newly created terminals.</string>
<string name="file_associations">File Associations</string>
<string name="apply">Apply</string>
<string name="extension">Extension</string>
<string name="registered">Registered</string>
<string name="install_desktop_entry">Install application launcher</string>
<string name="system_file_associations">System File Associations</string>
<string name="system_file_associations_desc">Make ecode available for the selected file extensions. The operating system may still ask you to confirm the default application.</string>
<string name="file_associations_updated">File associations updated.</string>
<string name="file_associations_update_failed">Could not update file associations.</string>
<string name="full">Full</string>
<string name="grayscale">Grayscale</string>
<string name="hide_tabbar">Hide Tab Bar</string>

View File

@@ -1104,6 +1104,14 @@ Redémarrer ecode pour voir les changements.</string>
<string name="enable_exclusive_mode_by_default">Activer le mode exclusif par défaut</string>
<string name="enable_exclusive_mode_by_default_tooltip">Désactive les raccourcis globaux dans les nouveaux terminaux.</string>
<string name="file_associations">Associations de fichiers</string>
<string name="apply">Appliquer</string>
<string name="extension">Extension</string>
<string name="registered">Associé</string>
<string name="install_desktop_entry">Installer le lanceur dapplication</string>
<string name="system_file_associations">Associations de fichiers système</string>
<string name="system_file_associations_desc">Rendre ecode disponible pour les extensions sélectionnées. Le système dexploitation peut encore demander de confirmer lapplication par défaut.</string>
<string name="file_associations_updated">Associations de fichiers mises à jour.</string>
<string name="file_associations_update_failed">Impossible de mettre à jour les associations de fichiers.</string>
<string name="full">Complet</string>
<string name="grayscale">Niveaux de gris</string>
<string name="hide_tabbar">Masquer la barre d'onglets</string>

View File

@@ -890,6 +890,14 @@ file in the directory tree.</string>
<string name="enable_exclusive_mode_by_default">默认启用独占模式</string>
<string name="enable_exclusive_mode_by_default_tooltip">在新建终端中禁用全局快捷键。</string>
<string name="file_associations">文件关联</string>
<string name="apply">应用</string>
<string name="extension">扩展名</string>
<string name="registered">已注册</string>
<string name="install_desktop_entry">安装应用程序启动器</string>
<string name="system_file_associations">系统文件关联</string>
<string name="system_file_associations_desc">让 ecode 可用于所选文件扩展名。操作系统可能仍会要求确认默认应用程序。</string>
<string name="file_associations_updated">文件关联已更新。</string>
<string name="file_associations_update_failed">无法更新文件关联。</string>
<string name="folds_refresh_freq">折叠区域刷新频率</string>
<string name="full">完全</string>
<string name="grayscale">灰度</string>