VisiData 2.0.1
major changes since 1.5.2 (last official release)
- Plugin API
- Undo/Redo
- Deferred changes
- Split Window
highlighted features added since 1.5.2
- [iota] add
i
family of commands (iota/increment) - [unfurl-col]
zM
, which does row-wise expansion of iterables in a column - [join] add
merge
jointype (thanks @sfranky for feature request #405) - [freq/pivot] range binning for numeric columns
- [options] options parsing rewrite allows for per-sheet options
- [cli] stdout pipe/redirect
- more visibility for long values, with multi-line rows and offset scrolling
- add Alt/Esc as prefix for user keybindings
- [input]
Ctrl+Y
paste from cell clipboard and other improvements
new loaders since 1.5.2
- MIME (.eml) (2.-5)
- recutils (.rec) (2.-5)
- VCard (.vcf) (2.-5)
- IMAP (email)
- MySQL (thanks @p3k)
- PDF (text only)
- numPY (.npy/.npz)
- Unicode Separated Value (.usv)
- Excel 2007-2010 binary fomat (.xlsb) (suggested by @woutervdijke #246)
- feather, gbq, orc, parquet, pickle, sas, stata via pandas (thanks @khughitt for bug report #460)
- postgres support for connecting directly to rds (thanks @danielcynerio for PR #536)
For the full list, see below along with release notes from previous pre-releases, or view the CHANGELOG
changes since pre-release v2.-4
-
Additions and Improvements
- [aggregators] allow custom aggregators in plugins/visidatarc (thanks @geekscrapy for the feature request #651)
- [loaders xlsx] automatically clean sheet name when saving; warn if sheet name changes (thanks @geekscrapy for the request #594)
- [columns] unhide height attribute by default (thanks @frosencrantz for feature request #660)
- add .vcf (VCard) loader
- [sqlite] remove name of db from an SqliteSheet's name, only tablename
- [syspaste] make
syspaste-
replayable and undoable (note thatsyspaste-
value will be recorded in CommandLog) - [savers] many text saver filetypes via tabulate library (thanks @jsvine for original vdtabulate plugin)
- [calc] ExprColumn no longer cached by default
- [loaders rec] add new .rec file loader and multisheet saver (recutils)
- [savers] implemented multisheet saver for both json and jsonl
- [loaders eml] add new .eml file loader for email files with attachments
-
Options
- add
options.incr_base
(thanks @chocolateboy for the suggestion #647) - (former)
options.force_valid_colnames
renamed tooptions.clean_names
- applies to Sheets and Columns now (thanks @geekscrapy for the request #594)
- for --X=Y, do not replace - with _ in Y (thanks @forensicdave for bug report #657)
- add
options.default_height
for visibility toggle (thanks @frosencrantz for feature request #660) - add support for
--
option-ending option on CLI. - [input] default now
fancy_chooser
= True- when fancy_chooser enabled, aggregators and jointype are chosen with a ChoiceSheet.
s
to select,Enter
to choose current row,g Enter
to choose selected rows,q
to not choose any
- numeric_binning is now True by default (enables numeric binning on PivotSheet and FreqTable for numeric columns
- add
-
Command changes and additions
- (former) setcol-range (gz=
) renamed tosetcol-iter
- (former)addcol-range-step
(i
) renamed toaddcol-incr-step
- (former)setcol-range
(gi
) renamed tosetcol-incr
- (former)addcol-range-step
(zi
) renamed toaddcol-incr-step
- (former)setcol-range-step
(gzi
) renamed tosetcol-incr-step
- addscroll-cells-*
to scroll display of cells while remaining in a Column; bind to [g]z{hjkl}
- (former) unbind z{hjkl} fromscroll-col
(thanks @geekscrapy for feature request #662)
- addtype-floatsi
bound toz%
(#661)
-reload-selected
now reloads all Sheets if none selected (thanks @geekscrapy for PR #685)
- add customdate with fixed fmtstr for parsing (usez@
and input a fmtstr compatible with strptime (thanks @suntzuisafterU for feature request #677) -
Bugfixes
- [DirSheet] use changed ext as filetype when loading files (thanks @frosencrantz for bug report #645)
- [slide] several major improvements to column sliding; key column sliding now works (thanks much to @geekscrapy for bug hunting #640)
- [open-row] Sheets Sheet should be removed from stack upon
open-row
(thanks @cwarden for the bug report) - [cli] re-add --version (thanks @mlawren for bug report #674)
- [open-config] fix
gO
(thanks @geekscrapy for bug report #676) - [splitwin] handle swap case for single sheet (thanks @geekscrapy for bug report #679)
- [loaders xlsx] handle
None
column names for all Sequence Sheet loaders (thanks @jsvine for bug report #680) - [settings] retrieve from cache for top sheet if obj is None (thanks @aborruso for the bug report #675)
- [settings] check if option is set on specific sheet before falling back to override
- [describe] have DescribeSheet use source column's sheet's
options.null_value
to calculate its null column (thanks @aborruso for the bug report #675) - [undo] ensure that undos for complex commands (like
expand-cols
) are set more frequently (thanks @frosencrantz for the bug report #668)- it is still possible to find race conditions if the user presses commands fast enough, however they should happen far less frequently
- [vlen] fix numeric binning for
vlen()
(thanks @frosencrantz for bug report #690) - [pivot] fix pivot case where no aggregator is set
- [pyobj] fix filtering for PyobjSheet
- [DirSheet] fix sorting for directory column of DirSheet (thanks @frosencrantz for bug report #691)
- [json] fix bug saving cells with nested date values (thanks @ajkerrigan for PR #709)
- [input] fix Ctrl+W bug when erasing word at beginning of line
- [plugins] import
.visidata/plugins
by default - [pandas] use a safer
reset_index()
to avoid losing data when updating a pandas index (thanks @ajkerrigan for PR #710) - [threads] disable
add-row
on ThreadsSheet (thanks @geekscrapy for bug report #713)
-
deprecated
- complete removal of
status
andstatuses
from deprecated (thanks @frosencrantz for bug report #621)- longnames are now
open-status
andshow-status
- longnames are now
- remove
cursorColIndex
- complete removal of
-
API and Interface
Sheet(*names, **kwargs)
autojoins list of name partsopenSource()
,aggregator()
, andaggregators
are now part of vdobjset_option
is nowsetOption
- move
isError
toColumn.isError
- deprecate
load_pyobj
, now PyobjSheet - add
.getall('foo_')
which returns all options prefixed with'foo_'
; deprecatedoptions('foo_')
nSelected
is nownSelectedRows
- make
Column.width
property, so setting is same asColumn.setWidth
evalexpr
is nowevalExpr
format
is nowformatValue
SettableColumn.cache
is now._store
vdtype()
is nowvd.addType()
- add
addColumnAtCursor
(thanks @geekscrapy for bug report #714)
-
Plugins
-
Dev niceties
- Fully automate dev setup with Gitpod.io (thanks @ajkerrigan for PR #673)