visidata 3.0.2__py3-none-any.whl → 3.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. visidata/__init__.py +12 -10
  2. visidata/_input.py +208 -202
  3. visidata/_open.py +4 -1
  4. visidata/_types.py +4 -3
  5. visidata/aggregators.py +88 -39
  6. visidata/apps/vdsql/_ibis.py +7 -11
  7. visidata/apps/vdsql/clickhouse.py +2 -2
  8. visidata/apps/vdsql/snowflake.py +1 -1
  9. visidata/apps/vgit/status.py +1 -1
  10. visidata/basesheet.py +11 -4
  11. visidata/canvas.py +54 -20
  12. visidata/clipboard.py +13 -6
  13. visidata/cliptext.py +7 -6
  14. visidata/cmdlog.py +40 -27
  15. visidata/column.py +14 -49
  16. visidata/ddw/regex.ddw +3 -2
  17. visidata/deprecated.py +14 -2
  18. visidata/desktop/visidata.desktop +2 -2
  19. visidata/editor.py +1 -0
  20. visidata/errors.py +1 -1
  21. visidata/experimental/sort_selected.py +54 -0
  22. visidata/expr.py +69 -18
  23. visidata/features/change_precision.py +1 -3
  24. visidata/features/cmdpalette.py +17 -2
  25. visidata/features/colorsheet.py +1 -1
  26. visidata/features/dedupe.py +3 -3
  27. visidata/features/go_col.py +71 -0
  28. visidata/features/graph_seaborn.py +1 -1
  29. visidata/features/join.py +20 -10
  30. visidata/features/layout.py +16 -3
  31. visidata/features/ping.py +16 -12
  32. visidata/features/regex.py +5 -5
  33. visidata/features/status_source.py +3 -1
  34. visidata/features/sysedit.py +1 -1
  35. visidata/features/transpose.py +2 -1
  36. visidata/features/type_ipaddr.py +2 -4
  37. visidata/features/unfurl.py +1 -0
  38. visidata/form.py +2 -2
  39. visidata/freqtbl.py +16 -11
  40. visidata/fuzzymatch.py +1 -0
  41. visidata/graph.py +163 -12
  42. visidata/guide.py +57 -24
  43. visidata/guides/ClipboardGuide.md +48 -0
  44. visidata/guides/ColumnsGuide.md +52 -0
  45. visidata/guides/CommandsSheet.md +28 -0
  46. visidata/guides/DirSheet.md +34 -0
  47. visidata/guides/ErrorsSheet.md +17 -0
  48. visidata/guides/FrequencyTable.md +42 -0
  49. visidata/guides/GrepSheet.md +28 -0
  50. visidata/guides/JsonSheet.md +38 -0
  51. visidata/guides/MacrosSheet.md +19 -0
  52. visidata/guides/MeltGuide.md +52 -0
  53. visidata/guides/MemorySheet.md +7 -0
  54. visidata/guides/MenuGuide.md +26 -0
  55. visidata/guides/ModifyGuide.md +38 -0
  56. visidata/guides/PivotGuide.md +71 -0
  57. visidata/guides/RegexGuide.md +107 -0
  58. visidata/guides/SelectionGuide.md +44 -0
  59. visidata/guides/SlideGuide.md +26 -0
  60. visidata/guides/SortGuide.md +0 -0
  61. visidata/guides/SplitpaneGuide.md +15 -0
  62. visidata/guides/TypesSheet.md +43 -0
  63. visidata/guides/XsvGuide.md +36 -0
  64. visidata/help.py +6 -6
  65. visidata/hint.py +2 -1
  66. visidata/indexsheet.py +2 -2
  67. visidata/interface.py +13 -14
  68. visidata/keys.py +4 -1
  69. visidata/loaders/api_airtable.py +1 -1
  70. visidata/loaders/archive.py +1 -1
  71. visidata/loaders/csv.py +9 -5
  72. visidata/loaders/eml.py +11 -6
  73. visidata/loaders/f5log.py +1 -0
  74. visidata/loaders/fec.py +18 -42
  75. visidata/loaders/fixed_width.py +19 -3
  76. visidata/loaders/grep.py +121 -0
  77. visidata/loaders/html.py +1 -0
  78. visidata/loaders/http.py +6 -1
  79. visidata/loaders/json.py +22 -4
  80. visidata/loaders/jsonla.py +8 -2
  81. visidata/loaders/mailbox.py +1 -0
  82. visidata/loaders/markdown.py +25 -6
  83. visidata/loaders/msgpack.py +19 -0
  84. visidata/loaders/npy.py +0 -1
  85. visidata/loaders/odf.py +18 -4
  86. visidata/loaders/orgmode.py +1 -1
  87. visidata/loaders/rec.py +6 -4
  88. visidata/loaders/sas.py +11 -4
  89. visidata/loaders/scrape.py +0 -1
  90. visidata/loaders/texttables.py +2 -0
  91. visidata/loaders/tsv.py +24 -7
  92. visidata/loaders/unzip_http.py +127 -3
  93. visidata/loaders/vds.py +4 -0
  94. visidata/loaders/vdx.py +1 -1
  95. visidata/loaders/xlsx.py +5 -0
  96. visidata/loaders/xml.py +2 -1
  97. visidata/macros.py +14 -31
  98. visidata/main.py +14 -13
  99. visidata/mainloop.py +14 -6
  100. visidata/man/vd.1 +72 -39
  101. visidata/man/vd.txt +72 -41
  102. visidata/memory.py +15 -4
  103. visidata/menu.py +14 -3
  104. visidata/metasheets.py +5 -6
  105. visidata/modify.py +4 -4
  106. visidata/mouse.py +2 -0
  107. visidata/movement.py +14 -28
  108. visidata/optionssheet.py +3 -5
  109. visidata/path.py +59 -37
  110. visidata/pivot.py +8 -5
  111. visidata/pyobj.py +63 -9
  112. visidata/save.py +16 -9
  113. visidata/search.py +4 -4
  114. visidata/selection.py +10 -56
  115. visidata/settings.py +37 -35
  116. visidata/sheets.py +186 -108
  117. visidata/shell.py +22 -12
  118. visidata/sidebar.py +71 -16
  119. visidata/sort.py +21 -6
  120. visidata/statusbar.py +42 -5
  121. visidata/stored_list.py +5 -2
  122. visidata/tests/conftest.py +1 -0
  123. visidata/tests/test_commands.py +9 -1
  124. visidata/tests/test_completer.py +18 -0
  125. visidata/tests/test_edittext.py +3 -2
  126. visidata/text_source.py +7 -4
  127. visidata/textsheet.py +20 -6
  128. visidata/themes/ascii8.py +9 -6
  129. visidata/themes/asciimono.py +14 -4
  130. visidata/threads.py +13 -3
  131. visidata/tuiwin.py +5 -1
  132. visidata/type_currency.py +1 -2
  133. visidata/type_date.py +6 -1
  134. visidata/undo.py +10 -5
  135. visidata/utils.py +9 -3
  136. visidata/vdobj.py +21 -1
  137. visidata/wrappers.py +9 -1
  138. {visidata-3.0.2.data → visidata-3.1.data}/data/share/applications/visidata.desktop +2 -2
  139. {visidata-3.0.2.data → visidata-3.1.data}/data/share/man/man1/vd.1 +72 -39
  140. {visidata-3.0.2.data → visidata-3.1.data}/data/share/man/man1/visidata.1 +72 -39
  141. {visidata-3.0.2.dist-info → visidata-3.1.dist-info}/METADATA +24 -6
  142. visidata-3.1.dist-info/RECORD +284 -0
  143. visidata-3.0.2.dist-info/RECORD +0 -258
  144. {visidata-3.0.2.data → visidata-3.1.data}/scripts/vd +0 -0
  145. {visidata-3.0.2.data → visidata-3.1.data}/scripts/vd2to3.vdx +0 -0
  146. {visidata-3.0.2.dist-info → visidata-3.1.dist-info}/LICENSE.gpl3 +0 -0
  147. {visidata-3.0.2.dist-info → visidata-3.1.dist-info}/WHEEL +0 -0
  148. {visidata-3.0.2.dist-info → visidata-3.1.dist-info}/entry_points.txt +0 -0
  149. {visidata-3.0.2.dist-info → visidata-3.1.dist-info}/top_level.txt +0 -0
