-
Type / for commands | Alt+I Insert
+
Type / for commands | Alt+/ autocomplete | Alt+I Insert
Ctrl+J AI panel
Ctrl+S save
Ctrl+K link
@@ -442,6 +442,9 @@ body { font-family: var(--sans); background: var(--bg); color: var(--text); heig
| Ctrl+S | Sauvegarder |
| Clic sur le titre | Renommer le fichier |
| Ctrl+J | Panneau AI |
+
| Alt+/ | Autocompletion intelligente |
+
| Enter (liste) | Continue la liste (-, *, 1.) et checkboxes |
+
| Enter (liste vide) | Termine la liste |
Slash — Commandes
@@ -1783,15 +1786,63 @@ body { font-family: var(--sans); background: var(--bg); color: var(--text); heig
else if (e.key === 'Escape') { e.preventDefault(); hideAutocomplete(); }
return;
}
- // Ctrl+Space: force autocomplete
- if ((e.ctrlKey || e.metaKey) && e.key === ' ') {
+ // Alt+/ : force autocomplete
+ if (e.altKey && !e.ctrlKey && !e.metaKey && e.key === '/') {
e.preventDefault();
triggerAutocomplete();
+ return;
}
// Auto-trigger on [[ for wikilinks
if (e.key === '[' && ta.selectionStart > 0 && ta.value[ta.selectionStart - 1] === '[') {
setTimeout(triggerAutocomplete, 50);
}
+ // Enter: auto-continue lists and checkboxes
+ if (e.key === 'Enter' && !e.shiftKey) {
+ var before = ta.value.slice(0, ta.selectionStart);
+ var after = ta.value.slice(ta.selectionEnd);
+ var lineStart = before.lastIndexOf('\n') + 1;
+ var currentLine = before.slice(lineStart);
+ var indent = (currentLine.match(/^(\s*)/) || [''])[0];
+ // Ordered list: 1. 2. 3. etc
+ var olMatch = currentLine.match(/^(\s*)(\d+)\.\s/);
+ // Unordered list: - * +
+ var ulMatch = currentLine.match(/^(\s*)([-*+])\s/);
+ // Task checkbox: - [ ] or - [x]
+ var taskMatch = currentLine.match(/^(\s*)([-*+])\s+\[([ xX])\]\s/);
+
+ if (taskMatch) {
+ // Continue checkbox (empty, unchecked)
+ e.preventDefault();
+ var newNumber = '';
+ ta.value = before + '\n' + indent + taskMatch[2] + ' [ ] ';
+ ta.setSelectionRange(ta.value.length, ta.value.length);
+ markDirty(); autoHeight(); updateLineNumbers();
+ return;
+ } else if (olMatch) {
+ // Auto-increment ordered list
+ e.preventDefault();
+ var num = parseInt(olMatch[2]) + 1;
+ ta.value = before + '\n' + olMatch[1] + num + '. ';
+ ta.setSelectionRange(ta.value.length, ta.value.length);
+ markDirty(); autoHeight(); updateLineNumbers();
+ return;
+ } else if (ulMatch) {
+ var afterTrim = currentLine.slice(ulMatch[0].length).trim();
+ if (afterTrim.length === 0) {
+ // Empty bullet: remove it and break list
+ e.preventDefault();
+ ta.value = before.slice(0, lineStart) + '\n' + after.slice(after.indexOf('\n') + 1);
+ ta.setSelectionRange(lineStart, lineStart);
+ } else {
+ // Continue bullet
+ e.preventDefault();
+ ta.value = before + '\n' + ulMatch[1] + ulMatch[2] + ' ';
+ ta.setSelectionRange(ta.value.length, ta.value.length);
+ }
+ markDirty(); autoHeight(); updateLineNumbers();
+ return;
+ }
+ }
});
// Trigger on triple backtick
@@ -1810,7 +1861,7 @@ body { font-family: var(--sans); background: var(--bg); color: var(--text); heig
console.log('ObsiGate Editor v2 ready');
console.log(' File: ' + (fileVault ? fileVault + '/' + filePath : 'demo mode'));
console.log(' AI: checking...');
- console.log(' Type / for commands | Select text for bubble | Ctrl+J AI | Ctrl+S save');
+ console.log(' Type / for commands | Select text for bubble | Alt+/ autocomplete | Ctrl+J AI | Ctrl+S save');
})();