提交 ef2bdc08 编写于 作者: D Daniel Imms

Make custom terminal links higher priority than generic local link

Fixes #21637
上级 6ebf1223
......@@ -184,9 +184,11 @@ export interface ITerminalInstance {
* @param handler The callback when the link is called.
* @param matchIndex The index of the link from the regex.match(html) call. This defaults to 0
* (for regular expressions without capture groups).
* @param validationCallback A callback which can be used to validate the link after it has been
* added to the DOM.
* @return The ID of the new matcher, this can be used to deregister.
*/
registerLinkMatcher(regex: RegExp, handler: (url: string) => void, matchIndex?: number): number;
registerLinkMatcher(regex: RegExp, handler: (url: string) => void, matchIndex?: number, validationCallback?: (uri: string, callback: (isValid: boolean) => void) => void): number;
/**
* Deregisters a link matcher if it has been registered.
......
......@@ -276,8 +276,8 @@ export class TerminalInstance implements ITerminalInstance {
this.updateConfig();
}
public registerLinkMatcher(regex: RegExp, handler: (url: string) => void, matchIndex?: number): number {
return this._xterm.registerLinkMatcher(regex, handler, matchIndex);
public registerLinkMatcher(regex: RegExp, handler: (url: string) => void, matchIndex?: number, validationCallback?: (uri: string, callback: (isValid: boolean) => void) => void): number {
return this._linkHandler.registerCustomLinkHandler(this._xterm, regex, handler, matchIndex, validationCallback);
}
public deregisterLinkMatcher(linkMatcherId: number): void {
......
......@@ -24,6 +24,11 @@ const winExcludedPathCharactersClause = '[^\\0<>\\?\\|\\/\\s!$`&*()\\[\\]+\'":;]
/** A regex that matches paths in the form c:\path, ~\path, .\path */
const WINDOWS_LOCAL_LINK_REGEX = new RegExp('(' + winPathPrefix + '?(' + winPathSeparatorClause + '(' + winExcludedPathCharactersClause + ')+)+)');
/** Higher than local link, lower than hypertext */
const CUSTOM_LINK_PRIORITY = -1;
/** Lowest */
const LOCAL_LINK_PRIORITY = -2;
export class TerminalLinkHandler {
constructor(
private _platform: Platform,
......@@ -32,10 +37,19 @@ export class TerminalLinkHandler {
) {
}
public registerLocalLinkHandler(xterm: any) {
xterm.registerLinkMatcher(this._localLinkRegex, (url) => this._handleLocalLink(url), {
public registerCustomLinkHandler(xterm: any, regex: RegExp, handler: (string) => void, matchIndex?: number, validationCallback?: (uri: string, callback: (isValid: boolean) => void) => void): number {
return xterm.registerLinkMatcher(regex, handler, {
matchIndex,
validationCallback,
priority: CUSTOM_LINK_PRIORITY
});
}
public registerLocalLinkHandler(xterm: any): number {
return xterm.registerLinkMatcher(this._localLinkRegex, (url) => this._handleLocalLink(url), {
matchIndex: 1,
validationCallback: (link: string, callback: (isValid: boolean) => void) => this._validateLocalLink(link, callback)
validationCallback: (link: string, callback: (isValid: boolean) => void) => this._validateLocalLink(link, callback),
priority: LOCAL_LINK_PRIORITY
});
}
......@@ -57,7 +71,6 @@ export class TerminalLinkHandler {
}
private _validateLocalLink(link: string, callback: (isValid: boolean) => void): void {
console.log('validate');
this._resolvePath(link).then(resolvedLink => {
callback(!!resolvedLink);
});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册