visidata/threads.py CHANGED
@@ -12,8 +12,8 @@ from visidata import VisiData, vd, options, globalCommand, Sheet, EscapeExceptio
12
12
  from visidata import ColumnAttr, Column, BaseSheet, ItemColumn
13
13
 
14
14
 
15
- vd.option('profile', False, 'enable profiling on threads', max_help=-1)
16
- vd.option('min_memory_mb', 0, 'minimum memory to continue loading and async processing', max_help=-1)
15
+ vd.option('profile', False, 'enable profiling on threads')
16
+ vd.option('min_memory_mb', 0, 'minimum memory to continue loading and async processing')
17
17
 
18
18
  vd.theme_option('color_working', '118 5', 'color of system running smoothly')
19
19
 
@@ -201,7 +201,14 @@ def execAsync(vd, func, *args, **kwargs):
201
201
  if sheet is not None and (sheet.lastCommandThreads and threading.current_thread() not in sheet.lastCommandThreads):
202
202
  vd.fail(f'still running **{sheet.lastCommandThreads[-1].name}** from previous command')
203
203
 
204
- thread = threading.Thread(target=_toplevelTryFunc, daemon=True, args=(func,)+args, kwargs=kwargs)
204
+ # the current thread's activeCommand
205
+ cmd = vd.activeCommand
206
+ # the newly started thread is assigned the same activeCommand
207
+ def _with_active_cmd(func, *args, **kwargs):
208
+ if cmd: vd.activeCommand = cmd
209
+ _toplevelTryFunc(func, *args, **kwargs)
210
+ if cmd: vd.activeCommand = None
211
+ thread = threading.Thread(target=_with_active_cmd, daemon=True, args=(func,)+args, kwargs=kwargs)
205
212
  vd.threads.append(_annotate_thread(thread))
