2021-08-10 16:12:55 +00:00
|
|
|
import * as React from 'react'
|
|
|
|
import { useHotkeys } from 'react-hotkeys-hook'
|
2021-11-20 09:37:42 +00:00
|
|
|
import { AlignStyle, TDShapeType } from '~types'
|
2021-11-16 16:01:29 +00:00
|
|
|
import { useFileSystemHandlers, useTldrawApp } from '~hooks'
|
2021-09-02 20:13:54 +00:00
|
|
|
|
2021-09-21 15:47:04 +00:00
|
|
|
export function useKeyboardShortcuts(ref: React.RefObject<HTMLDivElement>) {
|
2021-11-16 16:01:29 +00:00
|
|
|
const app = useTldrawApp()
|
2021-08-10 16:12:55 +00:00
|
|
|
|
2021-09-21 15:47:04 +00:00
|
|
|
const canHandleEvent = React.useCallback(() => {
|
|
|
|
const elm = ref.current
|
|
|
|
return elm && (document.activeElement === elm || elm.contains(document.activeElement))
|
|
|
|
}, [ref])
|
|
|
|
|
2021-08-10 16:12:55 +00:00
|
|
|
/* ---------------------- Tools --------------------- */
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
|
|
|
'v,1',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.selectTool('select')
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
2021-11-16 16:01:29 +00:00
|
|
|
[app, ref.current]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'd,2',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.selectTool(TDShapeType.Draw)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-16 16:01:29 +00:00
|
|
|
'e,3',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.selectTool('erase')
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-16 16:01:29 +00:00
|
|
|
'r,4',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.selectTool(TDShapeType.Rectangle)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-22 13:59:59 +00:00
|
|
|
'i,5',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.selectTool(TDShapeType.Ellipse)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-22 13:59:59 +00:00
|
|
|
'l,6',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
2021-11-22 12:28:56 +00:00
|
|
|
app.selectTool(TDShapeType.Line)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
2021-10-13 16:03:33 +00:00
|
|
|
useHotkeys(
|
2021-11-22 13:59:59 +00:00
|
|
|
'a,7',
|
2021-10-13 16:03:33 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
2021-11-22 12:28:56 +00:00
|
|
|
app.selectTool(TDShapeType.Arrow)
|
2021-10-13 16:03:33 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-22 13:59:59 +00:00
|
|
|
't,8',
|
2021-11-22 12:28:56 +00:00
|
|
|
() => {
|
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.selectTool(TDShapeType.Text)
|
|
|
|
},
|
|
|
|
undefined,
|
|
|
|
[app]
|
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-22 13:59:59 +00:00
|
|
|
's,9',
|
2021-11-16 16:01:29 +00:00
|
|
|
() => {
|
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.selectTool(TDShapeType.Sticky)
|
|
|
|
},
|
|
|
|
undefined,
|
|
|
|
[app]
|
2021-10-13 16:03:33 +00:00
|
|
|
)
|
|
|
|
|
2021-08-10 16:12:55 +00:00
|
|
|
/* ---------------------- Misc ---------------------- */
|
|
|
|
|
2021-09-22 11:28:55 +00:00
|
|
|
// Dark Mode
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+shift+d,⌘+shift+d',
|
2021-09-22 11:28:55 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.toggleDarkMode()
|
|
|
|
e.preventDefault()
|
2021-09-22 11:28:55 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-22 11:28:55 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// Focus Mode
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+.,⌘+.',
|
2021-09-22 11:28:55 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.toggleFocusMode()
|
2021-09-22 11:28:55 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-22 11:28:55 +00:00
|
|
|
)
|
|
|
|
|
2021-11-05 14:13:14 +00:00
|
|
|
// File System
|
|
|
|
|
|
|
|
const { onNewProject, onOpenProject, onSaveProject, onSaveProjectAs } = useFileSystemHandlers()
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+n,⌘+n',
|
2021-11-05 14:13:14 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
onNewProject(e)
|
2021-11-05 14:13:14 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-11-05 14:13:14 +00:00
|
|
|
)
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+s,⌘+s',
|
2021-11-05 14:13:14 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
onSaveProject(e)
|
2021-11-05 14:13:14 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-11-05 14:13:14 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+shift+s,⌘+shift+s',
|
2021-11-05 14:13:14 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
onSaveProjectAs(e)
|
2021-11-05 14:13:14 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-11-05 14:13:14 +00:00
|
|
|
)
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+o,⌘+o',
|
2021-11-05 14:13:14 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
onOpenProject(e)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
|
|
|
// Undo Redo
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'⌘+z,ctrl+z',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
if (app.session) {
|
|
|
|
app.cancelSession()
|
|
|
|
} else {
|
|
|
|
app.undo()
|
2021-10-22 11:05:23 +00:00
|
|
|
}
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+shift-z,⌘+shift+z',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
if (app.session) {
|
|
|
|
app.cancelSession()
|
|
|
|
} else {
|
|
|
|
app.redo()
|
2021-10-22 11:05:23 +00:00
|
|
|
}
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
2021-08-15 14:35:23 +00:00
|
|
|
// Undo Redo
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'⌘+u,ctrl+u',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.undoSelect()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+shift-u,⌘+shift+u',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.redoSelect()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-15 14:35:23 +00:00
|
|
|
|
2021-08-10 16:12:55 +00:00
|
|
|
/* -------------------- Commands -------------------- */
|
|
|
|
|
|
|
|
// Camera
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-20 13:25:41 +00:00
|
|
|
'ctrl+=,⌘+=,ctrl+num_subtract,⌘+num_subtract',
|
2021-09-08 10:16:10 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.zoomIn()
|
|
|
|
e.preventDefault()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 13:25:41 +00:00
|
|
|
'ctrl+-,⌘+-,ctrl+num_add,⌘+num_add',
|
2021-09-08 10:16:10 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
app.zoomOut()
|
|
|
|
e.preventDefault()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 13:25:41 +00:00
|
|
|
'shift+0,ctrl+numpad_0,⌘+numpad_0',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
2021-11-20 13:25:41 +00:00
|
|
|
app.resetZoom()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 13:25:41 +00:00
|
|
|
'shift+1',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
2021-11-20 13:25:41 +00:00
|
|
|
app.zoomToFit()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 13:25:41 +00:00
|
|
|
'shift+2',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
2021-11-20 13:25:41 +00:00
|
|
|
app.zoomToSelection()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
|
|
|
// Duplicate
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+d,⌘+d',
|
2021-09-08 10:16:10 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
app.duplicate()
|
|
|
|
e.preventDefault()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
|
|
|
// Flip
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
|
|
|
'shift+h',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.flipHorizontal()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'shift+v',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.flipVertical()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
|
|
|
// Cancel
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
|
|
|
'escape',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
app.cancel()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
|
|
|
// Delete
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-19 20:26:16 +00:00
|
|
|
'backspace,del',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.delete()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
|
|
|
// Select All
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'⌘+a,ctrl+a',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.selectAll()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
|
|
|
// Nudge
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
|
|
|
'up',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.nudge([0, -1], false)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'right',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.nudge([1, 0], false)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'down',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.nudge([0, 1], false)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'left',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.nudge([-1, 0], false)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'shift+up',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.nudge([0, -1], true)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'shift+right',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.nudge([1, 0], true)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'shift+down',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.nudge([0, 1], true)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'shift+left',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.nudge([-1, 0], true)
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'⌘+shift+l,ctrl+shift+l',
|
2021-11-16 16:01:29 +00:00
|
|
|
() => {
|
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.toggleLocked()
|
|
|
|
},
|
|
|
|
undefined,
|
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
2021-11-07 13:45:48 +00:00
|
|
|
// Copy, Cut & Paste
|
2021-08-10 16:12:55 +00:00
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'⌘+c,ctrl+c',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.copy()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
2021-11-07 13:45:48 +00:00
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'⌘+x,ctrl+x',
|
2021-11-07 13:45:48 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.cut()
|
2021-11-07 13:45:48 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-11-07 13:45:48 +00:00
|
|
|
)
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'⌘+v,ctrl+v',
|
2021-09-08 10:16:10 +00:00
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.paste()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
|
2021-09-02 12:51:39 +00:00
|
|
|
// Group & Ungroup
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'⌘+g,ctrl+g',
|
2021-09-08 10:16:10 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
app.group()
|
|
|
|
e.preventDefault()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'⌘+shift+g,ctrl+shift+g',
|
2021-09-08 10:16:10 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
|
|
|
|
app.ungroup()
|
|
|
|
e.preventDefault()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-09-02 12:51:39 +00:00
|
|
|
|
2021-08-10 16:12:55 +00:00
|
|
|
// Move
|
|
|
|
|
2021-09-08 10:16:10 +00:00
|
|
|
useHotkeys(
|
|
|
|
'[',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.moveBackward()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
']',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.moveForward()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'shift+[',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.moveToBack()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'shift+]',
|
|
|
|
() => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.moveToFront()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
2021-11-20 09:37:42 +00:00
|
|
|
'ctrl+shift+backspace,⌘+shift+backspace',
|
2021-09-08 10:16:10 +00:00
|
|
|
(e) => {
|
2021-11-16 16:01:29 +00:00
|
|
|
if (!canHandleEvent()) return
|
|
|
|
if (app.settings.isDebugMode) {
|
|
|
|
app.resetDocument()
|
2021-09-21 15:47:04 +00:00
|
|
|
}
|
2021-11-16 16:01:29 +00:00
|
|
|
e.preventDefault()
|
2021-09-08 10:16:10 +00:00
|
|
|
},
|
|
|
|
undefined,
|
2021-11-16 16:01:29 +00:00
|
|
|
[app]
|
2021-09-08 10:16:10 +00:00
|
|
|
)
|
2021-11-20 09:37:42 +00:00
|
|
|
|
|
|
|
// Text Align
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'alt+command+l,alt+ctrl+l',
|
|
|
|
(e) => {
|
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.style({ textAlign: AlignStyle.Start })
|
|
|
|
e.preventDefault()
|
|
|
|
},
|
|
|
|
undefined,
|
|
|
|
[app]
|
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'alt+command+t,alt+ctrl+t',
|
|
|
|
(e) => {
|
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.style({ textAlign: AlignStyle.Middle })
|
|
|
|
e.preventDefault()
|
|
|
|
},
|
|
|
|
undefined,
|
|
|
|
[app]
|
|
|
|
)
|
|
|
|
|
|
|
|
useHotkeys(
|
|
|
|
'alt+command+r,alt+ctrl+r',
|
|
|
|
(e) => {
|
|
|
|
if (!canHandleEvent()) return
|
|
|
|
app.style({ textAlign: AlignStyle.End })
|
|
|
|
e.preventDefault()
|
|
|
|
},
|
|
|
|
undefined,
|
|
|
|
[app]
|
|
|
|
)
|
2021-08-10 16:12:55 +00:00
|
|
|
}
|