Created
August 12, 2017 13:41
-
-
Save papadokolos/a364565874780bb216f019bd870410fc to your computer and use it in GitHub Desktop.
A simple plugin which assures that opening the same file with paths containing symlinks will not be treated as different files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sublime | |
import sublime_plugin | |
import os.path | |
import logging | |
logger = logging.getLogger(__name__) | |
# Maintains a list of the currently open files. | |
# It is more efficient to update it live than to create it from scratch per | |
# each trigger of `on_load` event | |
open_files_paths = [] | |
def plugin_loaded(): | |
global open_files_paths | |
open_files_paths = [ | |
view.file_name() | |
for view in sublime.active_window().views() | |
if view.file_name()] | |
logger.debug("Obtained list of opened files: {}".format(open_files_paths)) | |
class OpenedFilesListener(sublime_plugin.EventListener): | |
def on_load(self, view): | |
open_files_paths.append(view.file_name()) | |
logger.debug( | |
"Adding opened file to list of opened files: {}".format( | |
view.file_name())) | |
# Check whether someone is trying to open an already opened file from | |
# a different path (this logic seems missing from SublimeText) | |
for opened_file_path in open_files_paths: | |
if (view.file_name() != opened_file_path and | |
os.path.samefile(view.file_name(), opened_file_path)): | |
logger.debug("Closed path: \"{}\"".format(view.file_name())) | |
logger.debug("Focused path: \"{}\"".format(opened_file_path)) | |
opened_file_path_view = ( | |
sublime.active_window().find_open_file(opened_file_path)) | |
view.close() | |
sublime.active_window().focus_view(opened_file_path_view) | |
break | |
def on_close(self, view): | |
open_files_paths.remove(view.file_name()) | |
logger.debug( | |
"Removing closed file from list of opened files: {}".format( | |
view.file_name())) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment