diff --git a/client/components/codeEditor/codeEditor.jsx b/client/components/codeEditor/codeEditor.jsx
index bda7e3b73..230a30e1f 100644
--- a/client/components/codeEditor/codeEditor.jsx
+++ b/client/components/codeEditor/codeEditor.jsx
@@ -156,6 +156,31 @@ const CodeEditor = forwardRef(
return folds;
};
+ const foldAll = (view = viewRef.current)=>{
+ if(!view) return false;
+
+ const doc = view.state.doc;
+ const pages = pageMap.current;
+
+ const effects = pages.map((start, i)=>{
+ const next = pages[i + 1] || doc.length;
+ const from = i ? doc.line(doc.lineAt(start).number + 1).from : 0;
+ const to = doc.line(doc.lineAt(next).number).from - 1;
+
+ return to > from ? foldEffect.of({ from, to }) : null;
+ }).filter(Boolean);
+
+ view.dispatch({ effects });
+ return true;
+ };
+
+ const unfoldAll = (view = viewRef.current)=>{
+ if(!view) return false;
+
+ view.dispatch(unfoldAllCmd(view));
+ return true;
+ };
+
const createExtensions = ({ onChange, language, editorTheme })=>{
const setEventListeners = EditorView.updateListener.of((update)=>{
if(update.docChanged) {
@@ -199,7 +224,7 @@ const CodeEditor = forwardRef(
//keyboard shortcut
keymap.of([...defaultKeymap, foldKeymap, ...searchKeymap]),
- generalKeymap,
+ generalKeymap(foldAll, unfoldAll),
...(tab === 'brewStyles' ? [cssKeymap] : [markdownKeymap]),
//multiple cursors and selections
@@ -404,29 +429,8 @@ const CodeEditor = forwardRef(
undone : redoDepth(view.state),
};
},
-
- foldAll : ()=>{
- const view = viewRef.current;
- if(!view) return;
-
- const doc = view.state.doc;
- const pages = pageMap.current;
-
- const effects = pages.map((start, i)=>{
- const next = pages[i + 1] || doc.length;
- const from = i ? doc.line(doc.lineAt(start).number + 1).from : 0;
- const to = doc.line(doc.lineAt(next).number).from - 1;
-
- return to > from ? foldEffect.of({ from, to }) : null;
- }).filter(Boolean);
-
- view.dispatch({ effects });
- },
- unfoldAll : ()=>{
- const view = viewRef.current;
- if(!view) return;
- view.dispatch(unfoldAllCmd(view));
- },
+ foldAll : ()=>foldAll(),
+ unfoldAll : ()=>unfoldAll(),
focus : ()=>viewRef.current.focus(),
}));
diff --git a/client/components/codeEditor/extensions/customKeyMaps.js b/client/components/codeEditor/extensions/customKeyMaps.js
index af7fa7131..e6adec71e 100644
--- a/client/components/codeEditor/extensions/customKeyMaps.js
+++ b/client/components/codeEditor/extensions/customKeyMaps.js
@@ -215,13 +215,15 @@ const newBreak = (type)=>(view)=>forEachSelection(view, (state, from, to, select
};
});
-export const generalKeymap = Prec.high(keymap.of([
+export const generalKeymap = (foldAll, unfoldAll) => Prec.high(keymap.of([
{ key: 'Tab', run: insertTab },
{ key: 'Shift-Tab', run: indentLess },
{ key: 'Mod-z', run: undo }, //it may be unnecessary
{ key: 'Mod-Shift-z', run: redo },
{ key: 'Mod-y', run: redo }, //user asked, so double keybind
{ key: 'Mod-d', run: deleteLine }, //annoyingly overrides "selectNextOccurrence" because users asked
+ { key: 'Mod-Shift-[', run: foldAll },
+ { key: 'Mod-Shift-]', run: unfoldAll },
]));
export const cssKeymap = Prec.highest(keymap.of([
diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx
index 1ee5efa2a..1ff80a483 100644
--- a/client/homebrew/homebrew.jsx
+++ b/client/homebrew/homebrew.jsx
@@ -69,25 +69,29 @@ const Homebrew = (props)=>{
);
}
-
return (