Visidata

Latest version: v3.1.1

Safety actively analyzes 706259 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 3 of 11

2.7.1

Not secure
- Bugfix: fix Enter on helpmenu (reported by geekscrapy 1196)

2.7

Not secure
Improvements

- [movement] bind Home/End to go-top/go-bottom (thanks geekscrapy 1161)
- [api] add vd.urlcache as alias for urlcache global (thanks geekscrapy for PR 1164)
- [plugins] do not continue installation if main package fails pip install (thanks geekscrapy for PR 1194)
- [plugins] allow for plugin records without SHA256; warn if absent (thanks geekscrapy for PR 1183)
- [load_lazy] do not load subsheets, if `sheet.options.load_lazy` is True (thanks geekscrapy for PR 1193)
- [save] confirm when `save_foo` function does not exist and saver fallsback to `options.save_filetype` (reported by geekscrapy 1180)
- [save] `options.save_filetype` default now 'tsv'
- several cosmetic improvements

Loaders

- [lsv] add `lsv` filetype for simple awk-like records (requested by fourjay 1179)
- [ods] add `odf` filetype for Open Document Format spreadsheets
- [xlsx] add extra columns (`cellobject`, `fontcolor`, `fillcolor`) if `options.xlsx_meta_columns` (default False) (thanks hoclun-rigsep for PR 1098)
- [sqlite] allow query/insert (no modify/delete yet) for `WITHOUT ROWID` tables (requested by stephancb 1111)

Bugfixes

- [savers compression formats] fix corruption when saving to compression formats (1159)
- fix "ModuleNotFoundError: no module named 'plugins'" error on startup (1131 1152)
- [windows] fix issue with Enter key on Windows (reported by hossam-houssien 1154)
- [draw] fix multiline rows by making height fixed for all rows (reported by geekscrapy 916)
- [DirSheet] fix bug where fix key column sheets (e.g. DirSheet, SqliteIndexSheet) keycols were not being saved in batchmode (reported by geekscrapy 1181)
- [async] make sure all threads started on sheet are cancelable (reported by geekscrapy 1136)
- [AttrDict] fix bug with setting value on nested AttrDict
- [dup-X-deep] fix error with async_deepcopy (thanks pstuifzand for fix)
- [join] fix 'inconsistent-keys' issue when joining between XlsxSheet with typed columns and CsvSheet with untyped columns (reported by davidwales 1124)
- [sqlite] handle sqlite column names with spaces (thanks davidskeck for PR 1157)
- [sqlite] use `options.encoding` and `options.encoding_errors` for decoding of sqlite db text (reported by WesleyAC 1156)
- [xlsx] add handling for EmptyCell instances (thanks hoclun-rigsep for PR 1121)
- [xlsx] gate sheet name cleaning on `options.clean_names` (reported by davidwales 1122)
- [macos] fix bindings for `Option`+key
- [random-rows] fix import (reported by geekscrapy 1162)
- [save-selected] better default save filename (reported by geekscrapy 1180)
- [save] fix bug where saving multiple sheets to a single non-embeddable format did not result in fail (reported by geekscrapy 1180)
- [slide] fix Shift slide-down and Shift slide-up with arrow keys (reported by a-y-u-s-h 1137)
- [replay] fix replay where `join-sheets` operation hangs (reported by agjohnson 1141)
- [undo] no more KeyError when Undoing modifications (reported by geekscrapy 1133)
- [unfurl-col] fix unfurl-col on cells containing exceptions (reported by jsvine 1171)

2.6.1

Not secure
Bugfixes

- [editor] fix sysopen-row (thanks frosencrantz 1116)
- [loaders fixed] fix saver (1123)
- [loaders shell] fix copy-files
- [loaders sqlite] fix import error on exception (thanks jsvine 1125)

2.6

Not secure
Major feature