206
213
 
207
214
  if sheet is not None:
@@ -343,6 +350,9 @@ class ThreadProfiler:
343
350
  if elapsed_s(self.thread) < min_thread_time_s:
344
351
  vd.threads.remove(self.thread)
345
352
  else:
353
+ if self.thread.sheet:
354
+ if vd.options.profile:
355
+ vd.status(f'[:bold]{self.thread.sheet.name[:32]}.{self.thread.name}[/] finished in {elapsed_s(self.thread):.1f}s')
346
356
  if vd.options.profile:
347
357
  self.thread.profile.dump_stats(f'{self.thread.name}.pyprof')
348
358
 
visidata/tuiwin.py CHANGED
@@ -1,4 +1,4 @@
1
- from visidata import VisiData, vd
1
+ from visidata import VisiData, vd, BaseSheet
2
2
 
3
3
  vd._parentscrs = {} # scr -> parentscr
4
4
 
@@ -20,3 +20,7 @@ def getrootxy(vd, scr): # like scr.getparyx() but for all ancestor scrs
20
20
  if dx > 0: px += dx
21
21
  scr = vd._parentscrs[scr]
22
22
  return px, py
23
+
24
+
25
+ vd.bindkey('Alt+[Shift+I', 'no-op') #2247 focus-in
26
+ vd.bindkey('Alt+[Shift+O', 'no-op') # focus-out
visidata/type_currency.py CHANGED
@@ -27,8 +27,7 @@ def displayer_currency(col, dw, width=None):
27
27
 
28
28
  yield ('', text)
29
29
 
30
-
31
- Sheet.addCommand('$', 'type-currency', 'cursorCol.type=currency', 'set type of current column to currency')
30
+ Sheet.addCommand('$', 'type-currency', 'cursorCol.type=currency; cursorCol.displayer="currency"', 'set type of current column to currency')
32
31
 
