Skip to content

Commit

Permalink
Merge pull request #3 from vvanloc/gnome-43
Browse files Browse the repository at this point in the history
support Gnome 43
  • Loading branch information
vanlocvo authored Dec 9, 2022
2 parents 92fae0d + f501a76 commit 7f48177
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 36 deletions.
30 changes: 18 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
# Nautilus context menu: Open in VSCode
Dependency to install before: `nautilus-python` (`python-nautilus` package on Debian / Ubuntu)
```bash
sudo apt install python3-nautilus
```
Dependency to install before: `nautilus-python` (`python3-nautilus` package on Debian / Ubuntu)
- Debian / Ubuntu
```bash
sudo apt install python3-nautilus
```
- Fedora
```bash
sudo dnf install nautilus-python
```
## Note
If you install vscode from Snap Store, you must make symbolic links to /usr/bin/code
```bash
sudo ln -s /snap/bin/code /usr/bin/code
```
or
```bash
sudo ln -s $(which code) /usr/bin/code
```
- If you use Gnome verison <= 42 please check branch [gnome-42](https://github.com/vvanloc/Nautilus-OpenInVSCode/tree/gnome-42)
- If you install vscode from Snap Store, you must make symbolic links to /usr/bin/code
```bash
sudo ln -s /snap/bin/code /usr/bin/code
```
or
```bash
sudo ln -s $(which code) /usr/bin/code
```

## Install
- VSCode:
Expand Down
13 changes: 4 additions & 9 deletions vscode-nautilus.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,18 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.

import os, subprocess
from gi import require_version
import urllib.parse
require_version('Gtk', '3.0')
require_version('Nautilus', '3.0')

from gi.repository import Nautilus, GObject
from gettext import gettext

CODE = '/usr/bin/code'

class VSCodeNautilus(Nautilus.MenuProvider, GObject.GObject):
class VSCodeNautilus(GObject.GObject, Nautilus.MenuProvider):
def __init__(self):
pass

def get_file_items(self, window, files):
def get_file_items(self, files):
"""Returns the menu items to display when one or more files/folders are
selected."""
# Don't show when more than 1 file is selected
Expand All @@ -39,19 +36,17 @@ def get_file_items(self, window, files):

# Add the menu items
items = []
self.window = window
if file.get_uri_scheme() == "file": # must be a local file/directory
if os.path.exists(CODE):
items += [self._create_nautilus_item(file)]

return items

def get_background_items(self, window, file):
def get_background_items(self, file):
"""Returns the menu items to display when no file/folder is selected
(i.e. when right-clicking the background)."""
# Add the menu items
items = []
self.window = window
if file.is_directory() and file.get_uri_scheme() == "file":
items += [self._create_nautilus_item(file)]
return items
Expand All @@ -69,4 +64,4 @@ def _nautilus_run(self, menu, file):
uri = file.get_uri()
uri = urllib.parse.unquote(uri)
uri = uri.replace('file://','')
subprocess.Popen([CODE, uri])
subprocess.Popen([CODE, uri])
25 changes: 10 additions & 15 deletions vscodeinsiders-nautilus.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,18 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.

import os, subprocess
from gi import require_version
import urllib.parse
require_version('Gtk', '3.0')
require_version('Nautilus', '3.0')

from gi.repository import Nautilus, GObject
from gettext import gettext

CODE = '/usr/bin/code-insiders'
CODE = '/usr/bin/code-insider'

class VSCodeInsidersNautilus(Nautilus.MenuProvider, GObject.GObject):
class VSCodeNautilus(GObject.GObject, Nautilus.MenuProvider):
def __init__(self):
pass

def get_file_items(self, window, files):
def get_file_items(self, files):
"""Returns the menu items to display when one or more files/folders are
selected."""
# Don't show when more than 1 file is selected
Expand All @@ -39,34 +36,32 @@ def get_file_items(self, window, files):

# Add the menu items
items = []
self.window = window
if file.get_uri_scheme() == "file": # must be a local file/directory
if os.path.exists(CODE):
items += [self._create_nautilus_item(file)]

return items

def get_background_items(self, window, file):
def get_background_items(self, file):
"""Returns the menu items to display when no file/folder is selected
(i.e. when right-clicking the background)."""
# Add the menu items
items = []
self.window = window
if file.is_directory() and file.get_uri_scheme() == "file":
items += [self._create_nautilus_item(file)]
return items

def _create_nautilus_item(self, file):
"""Creates the 'Open with VSCode Insiders' menu item."""
item = Nautilus.MenuItem(name="VSCodeInsidersNautilus::Nautilus",
label=gettext("Open in Code Insiders"),
tip=gettext("Open this folder/file in Visual Studio Code Insiders"))
"""Creates the 'Open with VSCode' menu item."""
item = Nautilus.MenuItem(name="VSCodeNautilus::Nautilus",
label=gettext("Open in Code"),
tip=gettext("Open this folder/file in Visual Studio Code"))
item.connect("activate", self._nautilus_run, file)
return item

def _nautilus_run(self, menu, file):
"""'Open with VSCode Insiders' menu item callback."""
"""'Open with VSCode' menu item callback."""
uri = file.get_uri()
uri = urllib.parse.unquote(uri)
uri = uri.replace('file://','')
subprocess.Popen([CODE, uri])
subprocess.Popen([CODE, uri])

0 comments on commit 7f48177

Please sign in to comment.