- [menu] new hierarchical menu system
- `Alt+F`, `Alt+E`, etc to open submenus (`Alt+` underlined capital letter in toplevel menu)
- `Ctrl+H` to activate Help menu (manpage now at `gCtrl+H`)
- `q` or `Esc` to exit menu
- Enter to expand submenu item or execute command
- or left mouse click to activate and navigate menu
- only show commands available on current sheet
- sheet-specific commands highlighted with `options.color_menu_spec`
- new options:
- `disp_menu`: display menu if inactive (default True). Can still activate menu with Ctrl+H/Alt+F
- `disp_menu_keys`: whether to display shortcuts inline (default True)
- `disp_menu_fmt`: upper right display on menu bar (like `disp_status_fmt`/`disp_rstatus_fmt`)
- theme colors: `color_menu` `color_menu_active` `color_menu_spec` `color_menu_help`
- theme chars: `disp_menu_boxchars` `disp_menu_more` `disp_menu_push` `disp_menu_input` `disp_menu_fmt`

Interface changes

- [expand-col] only expand to one level
- [slide] remove slide row/col with mouse
- [macos] add bindings for Option+key to Alt+key
- [modified] limit use of sheet protection (thanks geekscrapy 1037)
- [python] rebind g^X to new import-python command (what exec-python was mostly used for)
- [npy] add `npy_allow_pickle` option (default False)
- [join] rename join-sheets on IndexSheet to join-selected; bind both g& and & to join-selected
- [loaders pandas] add error message for unpickling non-dataframes
- [join] fail if no key columns on any sheet (thanks geekscrapy 1061)
- [loaders xlsx] enable access to cell metadata (thanks hoclun-rigsep 1088)
- many performance, progress bar, and UI responsiveness improvements

Bugfixes

- [cli] issue warning if +sheet-position not found (thanks geekscrapy 1046)
- [clipboard] do not copy newline for syscopy-cell (thanks geekscrapy 1064)
- [column] detect existing column by row key instead of column name (thanks geekscrapy 1058)
- [color] set `color_current_row` to the same precedence as `color_current_column` (thanks frosenrantz 1100)
- [command] do not fail/abort on unknown command
- [draw] Sort indicator on top of More indicator (thanks geekscrapy 1071)
- [join] fix multiple extend (thanks cwarden)
- [join] allow extended columns to be modified (thanks cwarden)
- [join] fix for rowdefs without bool (like pandas)
- [loaders dirsheet] continue after exception in copyfile
- [loaders fixed] fix fixed-format saver
- [loaders fixed] save uses `global options.encoding` (thanks geekscrapy 1060)
- [loaders mysql] do not stop loading on first error (thanks SuRaMoN 1085)
- [loaders pandas] fix column rename
- [loaders sqlite] save based on column names, not position
- [loaders sqlite] allow changing value of cells that were NULL (thanks mattenklicker 1052)
- [loaders sqlite] add message on not currently supporting WITHOUT ROWID (thanks stephancb 1111)
- [multisave] fix breaking typo
- [open_txt] load new blank sheet for 0 byte files (thanks geekscrapy 1047)
- [save] do not set a default for `options.save_filetype` (thanks frosencrantz 1072)
- [split-pane mouse] activate pane on click (thanks frosencrantz 954)
- [unfurl] handle unfurling exceptions (close 1053)
- [quitguard] confirm quit when set on a specific sheet even if not precious or modified
- [yaml] Fix yaml loader traces on no attribute `_colnames` (thanks frosencrantz 1104)
- [visidatarc] catch all visidatarc exceptions upon load

2.5

Not secure
- [social] visidata has moved off of freenode to libera.chat
- [deps] required pandas version for the pandas loader has been bumped to at least 1.0.5
- [caa] new PR submitters required to sign CAA

Features