33
32
  vd.addMenuItems('''
34
33
  Column > Type as > dirty float > type-currency
visidata/type_date.py CHANGED
@@ -122,12 +122,17 @@ vd.addGlobals(
122
122
  hours=1.0/24,
123
123
  minutes=1.0/(24*60),
124
124
  seconds=1.0/(24*60*60),
125
- datedelta=datedelta)
125
+ datedelta=datedelta,
126
+ datetime=date,
127
+ date=date)
126
128
 
127
129
 
128
130
  Sheet.addCommand('@', 'type-date', 'cursorCol.type = date', 'set type of current column to date')
131
+ Sheet.addCommand('', 'type-datedelta', 'cursorCol.type = datedelta', 'set type of current column to datedelta')
129
132
  Sheet.addCommand('', 'type-datetime', 'cursorCol.type=date; cursorCol.fmtstr="%Y-%m-%d %H:%M:%S"', 'set type of current column to datetime')
130
133
 
131
134
  vd.addMenuItems('''
132
135
  Column > Type as > date > type-date
136
+ Column > Type as > datetime > type-datetime
137
+ Column > Type as > datedelta > type-datedelta
133
138
  ''')
visidata/undo.py CHANGED
@@ -19,13 +19,16 @@ def isUndoableCommand(longname):
19
19
  def addUndo(vd, undofunc, *args, **kwargs):
20
20
  'On undo of latest command, call ``undofunc(*args, **kwargs)``.'
21
21
  if vd.options.undo:
22
- # occurs when VisiData is just starting up
23
- if getattr(vd, 'activeCommand', UNLOADED) is UNLOADED:
22
+ # occurs when VisiData is just starting up.
23
+ # very early in startup, modifyCommand does not yet exist
24
+ if not vd.activeCommand:
24
25
  return
25
26
  r = vd.modifyCommand
27
+ if not r or not isUndoableCommand(r.longname):
28
+ return
26
29
  # some special commands, like open-file, do not have an undofuncs set
27
30
  # do not set undofuncs for non-logged commands
28
- if not r or not isUndoableCommand(r.longname) or not vd.activeCommand or not vd.isLoggableCommand(vd.activeCommand.longname):
31
+ if not vd.isLoggableCommand(vd.activeCommand):
29
32
  return
30
33
  if not r.undofuncs:
31
34
  r.undofuncs = []
@@ -37,8 +40,10 @@ def undo(vd, sheet):
37
40
  if not vd.options.undo:
38
41
  vd.fail("options.undo not enabled")
39
42
 
40
- # don't allow undo of first command on a sheet, which is always the command that created the sheet.
41
- for i, cmdlogrow in enumerate(sheet.cmdlog_sheet.rows[:0:-1]):
43
+ cmdlogrows = itertools.dropwhile(lambda r: r.longname == 'set-option', sheet.cmdlog_sheet.rows)
44
+ # skip the first remaining command, to exclude it from undo,
45
+ # because it is always the one that created the sheet
46
+ for i, cmdlogrow in enumerate(reversed(list(cmdlogrows)[1:])):
42
47
  if cmdlogrow.undofuncs:
43
48
  for undofunc, args, kwargs, in cmdlogrow.undofuncs[::-1]:
44
49
  undofunc(*args, **kwargs)
visidata/utils.py CHANGED
@@ -185,12 +185,18 @@ class ExplodingMock:
185
185
 
186
186
 
187
187
  class MissingAttrFormatter(string.Formatter):
188
- "formats {} fields with `''`, that would normally result in a raised KeyError or AttributeError; intended for user customisable format strings."
188
+ "formats {} fields with `''`, that would normally result in a raised KeyError or AttributeError or IndexError; intended for user customisable format strings."
189
+ def get_value(self, key, args, kwargs):
190
+ try:
191
+ return super().get_value(key, args, kwargs)
192
+ except Exception:
193
+ raise
194
+
189
195
  def get_field(self, field_name, args, kwargs):
190
196
  try:
191
197
  return super().get_field(field_name, args, kwargs)
192
- except (KeyError, AttributeError):
193
- return (None, field_name)
198
+ except (KeyError, AttributeError, IndexError, ValueError) as e:
199
+ return ('{' + field_name + '}', field_name)
194
200
 
195
201
  def format_field(self, value, format_spec):
196
202
  # value is missing
visidata/vdobj.py CHANGED
@@ -9,6 +9,7 @@ __all__ = ['ENTER', 'ALT', 'ESC', 'asyncthread', 'VisiData']
9
9
  ENTER='Enter'
10
10
  ALT=ESC='^['
11
11
 
12
+ import threading
12
13
 
13
14
  # define @asyncthread for potentially long-running functions
14
15
  # when function is called, instead launches a thread
@@ -24,7 +25,7 @@ def asyncthread(func):
24
25
 
25
26
 
26
27
  class VisiData(visidata.Extensible):
27
- allPrefixes = ['g', 'z', 'Alt+'] # embig'g'en, 'z'mallify, Alt/Esc=User
28
+ allPrefixes = ['g', 'z', 'gz', 'Alt+', 'Alt+['] # embig'g'en, 'z'mallify, Alt/Esc=User
28
29
 
29
30
  @classmethod
30
31
  def global_api(cls, func):
@@ -47,6 +48,7 @@ class VisiData(visidata.Extensible):
47
48
  self.contexts = [self] # objects whose attributes are in the fallback context for eval/exec.
48
49
  self.importingModule = None
49
50
  self.importedModules = []
51
+ self.activeCommands = {} # dict of thread ident -> CommandLogRow
50
52
 
51
53
  @property
52
54
  def cursesEnabled(self):
@@ -166,3 +168,21 @@ class VisiData(visidata.Extensible):
166
168
  @property
167
169
  def screenWidth(self):
168
170
  return self.scrFull.getmaxyx()[1] if self.scrFull else 80
171
+
172
+ @property
173
+ def activeCommand(self):
174
+ '''Returns the active command for the current thread.
175
+ Returns a CommandLogRow, or None.
176
+ Returns None when no command has ever been stored for the current thread.'''
177
+ tid = threading.get_ident()
178
+ if tid not in self.activeCommands:
179
+ return None
180
+ return self.activeCommands[tid]
181
+
182
+ @activeCommand.setter
183
+ def activeCommand(self, value):
184
+ tid = threading.current_thread().ident
185
+ if value is None and (tid in self.activeCommands):
186
+ del self.activeCommands[tid]
187
+ else:
188
+ self.activeCommands[tid] = value
visidata/wrappers.py CHANGED
@@ -28,9 +28,15 @@ class TypedWrapper:
28
28
  def __len__(self):
29
29
  return 0
30
30
 
31
- def __str__(self):
31
+ def __repr__(self):
32
32
  return '%s(%s)' % (self.type.__name__, ','.join(str(x) for x in self.args))
33
33
 
34
+ def __str__(self):
35
+ if self.val is None:
36
+ return ''
37
+
38
+ return repr(self)
39
+
34
40
  def __lt__(self, x):
35
41
  'maintain sortability; wrapped objects are always least'
36
42
  return True
@@ -50,9 +56,11 @@ class TypedWrapper:
50
56
 
51
57
  def __iter__(self):
52
58
  return self
59
+
53
60
  def __next__(self):
54
61
  raise StopIteration
55
62
 
63
+
56
64
  class TypedExceptionWrapper(TypedWrapper):
57
65
  def __init__(self, func, *args, exception=None):
58
66
  TypedWrapper.__init__(self, func, *args)
@@ -3,5 +3,5 @@ Type=Application
3
3
  Terminal=true
4
4
  Name=VisiData
5
5
  Icon=utilities-terminal
6
- Exec=bash -i -c 'vd %f'
7
- Categories=Application;
6
+ Exec=vd %F
7
+ Categories=Utility;TextTools
@@ -1,4 +1,4 @@
1
- .Dd January 15, 2024
1
+ .Dd October 13, 2024
2
2
  .Dt vd \&1 "Quick Reference Guide"
3
3
  .Os Linux/MacOS
4
4
  .
@@ -21,6 +21,10 @@
21
21
  .Op Ar options
22
22
  .Op Ar input No ...
23
23
  .
24
+ .Nm visidata
25
+ .Op Ar options
26
+ .Op Ar input No ...
27
+ .
24
28
  .Nm vd
25
29
  .Op Ar options
26
30
  .Cm --play Ar cmdlog
@@ -33,7 +37,7 @@
33
37
  .Nm vd
34
38
  .Op Ar options
35
39
  .Op Ar input No ...
36
- .Cm + Ns Ar toplevel Ns : Ns Ar subsheet Ns : Ns Ar col Ns : Ns Ar row
40
+ .Cm + Ns Ar toplevel Ns : Ns Ar subsheet Ns : Ns Ar row Ns : Ns Ar col
37
41
  .
38
42
  .Sh DESCRIPTION
39
43
  .Nm VisiData No is an easy-to-use multipurpose tool to explore, clean, edit, and restructure data.
@@ -101,7 +105,7 @@ toggle sidebar
101
105
  .No redo the most recent undo ( requires enabled Sy options.undo Ns )
102
106
  .Pp
103
107
  .It Ic "Space" Ar longname
104
- .No open command palette; Sy Enter No to execute top command by its Ar longname
108
+ .No open command palette; execute top command by its Ar longname
105
109
  .El
106
110
  .Ss " Command Palette"
107
111
  .Bl -tag -width XXXXXXXXXXXXXXX -compact -offset XXX
@@ -137,9 +141,9 @@ scroll current row to center of screen
137
141
  jump to previous sheet (swaps with current sheet)
138
142
  .Pp
139
143
  .It Ic " / ?" Ar regex
140
- .No search for Ar regex No forward/backward in current column
144
+ .No search for Ar regex No forward/backward in current column's displayed values
141
145
  .It Ic "g/ g?" Ar regex
142
- .No search for Ar regex No forward/backward over all visible columns
146
+ .No search for Ar regex No forward/backward over all visible columns' displayed values
143
147
  .It Ic "z/ z?" Ar expr
144
148
  .No search by Python Ar expr No forward/backward in current column (with column names as variables)
145
149
  .It Ic " n N"
@@ -236,6 +240,7 @@ open a frozen copy of current sheet with all visible columns evaluated
236
240
  .It Ic "z' gz'"
237
241
  add/reset cache for current/all visible column(s)
238
242
  .Pp
243
+ .It Note that regex operations apply to the displayed value in a cell.
239
244
  .It Ic " \&:" Ar regex
240
245
  .No add new columns from Ar regex No split; number of columns determined by example row at cursor
241
246
  .It Ic " \&;" Ar regex
@@ -875,8 +880,8 @@ show/hide methods and hidden properties
875
880
  .Bl -tag -width XXXXXXXXXXXXXXXXXXXXXXXXXXX -compact
876
881
  .It Cm -P Ns = Ns Ar longname
877
882
  .No preplay Ar longname No before replay or regular launch; limited to Sy Base Sheet No bound commands
878
- .It Cm + Ns Ar toplevel Ns : Ns Ar subsheet Ns : Ns Ar col Ns : Ns Ar row
879
- .No launch vd with Ar subsheet No of Ar toplevel No at top-of-stack, and cursor at Ar col No and Ar row Ns ; all arguments are optional
883
+ .It Cm + Ns Ar toplevel Ns : Ns Ar subsheet Ns : Ns Ar row Ns : Ns Ar col
884
+ .No launch vd with Ar subsheet No of Ar toplevel No at top-of-stack, and cursor at Ar row No and Ar col Ns ; all arguments are optional
880
885
  .It Cm --overwrite Ns = Ns Ar c
881
886
  .No Overwrite with confirmation
882
887
  .It Cm --guides
@@ -915,14 +920,6 @@ exit on error and display stacktrace
915
920
  enable undo/redo
916
921
  .It Sy --col-cache-size Ns = Ns Ar "int " No "0"
917
922
  max number of cache entries in each cached column
918
- .It Sy --note-pending Ns = Ns Ar "str " No "\[u231B]"
919
- note to display for pending cells
920
- .It Sy --note-format-exc Ns = Ns Ar "str " No "?"
921
- cell note for an exception during formatting
922
- .It Sy --note-getter-exc Ns = Ns Ar "str " No "!"
923
- cell note for an exception during computation
924
- .It Sy --note-type-exc Ns = Ns Ar "str " No "!"
925
- cell note for an exception during type conversion
926
923
  .It Sy --scroll-incr Ns = Ns Ar "int " No "-3"
927
924
  amount to scroll with scrollwheel
928
925
  .It Sy --force-256-colors No " False"
@@ -933,12 +930,12 @@ confirm before quitting modified sheet
933
930
  default column width
934
931
  .It Sy --default-height Ns = Ns Ar "int " No "4"
935
932
  default column height
936
- .It Sy --textwrap-cells Ns = Ns Ar "bool " No "True"
937
- wordwrap text for multiline rows
938
933
  .It Sy --name-joiner Ns = Ns Ar "str " No "_"
939
934
  string to join sheet or column names
940
935
  .It Sy --value-joiner Ns = Ns Ar "str " No " "
941
936
  string to join display values
937
+ .It Sy --max-rows Ns = Ns Ar "int " No "1000000000"
938
+ number of rows to load from source
942
939
  .It Sy --wrap No " False"
943
940
  wrap text to fit window width on TextSheet
944
941
  .It Sy --save-filetype Ns = Ns Ar "str " No "tsv"
@@ -1024,7 +1021,7 @@ source of randomized startup messages
1024
1021
  folder recursion depth on DirSheet
1025
1022
  .It Sy --dir-hidden No " False"
1026
1023
  load hidden files on DirSheet
1027
- .It Sy --config Ns = Ns Ar "Path " No "~/.visidatarc"
1024
+ .It Sy --config Ns = Ns Ar "Path " No "/home/saul/.visidatarc"
1028
1025
  config file to exec in Python
1029
1026
  .It Sy --play Ns = Ns Ar "str " No ""
1030
1027
  file.vdj to replay
@@ -1058,7 +1055,7 @@ device ID associated with matrix login
1058
1055
  client_id for reddit api
1059
1056
  .It Sy --reddit-client-secret Ns = Ns Ar "str " No ""
1060
1057
  client_secret for reddit api
1061
- .It Sy --reddit-user-agent Ns = Ns Ar "str " No "3.0.2"
1058
+ .It Sy --reddit-user-agent Ns = Ns Ar "str " No "3.1dev"
1062
1059
  user_agent for reddit api
1063
1060
  .It Sy --zulip-batch-size Ns = Ns Ar "int " No "-100"
1064
1061
  number of messages to fetch per call (<0 to fetch before anchor)
@@ -1074,8 +1071,12 @@ Email for use with Zulip API key
1074
1071
  dialect passed to csv.reader
1075
1072
  .It Sy --csv-delimiter Ns = Ns Ar "str " No ","
1076
1073
  delimiter passed to csv.reader
1074
+ .It Sy --csv-doublequote Ns = Ns Ar "bool " No "True"
1075
+ quote-doubling setting passed to csv.reader
1077
1076
  .It Sy --csv-quotechar Ns = Ns Ar "str " No """
1078
1077
  quotechar passed to csv.reader
1078
+ .It Sy --csv-quoting Ns = Ns Ar "int " No "0"
1079
+ quoting style passed to csv.reader and csv.writer
1079
1080
  .It Sy --csv-skipinitialspace Ns = Ns Ar "bool " No "True"
1080
1081
  skipinitialspace passed to csv.reader
1081
1082
  .It Sy --csv-escapechar Ns = Ns Ar "NoneType " No "None"
@@ -1097,6 +1098,8 @@ number of rows to check for fixed width columns
1097
1098
  max number of fixed-width columns to create (0 is no max)
1098
1099
  .It Sy --graphviz-edge-labels Ns = Ns Ar "bool " No "True"
1099
1100
  whether to include edge labels on graphviz diagrams
1101
+ .It Sy --grep-base-dir Ns = Ns Ar "NoneType " No "None"
1102
+ base directory for relative paths opened with sysopen-row
1100
1103
  .It Sy --html-title Ns = Ns Ar "str " No "<h2>{sheet.name}</h2>"
1101
1104
  table header when saving to html
1102
1105
  .It Sy --http-max-next Ns = Ns Ar "int " No "0"
@@ -1123,6 +1126,8 @@ show all object versions in a versioned bucket
1123
1126
  sqlite statement to execute after opening a connection
1124
1127
  .It Sy --xlsx-meta-columns No " False"
1125
1128
  include columns for cell objects, font colors, and fill colors
1129
+ .It Sy --xlsx-color-cells Ns = Ns Ar "bool " No "True"
1130
+ color cells based on xlsx source
1126
1131
  .It Sy --xml-parser-huge-tree Ns = Ns Ar "bool " No "True"
1127
1132
  allow very deep trees and very long text content
1128
1133
  .It Sy --plt-marker Ns = Ns Ar "str " No "."
@@ -1188,7 +1193,7 @@ command submenu indicator
1188
1193
  indicator if command pushes sheet onto sheet stack
1189
1194
  .It Sy "disp_menu_input " No "\[u2026]"
1190
1195
  indicator if input required for command
1191
- .It Sy "disp_menu_fmt " No "| VisiData {vd.version} | Alt+H for help menu"
1196
+ .It Sy "disp_menu_fmt " No "| VisiData {vd.version} | {vd.hintStatus}"
1192
1197
  right-side menu format string
1193
1198
  .It Sy "disp_float_fmt " No "{:.02f}"
1194
1199
  default fmtstr to format float values
@@ -1216,7 +1221,15 @@ displayed contents for computation exception
1216
1221
  width to use for unicode chars marked ambiguous
1217
1222
  .It Sy "disp_pending " No ""
1218
1223
  string to display in pending cells
1219
- .It Sy "color_note_pending " No "bold magenta"
1224
+ .It Sy "disp_note_pending " No ":"
1225
+ note to display for pending cells
1226
+ .It Sy "disp_note_fmtexc " No "?"
1227
+ cell note for an exception during formatting
1228
+ .It Sy "disp_note_getexc " No "!"
1229
+ cell note for an exception during computation
1230
+ .It Sy "disp_note_typeexc " No "!"
1231
+ cell note for an exception during type conversion
1232
+ .It Sy "color_note_pending " No "bold green"
1220
1233
  color of note in pending cells
1221
1234
  .It Sy "color_note_type " No "226 yellow"
1222
1235
  color of cell note for non-str types in anytype columns
@@ -1254,19 +1267,19 @@ characters for ascending sort
1254
1267
  characters for descending sort
1255
1268
  .It Sy "color_default " No "white on black"
1256
1269
  the default fg and bg colors
1257
- .It Sy "color_default_hdr " No "bold"
1270
+ .It Sy "color_default_hdr " No "bold white on black"
1258
1271
  color of the column headers
1259
- .It Sy "color_bottom_hdr " No "underline"
1272
+ .It Sy "color_bottom_hdr " No "underline white on black"
1260
1273
  color of the bottom header row
1261
1274
  .It Sy "color_current_row " No "reverse"
1262
1275
  color of the cursor row
1263
- .It Sy "color_current_col " No "bold"
1276
+ .It Sy "color_current_col " No "bold on 232"
1264
1277
  color of the cursor column
1265
1278
  .It Sy "color_current_cell " No ""
1266
1279
  color of current cell, if different from color_current_row+color_current_col
1267
1280
  .It Sy "color_current_hdr " No "bold reverse"
1268
1281
  color of the header for the cursor column
1269
- .It Sy "color_column_sep " No "246 blue"
1282
+ .It Sy "color_column_sep " No "white on black"
1270
1283
  color of column separators
1271
1284
  .It Sy "color_key_col " No "81 cyan"
1272
1285
  color of key columns
@@ -1274,27 +1287,41 @@ color of key columns
1274
1287
  color of hidden columns on metasheets
1275
1288
  .It Sy "color_selected_row " No "215 yellow"
1276
1289
  color of selected rows
1277
- .It Sy "color_clickable " No "underline"
1290
+ .It Sy "color_clickable " No "bold"
1278
1291
  color of internally clickable item
1279
1292
  .It Sy "color_code " No "bold white on 237"
1280
1293
  color of code sample
1281
- .It Sy "color_heading " No "bold 200"
1294
+ .It Sy "color_heading " No "bold black on yellow"
1282
1295
  color of header
1283
1296
  .It Sy "color_guide_unwritten" No "243 on black"
1284
1297
  color of unwritten guides in GuideGuide
1285
- .It Sy "disp_rstatus_fmt " No "{sheet.threadStatus} {sheet.keystrokeStatus} [:longname]{sheet.longname}[/] {sheet.nRows:9d} {sheet.rowtype} {sheet.modifiedStatus}{sheet.selectedStatus}{vd.replayStatus}"
1298
+ .It Sy "disp_wrap_max_lines" No "3"
1299
+ max lines for multiline view
1300
+ .It Sy "disp_wrap_break_long_words" No "False"
1301
+ break words longer than column width in multiline
1302
+ .It Sy "disp_wrap_replace_whitespace" No "False"
1303
+ replace whitespace with spaces in multiline
1304
+ .It Sy "disp_wrap_placeholder" No "\[u2026]"
1305
+ multiline string to indicate truncation
1306
+ .It Sy "disp_multiline_focus" No "True"
1307
+ only multiline cursor row
1308
+ .It Sy "color_aggregator " No "bold 255 white on 234 black"
1309
+ color of aggregator summary on bottom row
1310
+ .It Sy "disp_rstatus_fmt " No "{sheet.threadStatus} {sheet.keystrokeStatus} [:longname_status]{sheet.longname}[/] {sheet.nRows:9d} {sheet.rowtype} {sheet.modifiedStatus}{sheet.selectedStatus}{vd.replayStatus}{vd.sidebarStatus}"
1286
1311
  right-side status format string
1287
- .It Sy "disp_status_fmt " No "[:onclick sheets-stack]{sheet.shortcut}\[u203A] {sheet.name}[/]| "
1288
- status line prefix
1312
+ .It Sy "disp_status_fmt " No "{sheet.sheetlist}| "
1313
+ left-side status format string
1289
1314
  .It Sy "disp_lstatus_max " No "0"
1290
1315
  maximum length of left status line
1291
1316
  .It Sy "disp_status_sep " No "\[u2502]"
1292
1317
  separator between statuses
1293
1318
  .It Sy "color_keystrokes " No "bold white on 237"
1294
1319
  color of input keystrokes
1295
- .It Sy "color_longname " No "bold 52 on 114 green"
1320
+ .It Sy "color_longname_guide" No "237"
1296
1321
  color of command longnames
1297
- .It Sy "color_keys " No "bold"
1322
+ .It Sy "color_longname_status" No "white"
1323
+ color of command longnames
1324
+ .It Sy "color_keys " No "bold reverse"
1298
1325
  color of keystrokes in help
1299
1326
  .It Sy "color_status " No "bold on 238"
1300
1327
  status line color
@@ -1328,6 +1355,8 @@ default fmtstr to format for currency values
1328
1355
  color for negative values in currency displayer
1329
1356
  .It Sy "disp_replay_play " No "\[u25B6]"
1330
1357
  status indicator for active replay
1358
+ .It Sy "disp_replay_record " No "\[u23FA]"
1359
+ status indicator for macro record
1331
1360
  .It Sy "color_status_replay" No "green"
1332
1361
  color of replay status indicator
1333
1362
  .It Sy "disp_histogram " No "\[u25A0]"
@@ -1348,8 +1377,16 @@ color of selected graph points
1348
1377
  color for graph axis labels
1349
1378
  .It Sy "disp_graph_tick_x " No "\[u2575]"
1350
1379
  character for graph x-axis ticks
1351
- .It Sy "disp_help " No "2"
1352
- show help panel during input
1380
+ .It Sy "color_graph_refline" No ""
1381
+ color for graph reference value lines
1382
+ .It Sy "disp_graph_reflines_x_charset" No "\[u258F]\[u2502]\[u2502]\[u2595]"
1383
+ charset to render vertical reference lines on graph
1384
+ .It Sy "disp_graph_reflines_y_charset" No "\[u2594]\[u2500]\[u2500]\[u2581]"
1385
+ charset to render horizontal reference lines on graph
1386
+ .It Sy "disp_graph_multiple_reflines_char" No "\[u2592]"
1387
+ char to render multiple parallel reflines
1388
+ .It Sy "disp_expert " No "0"
1389
+ max level of options and columns to include
1353
1390
  .It Sy "color_add_pending " No "green"
1354
1391
  color for rows pending add
1355
1392
  .It Sy "color_change_pending" No "reverse yellow"
@@ -1358,7 +1395,7 @@ color for cells pending modification
1358
1395
  color for rows pending delete
1359
1396
  .It Sy "disp_sidebar " No "True"
1360
1397
  whether to display sidebar
1361
- .It Sy "disp_sidebar_fmt " No "{guide}"
1398
+ .It Sy "disp_sidebar_fmt " No ""
1362
1399
  format string for default sidebar
1363
1400
  .It Sy "disp_sidebar_width " No "0"
1364
1401
  max width for sidebar
@@ -1394,10 +1431,6 @@ color of active clue
1394
1431
  base color of command palette
1395
1432
  .It Sy "disp_cmdpal_max " No "10"
1396
1433
  max number of suggestions for command palette
1397
- .It Sy "color_shellcmd " No "21 on 114 green"
1398
-
1399
- .It Sy "color_colname " No "underline"
1400
-
1401
1434
  .It Sy "disp_scroll_context" No "0"
1402
1435
  minimum number of lines to keep visible above/below cursor when scrolling
1403
1436
  .It Sy "disp_sparkline " No "\[u2581]\[u2582]\[u2583]\[u2584]\[u2585]\[u2586]\[u2587]"