use ⌘+direction for moving subtasks in/out

Hunter
Tuesday, July 1st, 2025 at 7:01 PM

index.html+7-7
readme.md+9-7

index.html
865  						keyHandler.shiftEnter.pressed = true;
866  						toggleTaskState(task);
867  					}
868 +				} else if (e.key === 'ArrowUp' && (e.metaKey || e.ctrlKey) && !e.shiftKey) {
869 +					e.preventDefault();
870 +					pushSubtaskIntoTarget(task, 'up');
871 +				} else if (e.key === 'ArrowDown' && (e.metaKey || e.ctrlKey) && !e.shiftKey) {
872 +					e.preventDefault();
873 +					pushSubtaskIntoTarget(task, 'down');
874  				} else if (e.key === 'ArrowUp' && !e.shiftKey) {
875  					e.preventDefault();
876  					navigateTasks('up');
877  				} else if (e.key === 'ArrowDown' && !e.shiftKey) {
878  					e.preventDefault();
879  					navigateTasks('down');
    -				} else if (e.key === 'ArrowUp' && e.shiftKey && (e.metaKey || e.ctrlKey)) {
    -					e.preventDefault();
    -					pushSubtaskIntoTarget(task, 'up');
    -				} else if (e.key === 'ArrowDown' && e.shiftKey && (e.metaKey || e.ctrlKey)) {
    -					e.preventDefault();
    -					pushSubtaskIntoTarget(task, 'down');
880  				} else if (e.key === 'ArrowUp' && e.shiftKey) {
881  					e.preventDefault();
882  					moveSubtask(task, 'up');

894  							applyShakeAnimation(task.id);
895  						}
896  					}
    -				} else if (e.key === 'ArrowLeft' && e.shiftKey && (e.metaKey || e.ctrlKey)) {
897 +				} else if (e.key === 'ArrowLeft' && (e.metaKey || e.ctrlKey) && !e.shiftKey) {
898  					e.preventDefault();
899  					pullSubtaskOutLayer(task);
900  				} else if (e.key === 'ArrowLeft' && e.shiftKey) {
readme.md
33  - `Backspace` (when selected task's text is empty) remove the task and its subtasks
34  - `Shift + Enter` toggle selected task's completion status
35  - `Shift + Arrow Up/Down` reposition the selected task within its current level
36 +- `⌘ + Arrow Up/Down` move the selected task into the task above/below it
37 +- `⌘ + Arrow Left` pull the selected task out one level (to its parent's level)
38  
39  ### text editing
40  - `Left/Right` move text cursor within selected task
   -- `Command/Ctrl + C` copy the selected task's text (or highlighted substring)
   -- `Command/Ctrl + X` cut the selected task's text (or highlighted substring)
   -- `Command/Ctrl + V` paste text content from the clipboard
   -- `Command/Ctrl + Z` undo text edit
   -- `Command/Ctrl + Shift + Z` redo text edit
41 +- `⌘ + C` copy the selected task's text (or highlighted substring)
42 +- `⌘ + X` cut the selected task's text (or highlighted substring)
43 +- `⌘ + V` paste text content from the clipboard
44 +- `⌘ + Z` undo text edit
45 +- `⌘ + Shift + Z` redo text edit
46  
47  ## data persistence
48  your task tree is automatically saved to your browser's local storage after each edit. this ensures your tasks will persist even if you close the browser or refresh the page.

50  > [!WARNING]  
51  > clearing your browsing data may erase your saved tasks. to avoid losing progress, create a manual backup before clearing your browsing data.
52  
   -- `Command/Ctrl + S` export tasks to .txt file
   -- `Command/Ctrl + O` import tasks from .txt file
53 +- `⌘ + S` export tasks to .txt file
54 +- `⌘ + O` import tasks from .txt file
55  
56  ## themes
57  press `F2` to cycle through available themes.