- [cli] when no arguments on commandline, open currentDirSheet (previously vdmenu); -f opens empty sheet of that filetype
- [clipboard] bind `x` family to `cut-*` (thanks geekscrapy 895)
- [date] add specialized comparators for `datetime.date` (thanks aborruso 975)
- visidata.date now compares to datetime.date (previously raised exception)
- identical dates compare equal even if intra-day times are different
- this does not work for incompletely specified visidata.date; e.g.
`visidata.date(2016, 10, 29, 4, 0, 0) != visidata.date(2016, 10, 29)`
- [DirSheet] add y/gy to copy file(s) to given directory
- [loaders vds] save non-jsonable cells as string (thanks pacien 1011)
- [loaders zstd] support loading zstd-compressed files (thanks lxcode 971)
- [movement] bind `Ctrl+Left/Right` to `go-left`/`right-page` (thanks davidwales 1002)
- [options] save to foo.visidatarc from OptionsSheet (thanks njthomas 958)
- [sqlite] RENAME and DROP tables from SqliteIndexSheet
- [unfurl] add `options.unfurl_empty` to include row for empty list/dict (thanks frosencrantz 898)
- [quitguard] confirm quit/reload only if sheet modified (references 955, 844, 483; thanks jvns, frosencrantz)

Improvements

- [addRow] advance cursor if row inserted before cursor
- [archive] add .lzma as alias for .xz
- [clipboard] gzp pastes None if nothing on clipboard
- [clipboard] make syspaste async
- [clipboard] bind `zP` to syspaste-cells and gzP to syspaste-cells-selected (thanks jvns and frosencrantz 983, 990)
- [cliptext] better support for combining and variant chars (thanks lxcode 758 1034)
- [colors] reduce color swatch size to remove flashing (thanks frosencrantz 946)
- [encoding] specify encoding explicitly for all Path.open_text (thanks pacien 1016)
- [error] exceptionCaught(status=False) to add to status history, but not post to status (thanks frosencrantz 982)
- [freqtbl] copy fmtstr from source col to aggcol (thanks geekscrapy 1003)
- [help] ENTER/exec-command to execute command on undersheet (thanks geekscrapy 1011)
- [help] add `all_bindings` hidden column (thanks frosencrantz 896)
- [inputs] put reused input at end of lastInputs (thanks geekscrapy 1033)
- [loaders json] streamify save to .json
- [loaders npy] add `npy_allow_pickle` option, default False
- [loaders tsv] increase bufsize to improve loader performance by 10%
- [path] all Path.open track Progress via read/filesize (thanks jspatz 987)
- [path] add Progress for opening compressed files
- [path] implement line-seek operations (thanks pacien 1010)
- [regex expand] deprecate `options.expand_col_scanrows`; standardize on `options.default_sample_size` (thanks jsvine)
- [regex] "match regex" to "capture regex" (thanks geekscrapy 1032)
- [shell] `addcol-shell` pass command to $SHELL (thanks juston2004 1023)
- [shortcut] allow shortcut for jump-sheet to be settable
- [splitwin] push sheet in empty pane iff splitwin
- [stdin] use cli --encoding option for piped data (thanks pacien 1018)
- [undo] remove undo for reload (replaced with quitguard+confirm)
- [quit] add Shift+Q/quit-sheet-free to quit and free associated memory (thanks cwarden)

Display
- [canvas] add `options.disp_canvas_charset` to change displayed chars (thanks albert-ying 963)
- [canvas] use sheet specific options for draw
- [disp] format list/dict as [n]/{n} only for anytype
- [save] iterdispvals(format=True) convert None to empty string

Bugfixes

