Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/rangelink-vscode-extension/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- **Auto-unbind when a bound file is deleted from disk**, matching the existing terminal-close behavior. Deleting a bound file now triggers an auto-unbind with a status bar message and warning toast. Previously the binding survived and subsequent paste attempts would target a non-existent file. (#611)
- **R-F (paste current file path) now works for any active tab that maps to a file** — image previews, notebooks, and diff views — not just text editors. (#643)
- **RangeLink context menu items now appear in devcontainers and other remote workspaces.** (#679)

## [2.0.0]

Expand Down
20 changes: 10 additions & 10 deletions packages/rangelink-vscode-extension/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -834,22 +834,22 @@
],
"editor/context": [
{
"when": "editorHasSelection && (resourceScheme == file || resourceScheme == untitled)",
"when": "editorHasSelection && (resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote)",
"command": "rangelink.editorContext.copyLink",
"group": "8_rangelink@0"
},
{
"when": "editorHasSelection && (resourceScheme == file || resourceScheme == untitled)",
"when": "editorHasSelection && (resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote)",
"command": "rangelink.editorContext.copyLinkAbsolute",
"group": "8_rangelink@1"
},
{
"when": "editorHasSelection && (resourceScheme == file || resourceScheme == untitled)",
"when": "editorHasSelection && (resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote)",
"command": "rangelink.editorContext.copyPortableLink",
"group": "8_rangelink@2"
},
{
"when": "editorHasSelection && (resourceScheme == file || resourceScheme == untitled)",
"when": "editorHasSelection && (resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote)",
"command": "rangelink.editorContext.copyPortableLinkAbsolute",
"group": "8_rangelink@3"
},
Expand All @@ -864,19 +864,19 @@
"group": "8_rangelink@5"
},
{
"when": "resourceScheme == file || resourceScheme == untitled",
"when": "resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote",
"command": "rangelink.editorContent.pasteFilePath",
"group": "8_rangelink_files@0"
},
{
"when": "resourceScheme == file || resourceScheme == untitled",
"when": "resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote",
"command": "rangelink.editorContent.pasteRelativeFilePath",
"group": "8_rangelink_files@1"
},
{
"command": "rangelink.editorContent.bind",
"group": "8_rangelink_files@2",
"when": "resourceScheme == file || resourceScheme == untitled"
"when": "resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote"
},
{
"when": "rangelink.isBound",
Expand All @@ -886,19 +886,19 @@
],
"editor/title/context": [
{
"when": "resourceScheme == file || resourceScheme == untitled",
"when": "resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote",
"command": "rangelink.editorTab.pasteFilePath",
"group": "3_rangelink@1"
},
{
"when": "resourceScheme == file || resourceScheme == untitled",
"when": "resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote",
"command": "rangelink.editorTab.pasteRelativeFilePath",
"group": "3_rangelink@2"
},
{
"command": "rangelink.editorContent.bind",
"group": "3_rangelink@3",
"when": "resourceScheme == file || resourceScheme == untitled"
"when": "resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote"
},
{
"when": "rangelink.isBound",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1044,31 +1044,31 @@ describe('package.json contributions', () => {

it('editorContext.copyLink at top of RangeLink group', () => {
expect(editorContextMenu[0]).toStrictEqual({
when: 'editorHasSelection && (resourceScheme == file || resourceScheme == untitled)',
when: 'editorHasSelection && (resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote)',
command: 'rangelink.editorContext.copyLink',
group: '8_rangelink@0',
});
});

it('editorContext.copyLinkAbsolute in context menu', () => {
expect(editorContextMenu[1]).toStrictEqual({
when: 'editorHasSelection && (resourceScheme == file || resourceScheme == untitled)',
when: 'editorHasSelection && (resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote)',
command: 'rangelink.editorContext.copyLinkAbsolute',
group: '8_rangelink@1',
});
});

it('editorContext.copyPortableLink in context menu', () => {
expect(editorContextMenu[2]).toStrictEqual({
when: 'editorHasSelection && (resourceScheme == file || resourceScheme == untitled)',
when: 'editorHasSelection && (resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote)',
command: 'rangelink.editorContext.copyPortableLink',
group: '8_rangelink@2',
});
});

it('editorContext.copyPortableLinkAbsolute in context menu', () => {
expect(editorContextMenu[3]).toStrictEqual({
when: 'editorHasSelection && (resourceScheme == file || resourceScheme == untitled)',
when: 'editorHasSelection && (resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote)',
command: 'rangelink.editorContext.copyPortableLinkAbsolute',
group: '8_rangelink@3',
});
Expand All @@ -1092,15 +1092,15 @@ describe('package.json contributions', () => {

it('editorContent.pasteFilePath in context menu', () => {
expect(editorContextMenu[6]).toStrictEqual({
when: 'resourceScheme == file || resourceScheme == untitled',
when: 'resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote',
command: 'rangelink.editorContent.pasteFilePath',
group: '8_rangelink_files@0',
});
});

it('editorContent.pasteRelativeFilePath in context menu', () => {
expect(editorContextMenu[7]).toStrictEqual({
when: 'resourceScheme == file || resourceScheme == untitled',
when: 'resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote',
command: 'rangelink.editorContent.pasteRelativeFilePath',
group: '8_rangelink_files@1',
});
Expand All @@ -1110,7 +1110,7 @@ describe('package.json contributions', () => {
expect(editorContextMenu[8]).toStrictEqual({
command: 'rangelink.editorContent.bind',
group: '8_rangelink_files@2',
when: 'resourceScheme == file || resourceScheme == untitled',
when: 'resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote',
});
});

Expand All @@ -1134,15 +1134,15 @@ describe('package.json contributions', () => {

it('editorTab.pasteFilePath in editor title context menu', () => {
expect(editorTitleContextMenu[0]).toStrictEqual({
when: 'resourceScheme == file || resourceScheme == untitled',
when: 'resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote',
command: 'rangelink.editorTab.pasteFilePath',
group: '3_rangelink@1',
});
});

it('editorTab.pasteRelativeFilePath in editor title context menu', () => {
expect(editorTitleContextMenu[1]).toStrictEqual({
when: 'resourceScheme == file || resourceScheme == untitled',
when: 'resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote',
command: 'rangelink.editorTab.pasteRelativeFilePath',
group: '3_rangelink@2',
});
Expand All @@ -1152,7 +1152,7 @@ describe('package.json contributions', () => {
expect(editorTitleContextMenu[2]).toStrictEqual({
command: 'rangelink.editorContent.bind',
group: '3_rangelink@3',
when: 'resourceScheme == file || resourceScheme == untitled',
when: 'resourceScheme == file || resourceScheme == untitled || resourceScheme == vscode-remote',
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ describe('isWritableScheme', () => {
it('returns true for untitled scheme', () => {
expect(isWritableScheme('untitled')).toBe(true);
});

it('returns true for vscode-remote scheme', () => {
expect(isWritableScheme('vscode-remote')).toBe(true);
});
});

describe('read-only schemes', () => {
Expand All @@ -28,10 +32,6 @@ describe('isWritableScheme', () => {
expect(isWritableScheme('debug')).toBe(false);
});

it('returns false for vscode-remote scheme', () => {
expect(isWritableScheme('vscode-remote')).toBe(false);
});

it('returns false for walkThrough scheme', () => {
expect(isWritableScheme('walkThrough')).toBe(false);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
*
* - `file` - Regular file system files
* - `untitled` - New unsaved files
* - `vscode-remote` - Files opened via a remote connection (e.g. devcontainers, SSH)
*
* All other schemes (git, output, vscode-settings, etc.) are read-only.
*/
const WRITABLE_SCHEMES = ['file', 'untitled'];
const WRITABLE_SCHEMES = ['file', 'untitled', 'vscode-remote'];

/**
* Check if a URI scheme supports text editing.
Expand Down