Skip to content

Commit 6fdb36c

Browse files
committed
New template support for (some) settings.
1 parent ea1dbca commit 6fdb36c

File tree

12 files changed

+896
-133
lines changed

12 files changed

+896
-133
lines changed

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ HLIB_FIXED_FILES_OUTER="\
328328
hlib/screenfull.js"
329329
HLIB_FIXED_FILES_MISC="\
330330
hlib/domterm.js \
331+
hlib/settings-manager.js \
331332
hlib/domterm-client.js \
332333
hlib/domterm-core.css \
333334
hlib/domterm-default.css \

hlib/domterm-parser.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export { DTParser };
22
import { Terminal } from './terminal.js';
33
import * as DtUtil from './domterm-utils.js';
4+
import { Setting, EvalContext } from './settings-manager.js';
45

56
class DTParser {
67
constructor(term) {
@@ -2260,6 +2261,28 @@ class DTParser {
22602261
case 'fullscreen toggle':
22612262
DomTerm.windowOp('fullscreen', command.substring(11));
22622263
break;
2264+
case 'set-settings': {
2265+
let wnum = options.wnumber;
2266+
let pane = wnum !== undefined ? DomTerm.paneMap[wnum]
2267+
: DomTerm.mainTerm.paneInfo;
2268+
let errmsg = '';
2269+
const context = new EvalContext(term);
2270+
context.reportError = (context, message) => {
2271+
if (errmsg)
2272+
errmsg += '\n';
2273+
errmsg += `setting '${context?.curSetting?.name}': ${message}`;
2274+
};
2275+
try {
2276+
pane.setOptions(options.settings, context);
2277+
} catch (e) {
2278+
errmsg = "caught "+e;
2279+
}
2280+
let r = {};
2281+
if (errmsg)
2282+
r.err = errmsg;
2283+
term.sendResponse(r, options);
2284+
break;
2285+
}
22632286
}
22642287
break;
22652288
}

hlib/domterm.js

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ DomTerm.setOptions = function(jtext) {
368368
: DomTerm.mainTerm.paneInfo;
369369
pane.setOptions(obj);
370370
} catch(e) {
371-
console.log("error handling local settings");
371+
console.log("error handling local settings "+e);
372372
}
373373
}
374374

@@ -613,9 +613,9 @@ DomTerm.updateZoom = function() {
613613
}
614614
}
615615

616-
DomTerm.updateSettings = function(pane) {
616+
DomTerm.updateSettings = function(pane, context) {
617617
if (pane.terminal && pane.kind !== "xterminal")
618-
pane.terminal.updateSettings();
618+
pane.terminal.updateSettings(context);
619619
else if (pane.layoutItem) {
620620
const componentType = pane.layoutItem.toConfig().componentType;
621621
if (componentType === "domterm" || componentType === "view-saved")
@@ -845,9 +845,7 @@ class PaneInfo {
845845
* as DomTerm.zoomMainBase and DomTerm.zoomMainAdjust. */
846846
this.zoomAdjust = 1.0;
847847

848-
// Table of named options local to this pane or terminal.
849-
// Maybe set from command-line or UI
850-
this.termOptions = {};
848+
DomTerm.initSettings(this);
851849
}
852850

853851
paneZoom() { return this.zoomSetting * this.zoomAdjust; }
@@ -863,27 +861,15 @@ class PaneInfo {
863861
opt = DomTerm.globalSettings[name];
864862
return opt === undefined ? dflt : opt;
865863
}
866-
setOptions(options) {
864+
setOptions(options, context) {
867865
for (const prop in options) {
868866
if (options[prop] == null)
869867
delete this.termOptions[prop];
870868
else
871869
this.termOptions[prop] = options[prop];
872870
}
873-
DomTerm.updateSettings(this);
874-
}
875-
/*
876-
try {
877-
// Handle '{SETTINGS}' or 'WNUM,{OPTIONS}'/
878-
var obj2 = JSON.parse("["+joptions+"]");
879-
let obj = obj2[options.length-1];
880-
let pane = obj2.length >= 2 ? DomTerm.paneMap[obj2[0]]
881-
: DomTerm.mainTerm.paneInfo;
882-
} catch(e) {
883-
console.log("error handling local settings");
884-
}
885-
}
886-
*/
871+
DomTerm.updateSettings(this, context);
872+
}
887873
}
888874

889875
PaneInfo.create = function(windowNumber, kind) {

0 commit comments

Comments
 (0)