You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
feat(hotkey): Hotkey ueber gsettings in beiden Sitzungen (#58) - #160
Q4 aus Issue #58: Das globale Tastenkürzel kommt in beiden Sitzungen (Wayland und X11) über die Desktop-Mechanik (gsettings), nicht mehr über einen eigenen libkeybinder-Grab. Die Abhängigkeit hotkey_manager und das Paket libkeybinder-3.0-0 fliegen raus.
Dazu kommt eine Diagnosezeile in der Linux-Health-Seite: aktuelles Binding, Registrierungsstatus und die Anzahl verwaister custom*-Einträge — mit einem Button zum Aufräumen.
Bereich
Änderung
lib/main.dart
initHotkeyToShowUp() registriert den Desktop-Shortcut immer (vorher: Wayland vs. X11 unterschieden)
lib/layouts/main_screen/main_search.dart
SearchFieldShortcuts: Pfeil hoch/runter, Escape, Strg+D über Actions + Shortcuts mit eigenen Intent-Typen — wirken nur, solange das Suchfeld im Fokus ist
lib/layouts/run_command_queue.dart
Enter nativ behandelt; HotKey?-Feld und dispose-Logik entfallen
Von flutter pub get neu erzeugt — getrackte Dateien, ohne Regeneration bricht der Linux-Build
deb/DEBIAN/control
libkeybinder-3.0-0 aus Depends: raus
README.md
„Keyboard shortcut" auf einen Weg umgestellt
features.csv
Neue Zeile Hotkey (gsettings), 21 Felder, Distributions-Spalten eingefroren
lib/l10n/*.arb (alle vier)
7 neue Keys in Deutsch, Englisch, Italienisch, Finnisch
docs/handoff/v0.8.6-q4-hotkey-gsettings.md (neu)
Nachweis-Doc
Zusammengeführt aus drei Spuren (feature/58-q4-python, feature/58-q4-dart, feature/58-q4-packaging) mit disjunkten Dateimengen — der Merge war konfliktfrei.
Verifiziert
bash /workspace/tools/run-mla-gates.sh auf dem gemergten Baum — echte Exitcodes, nicht die von tail:
Gate
Ergebnis
flutter pub get
OK
tool/check-versions.sh
OK
dart format
OK — 135 Dateien, 0 geändert
flutter analyze
OK — No issues found!
flutter test
OK — 314 Tests (297 Baseline + 17 neue)
Python-Root-Runner
OK — 102 Tests (62 Baseline + 40 neue)
GTK-Token-Gate
OK — 96 Tests (2 skipped)
packages/la_core
OK — 0 Findings, 68 Tests
GATES_EXIT=0 — ALLE GATES GRÜN.
Neu dazugekommen:
17 Dart-Tests in test/q4_hotkey_test.dart — Report-Parsing, Fehlerpfade (kaputtes JSON, fehlende Felder, falsche Typen) und drei Widget-Tests als eigentlicher Beweis: arrow down moves the selection in the result list, escape empties the search field, the keys only work while the search field has the focus.
40 Python-Tests in additional/python/tests/test_keybinding_report.py — darunter der entscheidende: fremde custom*-Einträge (firefox, thunderbird) werden weder als Waise erkannt noch entfernt, und ohne bekanntes Binding wird gar nichts gelöscht.
Zusätzlich per git diff geprüft: org.linux-assistant.operations.policy, die _privilegedEntryPoints-Liste in lib/services/linux.dart und der build-deb.sh-chmod sind nicht angefasst.
Risk-Register
Risiko
Bewertung
Verhalten am Referenzsystem ungeprüft
Der Gate „Hotkey holt das Fenster, Fokus im Suchfeld" braucht eine echte Desktop-Sitzung in Wayland und X11. Die Sandbox kann das nicht. Vor dem Merge auf Zorin OS 18.1 nachholen.
Der Shortcut hängt jetzt an der Desktop-Konfiguration
Vorher griff die App das Key selbst; nachher registriert der Desktop es. Wer die Desktop-Einstellungen ändert, ändert den Shortcut. Deshalb die Diagnosezeile.
Der Cleanup löscht Benutzerdaten
Deshalb die harte Grenze: our_entries() filtert zwingend auf command == "linux-assistant", und ohne bekanntes Binding wird nichts gelöscht. Mit Adversarial-Test belegt — fremde Einträge bleiben unangetastet.
X11-Doppelauslösung
Auf X11 griffen vorher App-Grab und Desktop-Shortcut zu (das war der Grund für den bisherigen wayland ? … : true-Workaround). Jetzt gibt es nur noch den Desktop-Shortcut — das Double-Fire ist damit strukturell weg. Auf X11 gegenprüfen.
linux/flutter/generated_* sind getrackt
Nach jedem Entfernen einer Plugin-Abhängigkeit müssen die generierten Dateien mit flutter pub get neu erzeugt werden, sonst bricht der Linux-Build. Hier passiert und behoben.
.github/workflows/build.yml nicht im PR
Siehe „Deferred".
Deferred
CI-apt-Zeile — manuelle Restarbeit. Die verbundene GitHub-App hat keine workflows-Permission und darf .github/workflows/* nicht schreiben; jeder Schreibzugriff dort wird abgelehnt. Die Änderung liegt in diesem Branch, ist aber nicht im PR enthalten.
Manuell in .github/workflows/build.yml Zeile 71:
Manuelle Abnahme auf dem Referenzsystem Zorin OS 18.1, Wayland und X11: Shortcut holt das Fenster, Fokus im Suchfeld, Binding stimmt, Cleanup räumt eine Wiese und lässt fremde Einträge unangetastet. (Issue [Vorbereitung] RV-1: Re-Verify von #45/#50/#42 über die gebaute App #51 führt den RV-1-Nachweis als eigenen Vorgang.)
build-bundle.sh und packaging/unmaintained/ referenzieren weiterhin libkeybinder. Beides ist geparkt und laut AGENTS.md ohnehin defekt bzw. unmaintained.
Die verbundene GitHub-App hat keine workflows-Permission und darf .github/workflows/* nicht schreiben — jeder Schreibzugriff dort wird abgelehnt. Die Änderung an der CI-apt-Zeile liegt in diesem Branch, ist aber nicht im PR enthalten.
Bitte manuell nachziehen in .github/workflows/build.ymlZeile 71:
Der Build läuft mit dieser Zeile auch grün (so wie der PR aktuell ist) — die beiden Pakete werden nur nicht mehr gebraucht, seit die App den Shortcut über die Desktop-Mechanik registriert und nicht mehr selbst greift.
$ grep -rn "libkeybinder" lib/ test/ pubspec.yaml pubspec.lock \ deb/DEBIAN/control README.md linux/flutter/lib/layouts/after_installation/activate_hotkey.dart:54: // itself there (libkeybinder) and the desktop shortcut on top oflib/layouts/main_screen/main_search.dart:803:/// field did not have the focus, and they needed the native libkeybinderlib/main.dart:102: /// libkeybinder, and that had two problems: on X11 the app's grab and the
Diese drei Treffer sind ausschliesslich Kommentare, die den alten Mechanismus erklaeren (die App griff das Key selbst per libkeybinder). Es gibt keine Abhaengigkeit, keinen Import und keinen Aufruf mehr.
Ebenfalls im PR: pubspec.lock und die getrackten generierten Linux-Plugin-Dateien (linux/flutter/generated_plugin_registrant.cc, linux/flutter/generated_plugins.cmake) sind von flutter pub get neu erzeugt. Ohne diese Regeneration bricht der Linux-Build, weil das hotkey_manager_linux-Plugin nicht mehr gebaut wird — deshalb sind die drei Dateien Teil des PRs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Was
Q4 aus Issue #58: Das globale Tastenkürzel kommt in beiden Sitzungen (Wayland und X11) über die Desktop-Mechanik (gsettings), nicht mehr über einen eigenen libkeybinder-Grab. Die Abhängigkeit
hotkey_managerund das Paketlibkeybinder-3.0-0fliegen raus.Dazu kommt eine Diagnosezeile in der Linux-Health-Seite: aktuelles Binding, Registrierungsstatus und die Anzahl verwaister
custom*-Einträge — mit einem Button zum Aufräumen.lib/main.dartinitHotkeyToShowUp()registriert den Desktop-Shortcut immer (vorher: Wayland vs. X11 unterschieden)lib/layouts/main_screen/main_search.dartSearchFieldShortcuts: Pfeil hoch/runter, Escape, Strg+D überActions+Shortcutsmit eigenen Intent-Typen — wirken nur, solange das Suchfeld im Fokus istlib/layouts/run_command_queue.dartHotKey?-Feld und dispose-Logik entfallenlib/layouts/after_installation/activate_hotkey.dartlib/services/hotkey_diagnostics.dart(neu)HotkeyDiagnostics.loadReport()/.cleanupOrphans(),HotkeyReport,HotkeyOrphanlib/services/linux.dartgetHotkeyReport()/cleanupHotkeyOrphans()— Argumentliste, kein Shell-Stringlib/layouts/linux_health/overview.dartHotkeyStatusRow— Binding, Status, Waisen, Aufräumen-Buttonadditional/python/keybinding_files.pyfind_orphans,remove_orphans,our_entries,build_report,next_custom_name, Desktop-/Session-Erkennung — ohne Desktop-Session testbaradditional/python/setup_keybinding.py--reportund--cleanup; Verhalten ohne Argument unverändertpubspec.yaml,pubspec.lockhotkey_managerrauslinux/flutter/generated_plugin_registrant.cc,linux/flutter/generated_plugins.cmakeflutter pub getneu erzeugt — getrackte Dateien, ohne Regeneration bricht der Linux-Builddeb/DEBIAN/controllibkeybinder-3.0-0ausDepends:rausREADME.mdfeatures.csvHotkey (gsettings), 21 Felder, Distributions-Spalten eingefrorenlib/l10n/*.arb(alle vier)docs/handoff/v0.8.6-q4-hotkey-gsettings.md(neu)Zusammengeführt aus drei Spuren (
feature/58-q4-python,feature/58-q4-dart,feature/58-q4-packaging) mit disjunkten Dateimengen — der Merge war konfliktfrei.Verifiziert
bash /workspace/tools/run-mla-gates.shauf dem gemergten Baum — echte Exitcodes, nicht die vontail:flutter pub gettool/check-versions.shdart formatflutter analyzeflutter testpackages/la_coreGATES_EXIT=0— ALLE GATES GRÜN.Neu dazugekommen:
test/q4_hotkey_test.dart— Report-Parsing, Fehlerpfade (kaputtes JSON, fehlende Felder, falsche Typen) und drei Widget-Tests als eigentlicher Beweis:arrow down moves the selection in the result list,escape empties the search field,the keys only work while the search field has the focus.additional/python/tests/test_keybinding_report.py— darunter der entscheidende: fremdecustom*-Einträge (firefox,thunderbird) werden weder als Waise erkannt noch entfernt, und ohne bekanntes Binding wird gar nichts gelöscht.Zusätzlich per
git diffgeprüft:org.linux-assistant.operations.policy, die_privilegedEntryPoints-Liste inlib/services/linux.dartund derbuild-deb.sh-chmod sind nicht angefasst.Risk-Register
our_entries()filtert zwingend aufcommand == "linux-assistant", und ohne bekanntes Binding wird nichts gelöscht. Mit Adversarial-Test belegt — fremde Einträge bleiben unangetastet.wayland ? … : true-Workaround). Jetzt gibt es nur noch den Desktop-Shortcut — das Double-Fire ist damit strukturell weg. Auf X11 gegenprüfen.linux/flutter/generated_*sind getracktflutter pub getneu erzeugt werden, sonst bricht der Linux-Build. Hier passiert und behoben..github/workflows/build.ymlnicht im PRDeferred
workflows-Permission und darf.github/workflows/*nicht schreiben; jeder Schreibzugriff dort wird abgelehnt. Die Änderung liegt in diesem Branch, ist aber nicht im PR enthalten.Manuell in
.github/workflows/build.ymlZeile 71:build-bundle.shundpackaging/unmaintained/referenzieren weiterhinlibkeybinder. Beides ist geparkt und lautAGENTS.mdohnehin defekt bzw. unmaintained.Nachweis-Doc:
docs/handoff/v0.8.6-q4-hotkey-gsettings.md