Skip to content

Commit 64d9b35

Browse files
committed
Fix per-view delimiter selection
The priority order of delimiter selection previously favored filename mappings over a per-view setting (CSV -> Set Delimiter). This was an unintended consequence of wrapping per-view and global settings access. The delimiter code has been reworked to determine the delimiter in an explicit fallback order: view, filename mapping, global setting, comma.
1 parent 4b42651 commit 64d9b35

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

csvplugin.py

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -74,36 +74,48 @@ def __init__(self, view):
7474

7575
self.settings = sublime.load_settings('AdvancedCSV.sublime-settings')
7676

77-
self.DetermineDelimiter()
78-
if not isstr(self.delimiter) or len(self.delimiter) != 1:
79-
print("'{0}' is not a valid delimiter, reverting to ','.".format(self.delimiter))
80-
self.delimiter = ','
81-
#print("Using delimiter: '{0}'.".format(self.delimiter))
77+
self.ChooseDelimiter()
8278

83-
self.auto_quote = self.GetViewSetting( 'auto_quote', True )
79+
self.auto_quote = self.GetViewOrUserSetting( 'auto_quote', True )
8480

85-
def GetViewSetting(self, name, default):
81+
def GetViewOrUserSetting(self, name, default):
8682
if self.view.settings().has(name):
8783
return self.view.settings().get(name)
8884
else:
8985
return self.settings.get(name, default)
9086

91-
def DetermineDelimiter(self):
92-
filename = self.view.file_name()
87+
def ChooseDelimiter(self):
88+
self.delimiter = None
89+
90+
# Highest priority: per-view saved setting (CSV -> Set Delimiter).
91+
if self.view.settings().has('delimiter'):
92+
self.delimiter = self.view.settings().get('delimiter')
93+
94+
# Second highest priority: filename-based matching
95+
if not self.delimiter:
96+
filename = self.view.file_name()
9397

94-
if filename:
95-
self.delimiter_mapping = self.settings.get('delimiter_mapping', {})
96-
for k, v in self.delimiter_mapping.items():
97-
if fnmatch.fnmatch(filename, k):
98-
self.delimiter = v
99-
return
98+
if filename:
99+
self.delimiter_mapping = self.settings.get('delimiter_mapping', {})
100+
for k, v in self.delimiter_mapping.items():
101+
if fnmatch.fnmatch(filename, k):
102+
self.delimiter = v
103+
break
100104

101-
self.delimiter = self.GetViewSetting('delimiter', ',')
105+
# Final priority: user or system setting, fallback to comma.
106+
if not self.delimiter:
107+
self.delimiter = self.settings.get('delimiter', ',')
102108

103109
# Special case for recognizing '\t' for tabs.
104110
if self.delimiter == '\\t':
105111
self.delimiter = '\t'
106112

113+
if not isstr(self.delimiter) or len(self.delimiter) != 1:
114+
print("'{0}' is not a valid delimiter, reverting to ','.".format(self.delimiter))
115+
self.delimiter = ','
116+
117+
print("Using delimiter: '{0}'.".format(self.delimiter))
118+
107119
def AddRow(self, row):
108120
self.rows.append(row)
109121

semi.csv

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
a ;b;c
2+
111;2;3

0 commit comments

Comments
 (0)