diff --git a/package.json b/package.json index 87bb35a..dc1c007 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ ], "activationEvents": [ "onCommand:githublinker.copyLink", + "onCommand:githublinker.openLink", "onCommand:githublinker.copyMarkdown" ], "main": "./out/extension", @@ -27,6 +28,11 @@ "command": "githublinker.copyLink", "title": "GitHub linker: Copy link to selection" }, + { + "when": "editorHasSelection", + "command": "githublinker.openLink", + "title": "GitHub linker: Open link to selection in browser" + }, { "when": "editorHasSelection", "command": "githublinker.copyMarkdown", @@ -40,6 +46,11 @@ "command": "githublinker.copyLink", "group": "9_cutcopypaste" }, + { + "when": "editorHasSelection", + "command": "githublinker.openLink", + "group": "9_cutcopypaste" + }, { "when": "editorHasSelection", "command": "githublinker.copyMarkdown", @@ -66,6 +77,7 @@ "@types/clipboardy": "^1.1.0", "@types/ini": "^1.3.30", "clipboardy": "^1.2.3", - "ini": "^1.3.5" + "ini": "^1.3.5", + "open": "^7.0.2" } } diff --git a/src/extension.ts b/src/extension.ts index f03a094..5af37dd 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -7,16 +7,21 @@ import * as path from 'path'; import * as fs from 'fs'; import * as ini from 'ini'; import * as clipboardy from 'clipboardy'; +import * as open from 'open'; function getGitHubRepoURL(url: string) { if (url.endsWith('.git')) { - url = url.substring(0, url.length - '.git'.length); + url = url.substring(0, url.length - '.git'.length) } - if (url.startsWith('https://github.com/')) { + if (url.startsWith('http://') || url.startsWith('https://')) { return url; } - if (url.startsWith('git@github.com:')) { - return 'https://github.com/' + url.substring('git@github.com:'.length); + if (url.startsWith('git@')) { + var domainList = url.match("git@(.+):.+$"); + if (domainList) { + var domain = domainList[1]; + return 'https://' + domain + '/' + url.substring(('git@' + domain + ':').length); + } } return null; } @@ -122,6 +127,16 @@ export function activate(context: vscode.ExtensionContext) { } })); + context.subscriptions.push(vscode.commands.registerCommand('githublinker.openLink', () => { + try { + open(calculateURL()) + vscode.window.showInformationMessage('GitHub URL opened by system handler!'); + } catch (err) { + vscode.window.showErrorMessage(err.message); + throw err; + } + })); + context.subscriptions.push(vscode.commands.registerCommand('githublinker.copyMarkdown', () => { try { const editor = vscode.window.activeTextEditor;