Aufräumrunde zur Bugfix-Runde: Suche entzerrt, Flatten-Fix vervollständigt

- archive_search: match_expr in search() aufgelöst. sanitize_query lief zweimal
  pro Anfrage, und die Leer-Entscheidung stand an zwei Stellen mit leicht
  abweichender Bedingung.
- Der Tag-Filter geht jetzt durch dieselbe Quoting-Regel wie der Volltext. Ein
  leerer Tag ergab tags:"" und damit einen Syntaxfehler — erreichbar durch das
  angetippte #, den ersten Tastendruck jeder Tag-Suche.
- sanitize_query von 26 auf 12 Zeilen: split('"') und split_whitespace statt
  handgeschriebenem Tokenizer. Gleiches Ergebnis fuer alle Testeingaben.
- TerminalConfig bekommt ebenfalls serde flatten. Der Block wird als Ganzes
  mitgeschrieben, ein terminal.fontSize waere also weiterhin verloren gegangen;
  set_terminal_config_in traegt die unbekannten Keys jetzt herueber.
- markdown.test.ts enthielt ein literales NUL-Byte, wodurch git die Datei als
  binaer behandelte. Der Test erzeugt das Zeichen jetzt selbst.
- Kleineres: commands_delete-Bedingung als direkter Vergleich, eine
  Verschachtelungsebene in pool.rs, zwei redundante Kommentarbloecke.
  commands_delete benennt sich in der Doku als Provisorium.
This commit is contained in:
marcusH
2026-07-19 23:22:25 +02:00
parent b127269e89
commit e245600235
8 changed files with 119 additions and 80 deletions
+11 -6
View File
@@ -250,11 +250,16 @@ pub fn commands_read(project: String) -> String {
/// Index im commands-Array des Records; ein leer gewordener Record fällt mit
/// weg. Der Watcher meldet den neuen Stand als `commands-update`.
///
/// `cmd` ist der angezeigte Befehlstext und dient als Identität: Die Indizes
/// des Panels sind der Datei um bis zu ein Watcher-Intervall hinterher, und
/// ein leer gewordener Record verschiebt alle folgenden. Ohne Abgleich löscht
/// ein Doppelklick — oder das zweite Fenster auf derselben Liste — die falsche
/// Kachel oder greift ins Leere.
/// `cmd` ist der angezeigte Befehlstext und wird vor dem Löschen abgeglichen:
/// Die Indizes des Panels sind der Datei um bis zu ein Watcher-Intervall
/// hinterher, und ein leer gewordener Record verschiebt alle folgenden. Ohne
/// Abgleich löscht ein Doppelklick — oder das zweite Fenster auf derselben
/// Liste — die falsche Kachel oder greift ins Leere.
///
/// Bewusst ein Provisorium, keine echte Identität: Zwei gleiche Befehle im
/// selben Record sind so nicht unterscheidbar. Sauber wäre eine stabile ID, die
/// beim Schreiben der JSONL vergeben wird, statt Positionen über die
/// Fenstergrenze zu reichen.
#[tauri::command]
pub fn commands_delete(
project: String,
@@ -274,7 +279,7 @@ pub fn commands_delete(
.ok_or("Befehl bereits entfernt")?["commands"]
.as_array_mut()
.ok_or("Record ohne commands")?;
if cmds.get(entry).map(|c| c["cmd"].as_str() != Some(cmd.as_str())).unwrap_or(true) {
if cmds.get(entry).and_then(|c| c["cmd"].as_str()) != Some(cmd.as_str()) {
return Err("Befehl bereits entfernt".into());
}
cmds.remove(entry);