fix: rimappa shortcut annulla registrazione da Esc a Ctrl+Esc
Esc è riservato alla built-in app.interrupt di pi: la shortcut veniva scartata con warning 'conflicts with built-in shortcut'. Rimossa anche la registrazione ridondante 'esc' (stesso tasto fisico). Aggiornati messaggi di stato e documentazione.
This commit is contained in:
@@ -84,5 +84,6 @@ Mostra una dashboard grafica centrata con lo stato di salute dell'estensione:
|
|||||||
- **Primo tocco (`F12`)**: Avvia la registrazione audio tramite `ffmpeg`, riproduce il suono sci-fi *Power Up* e mostra la barra di stato live `🔴 REGISTRAZIONE... MM:SS / MM:SS`.
|
- **Primo tocco (`F12`)**: Avvia la registrazione audio tramite `ffmpeg`, riproduce il suono sci-fi *Power Up* e mostra la barra di stato live `🔴 REGISTRAZIONE... MM:SS / MM:SS`.
|
||||||
- **Secondo tocco (`F12`)**: Interrompe la registrazione, riproduce il suono *Deactivate*, ottimizza l'audio (soppressione silenzio), invia la traccia a Gemini per la trascrizione e trasmette il prompt risultante a `pi`.
|
- **Secondo tocco (`F12`)**: Interrompe la registrazione, riproduce il suono *Deactivate*, ottimizza l'audio (soppressione silenzio), invia la traccia a Gemini per la trascrizione e trasmette il prompt risultante a `pi`.
|
||||||
|
|
||||||
### Tasto `Esc` / `Escape` — Annullamento Registrazione
|
### Tasto `Ctrl+Esc` — Annullamento Registrazione
|
||||||
- Durante una registrazione audio attiva, premere `Esc` o `Escape` abortisce immediatamente il processo `ffmpeg`, rimuove il file temporaneo, riproduce il tono acustico di cancellazione e cancella l'indicatore di stato.
|
- Durante una registrazione audio attiva, premere `Ctrl+Esc` abortisce immediatamente il processo `ffmpeg`, rimuove il file temporaneo, riproduce il tono acustico di cancellazione e cancella l'indicatore di stato.
|
||||||
|
- `Esc` da solo è riservato alla combinazione built-in di pi (`app.interrupt`), quindi l'estensione usa `Ctrl+Esc` per evitare il conflitto.
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ Alla pressione del tasto **F12**:
|
|||||||
- Viene avviato un sottoprocesso `ffmpeg` che cattura dal dispositivo PulseAudio predefinito (`-f pulse -i default`).
|
- Viene avviato un sottoprocesso `ffmpeg` che cattura dal dispositivo PulseAudio predefinito (`-f pulse -i default`).
|
||||||
- L'audio viene campionato a 16.000 Hz in mono (`-ac 1 -ar 16000`).
|
- L'audio viene campionato a 16.000 Hz in mono (`-ac 1 -ar 16000`).
|
||||||
- Viene attivato un timer TUI che aggiorna dinamicamente lo stato di `pi`:
|
- Viene attivato un timer TUI che aggiorna dinamicamente lo stato di `pi`:
|
||||||
`🔴 REGISTRAZIONE... 00:14 / 02:00 (Esc per annullare)`
|
`🔴 REGISTRAZIONE... 00:14 / 02:00 (Ctrl+Esc per annullare)`
|
||||||
|
|
||||||
### 2. Feedback Acustici Sci-Fi Procedurali (`playSound`)
|
### 2. Feedback Acustici Sci-Fi Procedurali (`playSound`)
|
||||||
Per non dipendere da file audio esterni, i suoni di feedback vengono generati proceduralmente usando il filtro `aevalsrc` di `ffmpeg` e riprodotti tramite `paplay` (fallback su `aplay` o `ffplay`):
|
Per non dipendere da file audio esterni, i suoni di feedback vengono generati proceduralmente usando il filtro `aevalsrc` di `ffmpeg` e riprodotti tramite `paplay` (fallback su `aplay` o `ffplay`):
|
||||||
|
|||||||
+3
-15
@@ -840,7 +840,7 @@ function startRecording(ctx?: any): string {
|
|||||||
const maxSecStr = String(maxDur % 60).padStart(2, "0");
|
const maxSecStr = String(maxDur % 60).padStart(2, "0");
|
||||||
ctx.ui.setStatus(
|
ctx.ui.setStatus(
|
||||||
"agy-rec",
|
"agy-rec",
|
||||||
`🔴 REGISTRAZIONE... ${elapsedMinStr}:${elapsedSecStr} / ${maxMinStr}:${maxSecStr} (Esc per annullare)`,
|
`🔴 REGISTRAZIONE... ${elapsedMinStr}:${elapsedSecStr} / ${maxMinStr}:${maxSecStr} (Ctrl+Esc per annullare)`,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
updateStatus();
|
updateStatus();
|
||||||
@@ -2149,7 +2149,7 @@ export default function agyExtension(pi: ExtensionAPI) {
|
|||||||
if (!recording) {
|
if (!recording) {
|
||||||
startRecording(ctx);
|
startRecording(ctx);
|
||||||
playSound("start");
|
playSound("start");
|
||||||
ctx.ui.notify("🎙️ Registrazione avviata (F12 per fermare, Esc per annullare)", "info");
|
ctx.ui.notify("🎙️ Registrazione avviata (F12 per fermare, Ctrl+Esc per annullare)", "info");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2266,19 +2266,7 @@ export default function agyExtension(pi: ExtensionAPI) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
pi.registerShortcut("escape", {
|
pi.registerShortcut("ctrl+escape", {
|
||||||
description: "Annulla la registrazione microfono in corso",
|
|
||||||
handler: async (ctx) => {
|
|
||||||
if (recording) {
|
|
||||||
await cancelRecording();
|
|
||||||
ctx.ui.setStatus("agy-rec", "");
|
|
||||||
ctx.ui.notify("❌ Registrazione annullata", "info");
|
|
||||||
playSound("cancel");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
pi.registerShortcut("esc", {
|
|
||||||
description: "Annulla la registrazione microfono in corso",
|
description: "Annulla la registrazione microfono in corso",
|
||||||
handler: async (ctx) => {
|
handler: async (ctx) => {
|
||||||
if (recording) {
|
if (recording) {
|
||||||
|
|||||||
Reference in New Issue
Block a user