Skip to content

Commit

Permalink
fixed linkifier plugin not working with multiple providers
Browse files Browse the repository at this point in the history
  • Loading branch information
Eugeny committed Oct 25, 2022
1 parent 07b0aa3 commit a29a552
Showing 1 changed file with 35 additions and 20 deletions.
55 changes: 35 additions & 20 deletions tabby-linkifier/src/decorator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,27 +29,42 @@ export class LinkHighlighterDecorator extends TerminalDecorator {
},
}

for (const handler of this.handlers) {
const getLink = async uri => handler.convert(uri, tab)
const openLink = async uri => handler.handle(await getLink(uri), tab)

const addon = new WebLinksAddon(
async (event, uri) => {
if (!this.willHandleEvent(event)) {
return
}
if (!await handler.verify(await handler.convert(uri, tab), tab)) {
return
}
openLink(uri)
},
{
urlRegex: handler.regex,
},
)

tab.frontend.xterm.loadAddon(addon)
const openLink = async uri => {
for (const handler of this.handlers) {
if (!handler.regex.test(uri)) {
continue
}
if (!await handler.verify(await handler.convert(uri, tab), tab)) {
continue
}
handler.handle(await handler.convert(uri, tab), tab)
}
}

let regex = new RegExp('')
const regexSource = this.handlers.map(x => `(${x.regex.source})`).join('|')
try {
regex = new RegExp(regexSource)
console.debug('Linkifier regexp', regex)
} catch (error) {
console.error('Could not build regex for your link handlers:', error)
console.error('Regex source was:', regexSource)
return
}

const addon = new WebLinksAddon(
async (event, uri) => {
if (!this.willHandleEvent(event)) {
return
}
openLink(uri)
},
{
urlRegex: regex,
},
)

tab.frontend.xterm.loadAddon(addon)
}

private willHandleEvent (event: MouseEvent) {
Expand Down

0 comments on commit a29a552

Please sign in to comment.