- [batch] ensure quitguard is off during batch mode
- [canvas[ fix error on dive into cursor including y-axis
- [cli] have an actual error if there is a missing argument for final option
- [cli] do nothing (no error) if no sources given
- [clipboard] fix zy/gzp regression (thanks sfranky 961)
- [clipboard] syscopy-cell do not include column name
- [cmdlog] fix bug where customising replayable options in Options Sheet led to issues opening metasheets (thanks jsvine 952)
- [cmdlog] fix bug where cmdlog records new sheet name, instead of old sheet name for `rename-sheet` (thanks aborruso 979)
- [color] track precedence so colorizers apply over `color_current_row`
- [color] determine color availability with `init_pair`
- [color] do not break on nonsense color
- [column] getitemdeep/setitemdeep get/set dotted item key if exists (thanks frosencrantz 991)
- [column] fix bug where hard crash occurs when cursor on cell of SheetsSheet is on cursorDisplay (thanks frosencrantz 1029)
- [curses] add default `vd.tstp_signal` for non-cli users
- [execCommand] warn gracefully if bound command longname does not exist
- [expr] setValuesFromExpr do not stop processing on exception
- [join] fix when keys have different names (thanks aborruso 964)
- [join] fix for rowdefs without bool (like pandas)
- [join] fix multiple extend (thanks cwarden for reporting)
- [loaders fixed] fix editing in final column for fixed-width load (thanks mwayne 974)
- [loaders geojson] do not abort plot if rows have errors
- [loaders html] add columns even if not in first row
- [loaders pandas] fix column rename
- [loaders rec json] fix adding new columns for json and rec loaders (thanks ajkerrigan 959)
- [loaders postgresql] add postgresql scheme (fixes 966) (thanks zormit 967)
- [loaders sqlite] fix saving deleted cells (thanks mattenklicker 969)
- [loaders vds] save SettableColumn as Column (thanks pacien 1012)
- [loaders zip] fix extract-selected-to
- [open] fix regression where opening blank sheets of type tsv, csv, txt, etc was not working
- [plugins] fix stdout/error from plugins installation message (was in bytes, changed to str)
- [quit] remove sheets from **Sheets Sheet** upon quit
- [save-col] fix inputPath error (thanks savulchik 962)
- [shell] fix `options.dir_hidden`; also apply to dirs when `dir_recurse`
- [textsheet] fix reload after `^O` sysopen

vdplus

- moved clickhouse, vsh, vgit, windows to vdplus

2.4

Not secure
Additions and Improvements
- [cmdlog] allow sheet-specific set-option for replay
- [columns] add default uppercase names for created columns (like VisiCalc)
- these names are global; no default name is ever reused
- [cosmetic] a column with a width 1 will now display (thanks frosencrantz for the bug report 512)
- [defer] move defermods and vls back into vdcore
- configure sqlite and DirSheet to use it
- [dir] allow explicit filetype when loading a directory (thanks geekscrapy for the bug report 546)
- [errors] ErrorsSheet on `g Ctrl+E` lists errors, instead of concatenating
- [expand-cols] account for all visible rows when expanding a column (thanks ajkerrigan for PR 497)
- [loaders csv] use `options.safe_error` for cell exceptions on save
- [loaders http] use file format in path if loader available (thanks jsvine for PR 576 and bug report 531)
- if not, fail back to MIME type (prev behaviour)
- [loaders imap] add loader for imap://
- [loaders json] handle non-dict rows in json data (thanks ajkerrigan for PR 541 and jsvine for bug report 529)
- [loaders jsonl] show parse errors in every column
- [loaders MySQL] add support for MySQL loader (thanks p3k for PR 617)
- [loaders pandas] upgrade pandas to 1.0.3 (thanks ajkerrigan for PR 563)
- [loaders pandas] add auto-loaders for feather, gbq, orc, parquet, pickle, sas, stata (thanks khughitt for bug report 460)
- [loaders pdf] add simple pdf loader
- [loaders postgres] add support for connecting directly to rds (thanks danielcynerio for PR 536)
- the url has the following format: `rds://db_userhostname:port/region/dbname`
- it assumes that the AWS IAM for the user is configured properly
- [loaders xls/xlsx] add save_xls and save_xlsx (thanks geekscrapy for PR 574)
- [loaders yaml] allow diving into YAML rows (thanks ajkerrigan for PR 533)
- [loaders yaml] use the default safe YAML loader (thanks tsibley for the PR 600 )
- the full loader is unsafe because serialized files can be constructed which run arbitrary code during their deserialization
- the safe loader supports a very large subset of YAML and supports the most common uses of YAML
- [loaders yaml] support files containing multiple documents (thanks tsibley for PR 601)
- [options] set visidata_dir and config from `$VD_DIR` and `$VD_CONFIG` (thanks tsibley for bug report 448)
- [type fmtstr] thousands separator (thanks dimonf for bug report 575)
- default for int/float is string.format for roundtripping accurately in data text files like csv
- if fmtstr starts with '%', use locale.format_string (with grouping)
- otherwise, use python string.format
- currency uses locale, and is grouped.
- [quitguard] if set on specific sheet, only confirm quit on that sheet (thanks jsvine for bug report 538)
- [undo] add undo for `rename-col-x` family, mouse slide, and `reload-sheet` (thanks jsvine for feature request 528)

Command changes
- [add-sheet] renamed to open-new; new sheet always has a single column
- [config] bind `g Shift+O` back to open-config (553)
- [dive] convert many dive- commands to open- (557)
- add open-row bound to `ENTER` on Sheet itself
- add `open-source` unbound on BaseSheet
- deprecate `dive-*` longname
- [options] options-global now `Shift+O`; options-sheet now `z Shift+O`
- [multi-line] have visibility toggle Multi-Line Row on TextSheets (Closes 513)
- used to toggle `wrap`

Command additions
- [canvas] add resize-x/y-input commands to set x/y axis dimensions (thanks pigmonkey for feature request 403)
- [errors] add select-error-col and select-error (thanks pigmonkey for feature request 402)
- [input] `Ctrl+Y` paste from cell clipboard
- [input] Ctrl+Left/Right move cursor to prev/next word
- [iota] add `i` family of commands (iota/increment)
- (former) setcol-range (`gz=`) renamed to `setcol-iter`
- `addcol-range-step` (`i`): add column with incremental value
- `secol-range` (`gi`): set current column for selected rows to incremental values
- `addcol-range-step` (`zi`): add column with incremental values times given step
- `setcol-range` (`gzi`): set current column for selected rows to incremental values times given step
- [mouse] add unbound `mouse-enable` and `mouse-disable` commands
- [quitguard add unbound `guard-sheet` command to set quitguard on current sheet (thanks jsvine for feature request 538)
- [unfurl-col] add command, bound to `zM`, which does row-wise expansion of iterables in a column (thanks frosencrantz for feature request and jsvine for initial code sample 623)
- thanks jsvine for name and initial implementation

Options
- [cli] custom cli option parsing (thanks tsibley for the behaviour request 573)
- `--options` apply as sheet-specific option overrides to the sources following them
- the last setting for a given option is the cli-given override setting (applies to all cli sources, unless they have the option already set)
- this allows both
- `vd -f csv foo.txt`
- `vd foo.txt -f csv`
- `--help` opens the manpage
- `-g` prefix sets option globally for all sheets
- [cli] add --imports (default "plugins") (thanks tsibley for feature request 448)
- space-separated list of modules to import into globals before loading .visidatarc
- plugins can be installed by VisiData without modifying .visidatarc
- [chooser] experimental `options.fancy_chooser`
- when fancy_chooser enabled, aggregators and jointype are chosen with a ChoiceSheet.
- press `ENTER` on any row to choose a single option, or select some rows, and press `ENTER` to choose the selectedrows
- warning: the mechanism to do this effectively launches another instance of visidata, and so it is possible to get into an embedded state (if you jump around sheets, for example, instead of selecting). 'gq' should still work (thought `CTRL+Q` may need to be pressed several times).
- [dir] add `-r` alias for `--dir-recurse`
- [join-cols] add `options.value_joiner` to combine cell values for join-col (thanks aborruso for feature request 550)
- [join-cols] add `options.name_joiner` to combine column names for join-col, and sheet names for dive-row (thanks aborruso for feature request 550)
- sheet names for join-sheets are still joined with '+' or '&' for the time being
- [loaders html] add `options.html_title` to exclude the sheetname when saving sheet as html table (thanks geekscrapy for PR 566)
- [loaders postgres] add support for custom postgres schema (Thanks p3k for PR 615)
- schema defaults to `public` but can be overridden using the `--postgres-schema` flag:
- `vd --postgres-schema=foo postgres://user:pwlocalhost/foobar`
- [loaders zip] -f filetype now applies to inner files
- [mouse] add options.mouse_interval to control the max time between press/release for click (ms)
- set to 0 to disable completely
- [pyobj] add `options.expand_col_scanrows` to set the number of rows to check when expanding columns (0 = all)
- [type fmtstr] add fmtstr options for numerical types
- add options.disp_currency_fmt
- add options.disp_int_fmt
- add options.disp_date_fmt

Plugins
- [dependencies] install plugin dependencies into vd dir (thanks tsibley for feature request 448)
- [diff] diff is now a plugin
- `--diff` is not available as a cmdline argument anymore
- [vds3] bumped to 0.4 (ajkerrigan)
- [marks] initial release 0.1; marks selected rows with a keystroke; utils for selecting + viewing marked rows (saulpw)
- [genericSQL] initial release (1.0); basic loader for MySQL (Oracle, MySQL) (aswanson)
- [diff] is now a plugin (saulpw)

Bugfixes
- [cmdlog] fix case where CommandLog `open-` entries would not be replayable
- [cmdlog] record keystrokes for command
- [cmdlog] global cmdlog behaviour is now consistent with VisiData v1.5.2 cmdlog
- [dirsheet] check if directory before grabbing filetype from ext (thanks frosencrantz for bug report 629)
- handles case where `.` in directory name
- [helpsheet] do not include deprecated longnames (thanks frosencrantz for bug report 621)
- [input] flush input buffer upon newline in input; prevent pastes with accidental newlines from becoming keystrokes (thanks geekscrapy for bug report 585)
- [loaders csv] PEP 479 fix for csv loader (thanks ajkerrigan for PR 499)
- This avoids the following error when opening CSV files in Python 3.8: `RuntimeError: generator raised StopIteration`, but maintains the behaviour of gracefully handling malformed CSV files.
- References:
- https://www.python.org/dev/peps/pep-0479/#examples-of-breakage
- https://github.com/python/cpython/pull/6381/files
- [loaders html] cast to str before writing (thanks geekscrapy for bug report 501)
- [loaders html md] preserve formatting of display values when saving
- [loaders html] fix string formatting issue for the html table name when saving (thanks geekscrapy for PR 566)
- [loaders pandas] bugfixes for sort (thanks ajkerrigan for PR 496)
- [loaders pandas] fix row deletion + its undo (thanks ajkerrigan for PR 496)
- [loaders pandas] improve regex select/unselect logic (thanks ajkerrigan for PR 496)
- [loaders pandas] fix row selection/deselection (thanks ajkerrigan for PR 496)
- [loaders postgres] load an estimate of row numbers for improved performance (thanks danielcynerio for PR 549)
- [loaders postgres] fix expand column to work on a json column in postgres (thanks danielcynerio for PR 552)
- [loaders sqlite] save display value if not supported sqlite type (thanks jtf621 for bug report 570)
- [loaders xml] correctly copy columns; fix path (504)
- [numeric-binning] fix numeric-binning bug with currency type column
- [dir] fix dup-rows-deep on DirSheet (thanks geekscrapy for bug report 489)
- [rstatus] fix rstatus when repeating a command with no keystrokes (Thanks ajkerrigan for bug report 577)
- [save-sheets] fix saving multi-sheets as individual files to directory
- [settings] remove internal option defaults from cmdlog
- [sheets_all] make opened .vd/.vdj precious
- [transpose] handle case where columns are numeric (thanks frosencrantz for bug report 631)
- [undo] fix undo with duplicate-named sheets (thanks jsvine for bug report 527)
- [utils] Fix namedlist bug with column named after VisiData attrs (particularly 'length') (thanks tsibley for bug report 543)


Infrastructure / API
- [asyncsingle] ensure that unfinished threads decorated with asyncsingle do not block upon sync()
- used so that domotd() and PluginsSheet().reload() do not block replay progression
- [open-] switch from vd.filetype to open_ext; deprecate vd.filetype
- [warnings] output Python warnings to status

Page 3 of 11

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.