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

Make custom terminal links higher priority than generic local link

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