diff --git a/src/App.svelte b/src/App.svelte
index d5d99be..e23ebba 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -13,7 +13,8 @@
import PlayerControls from '$lib/components/PlayerControls.svelte';
import PlayerTimeline from '$lib/components/PlayerTimeline.svelte';
import { loadPreferences, preferences, setClipListPosition, setClipListWidth, setAppMode } from '$lib/stores/preferences.svelte';
- import { getSelectedClipId, removeClip, markInPoint, markOutPoint } from '$lib/stores/clips.svelte';
+ import { getSelectedClipId, removeClip, markInPoint, markOutPoint, addClip } from '$lib/stores/clips.svelte';
+ import { computeQuickClipRange } from '$lib/utils/clipRange';
import {
adjustShuttle,
resetShuttleRate,
@@ -186,6 +187,13 @@
}
}
+ function cutClip(position: 'at' | 'before') {
+ const range = computeQuickClipRange(session.currentTime, session.duration, position);
+ if (!range) return;
+ addClip(range.start, range.end);
+ setAppMode('clipper');
+ }
+
function handleToggleCaptions() {
captionsEnabled = !captionsEnabled;
}
@@ -230,6 +238,20 @@
e.preventDefault();
toggleMode();
break;
+ case 'x':
+ case 'X':
+ if (isPlayerMode) {
+ e.preventDefault();
+ cutClip('at');
+ }
+ break;
+ case 'z':
+ case 'Z':
+ if (isPlayerMode) {
+ e.preventDefault();
+ cutClip('before');
+ }
+ break;
case 'f':
case 'F':
if (isPlayerMode) {
@@ -405,6 +427,7 @@
hasCaptions={session.hasCaptions || false}
onToggleCaptions={handleToggleCaptions}
onOpenCaptionSettings={() => {}}
+ onCutClip={cutClip}
/>
{:else}
diff --git a/src/lib/components/PlayerControls.svelte b/src/lib/components/PlayerControls.svelte
index a0b3014..39b5fe7 100644
--- a/src/lib/components/PlayerControls.svelte
+++ b/src/lib/components/PlayerControls.svelte
@@ -38,12 +38,14 @@
hasCaptions,
onToggleCaptions,
onOpenCaptionSettings,
+ onCutClip,
}: {
visible: boolean;
captionsEnabled: boolean;
hasCaptions: boolean;
onToggleCaptions: () => void;
onOpenCaptionSettings: () => void;
+ onCutClip: (position: 'at' | 'before') => void;
} = $props();
let showSpeedSelector = $state(false);
@@ -225,6 +227,14 @@
{/if}
+
+
{#if hasCaptions}