visidata: Import visidata-1.5.2 as wip/visidata

A curses interface for exploring and arranging tabular data
usable via any remote shell which has Python3 installed.

A few interesting commands:
 - Shift-F pushes a frequency analysis of the current column
 - = creates a new column from the given Python expression (use column names to
   refer to their contents)
 - . creates new columns from the match groups of the given regex

Still not working with NetBSD curses(3) due get_wch(3) usage, probably
exposes a more general devel/py-curses problem.
This commit is contained in:
Leonardo Taccari 2020-01-20 15:29:28 +01:00
parent 765c04ff08
commit 87667c8739
7 changed files with 267 additions and 0 deletions

View File

@ -4926,6 +4926,7 @@ SUBDIR+= virtualjaguar-git
SUBDIR+= virus
SUBDIR+= vis
SUBDIR+= vis-editor
SUBDIR+= visidata
SUBDIR+= vista-fonts
SUBDIR+= vkeybd
SUBDIR+= vlevel

8
visidata/DESCR Normal file
View File

@ -0,0 +1,8 @@
A curses interface for exploring and arranging tabular data
usable via any remote shell which has Python3 installed.
A few interesting commands:
- Shift-F pushes a frequency analysis of the current column
- = creates a new column from the given Python expression (use column names to
refer to their contents)
- . creates new columns from the match groups of the given regex

29
visidata/Makefile Normal file
View File

@ -0,0 +1,29 @@
# $NetBSD$
DISTNAME= visidata-1.5.2
CATEGORIES= textproc
MASTER_SITES= ${MASTER_SITE_PYPI:=v/visidata/}
MAINTAINER= pkgsrc-users@NetBSD.org
HOMEPAGE= https://visidata.org/
COMMENT= curses interface for exploring and arranging tabular data
LICENSE= gnu-gpl-v3
DEPENDS+= ${PYPKGPREFIX}-curses-[0-9]*:../../devel/py-curses
DEPENDS+= ${PYPKGPREFIX}-dateutil-[0-9]*:../../time/py-dateutil
DEPENDS+= ${PYPKGPREFIX}-openpyxl-[0-9]*:../../textproc/py-openpyxl
SUBST_CLASSES+= setuppy
SUBST_STAGE.setuppy= pre-configure
SUBST_MESSAGE.setuppy= Adjusting hard-coded man path
SUBST_FILES.setuppy= setup.py
SUBST_SED.setuppy+= -e 's,share/man,${PKGMANDIR},g'
USE_LANGUAGES= # none
# Only for Python 3.x
PYTHON_VERSIONS_INCOMPATIBLE= 27
.include "../../lang/python/application.mk"
.include "../../lang/python/egg.mk"
.include "../../mk/bsd.pkg.mk"

193
visidata/PLIST Normal file
View File

@ -0,0 +1,193 @@
@comment $NetBSD$
bin/vd
${PYSITELIB}/${EGG_INFODIR}/PKG-INFO
${PYSITELIB}/${EGG_INFODIR}/SOURCES.txt
${PYSITELIB}/${EGG_INFODIR}/dependency_links.txt
${PYSITELIB}/${EGG_INFODIR}/requires.txt
${PYSITELIB}/${EGG_INFODIR}/top_level.txt
${PYSITELIB}/visidata/__init__.py
${PYSITELIB}/visidata/__init__.pyc
${PYSITELIB}/visidata/__init__.pyo
${PYSITELIB}/visidata/_profile.py
${PYSITELIB}/visidata/_profile.pyc
${PYSITELIB}/visidata/_profile.pyo
${PYSITELIB}/visidata/_types.py
${PYSITELIB}/visidata/_types.pyc
${PYSITELIB}/visidata/_types.pyo
${PYSITELIB}/visidata/aggregators.py
${PYSITELIB}/visidata/aggregators.pyc
${PYSITELIB}/visidata/aggregators.pyo
${PYSITELIB}/visidata/asyncthread.py
${PYSITELIB}/visidata/asyncthread.pyc
${PYSITELIB}/visidata/asyncthread.pyo
${PYSITELIB}/visidata/canvas.py
${PYSITELIB}/visidata/canvas.pyc
${PYSITELIB}/visidata/canvas.pyo
${PYSITELIB}/visidata/clipboard.py
${PYSITELIB}/visidata/clipboard.pyc
${PYSITELIB}/visidata/clipboard.pyo
${PYSITELIB}/visidata/cmdlog.py
${PYSITELIB}/visidata/cmdlog.pyc
${PYSITELIB}/visidata/cmdlog.pyo
${PYSITELIB}/visidata/colors.py
${PYSITELIB}/visidata/colors.pyc
${PYSITELIB}/visidata/colors.pyo
${PYSITELIB}/visidata/commands.tsv
${PYSITELIB}/visidata/data.py
${PYSITELIB}/visidata/data.pyc
${PYSITELIB}/visidata/data.pyo
${PYSITELIB}/visidata/describe.py
${PYSITELIB}/visidata/describe.pyc
${PYSITELIB}/visidata/describe.pyo
${PYSITELIB}/visidata/dev.py
${PYSITELIB}/visidata/dev.pyc
${PYSITELIB}/visidata/dev.pyo
${PYSITELIB}/visidata/diff.py
${PYSITELIB}/visidata/diff.pyc
${PYSITELIB}/visidata/diff.pyo
${PYSITELIB}/visidata/errors.py
${PYSITELIB}/visidata/errors.pyc
${PYSITELIB}/visidata/errors.pyo
${PYSITELIB}/visidata/freeze.py
${PYSITELIB}/visidata/freeze.pyc
${PYSITELIB}/visidata/freeze.pyo
${PYSITELIB}/visidata/freqtbl.py
${PYSITELIB}/visidata/freqtbl.pyc
${PYSITELIB}/visidata/freqtbl.pyo
${PYSITELIB}/visidata/graph.py
${PYSITELIB}/visidata/graph.pyc
${PYSITELIB}/visidata/graph.pyo
${PYSITELIB}/visidata/join.py
${PYSITELIB}/visidata/join.pyc
${PYSITELIB}/visidata/join.pyo
${PYSITELIB}/visidata/loaders/__init__.py
${PYSITELIB}/visidata/loaders/__init__.pyc
${PYSITELIB}/visidata/loaders/__init__.pyo
${PYSITELIB}/visidata/loaders/_pandas.py
${PYSITELIB}/visidata/loaders/_pandas.pyc
${PYSITELIB}/visidata/loaders/_pandas.pyo
${PYSITELIB}/visidata/loaders/csv.py
${PYSITELIB}/visidata/loaders/csv.pyc
${PYSITELIB}/visidata/loaders/csv.pyo
${PYSITELIB}/visidata/loaders/fixed_width.py
${PYSITELIB}/visidata/loaders/fixed_width.pyc
${PYSITELIB}/visidata/loaders/fixed_width.pyo
${PYSITELIB}/visidata/loaders/graphviz.py
${PYSITELIB}/visidata/loaders/graphviz.pyc
${PYSITELIB}/visidata/loaders/graphviz.pyo
${PYSITELIB}/visidata/loaders/hdf5.py
${PYSITELIB}/visidata/loaders/hdf5.pyc
${PYSITELIB}/visidata/loaders/hdf5.pyo
${PYSITELIB}/visidata/loaders/html.py
${PYSITELIB}/visidata/loaders/html.pyc
${PYSITELIB}/visidata/loaders/html.pyo
${PYSITELIB}/visidata/loaders/http.py
${PYSITELIB}/visidata/loaders/http.pyc
${PYSITELIB}/visidata/loaders/http.pyo
${PYSITELIB}/visidata/loaders/json.py
${PYSITELIB}/visidata/loaders/json.pyc
${PYSITELIB}/visidata/loaders/json.pyo
${PYSITELIB}/visidata/loaders/markdown.py
${PYSITELIB}/visidata/loaders/markdown.pyc
${PYSITELIB}/visidata/loaders/markdown.pyo
${PYSITELIB}/visidata/loaders/mbtiles.py
${PYSITELIB}/visidata/loaders/mbtiles.pyc
${PYSITELIB}/visidata/loaders/mbtiles.pyo
${PYSITELIB}/visidata/loaders/pcap.py
${PYSITELIB}/visidata/loaders/pcap.pyc
${PYSITELIB}/visidata/loaders/pcap.pyo
${PYSITELIB}/visidata/loaders/png.py
${PYSITELIB}/visidata/loaders/png.pyc
${PYSITELIB}/visidata/loaders/png.pyo
${PYSITELIB}/visidata/loaders/postgres.py
${PYSITELIB}/visidata/loaders/postgres.pyc
${PYSITELIB}/visidata/loaders/postgres.pyo
${PYSITELIB}/visidata/loaders/sas.py
${PYSITELIB}/visidata/loaders/sas.pyc
${PYSITELIB}/visidata/loaders/sas.pyo
${PYSITELIB}/visidata/loaders/shp.py
${PYSITELIB}/visidata/loaders/shp.pyc
${PYSITELIB}/visidata/loaders/shp.pyo
${PYSITELIB}/visidata/loaders/spss.py
${PYSITELIB}/visidata/loaders/spss.pyc
${PYSITELIB}/visidata/loaders/spss.pyo
${PYSITELIB}/visidata/loaders/sqlite.py
${PYSITELIB}/visidata/loaders/sqlite.pyc
${PYSITELIB}/visidata/loaders/sqlite.pyo
${PYSITELIB}/visidata/loaders/tsv.py
${PYSITELIB}/visidata/loaders/tsv.pyc
${PYSITELIB}/visidata/loaders/tsv.pyo
${PYSITELIB}/visidata/loaders/ttf.py
${PYSITELIB}/visidata/loaders/ttf.pyc
${PYSITELIB}/visidata/loaders/ttf.pyo
${PYSITELIB}/visidata/loaders/xlsx.py
${PYSITELIB}/visidata/loaders/xlsx.pyc
${PYSITELIB}/visidata/loaders/xlsx.pyo
${PYSITELIB}/visidata/loaders/xml.py
${PYSITELIB}/visidata/loaders/xml.pyc
${PYSITELIB}/visidata/loaders/xml.pyo
${PYSITELIB}/visidata/loaders/yaml.py
${PYSITELIB}/visidata/loaders/yaml.pyc
${PYSITELIB}/visidata/loaders/yaml.pyo
${PYSITELIB}/visidata/loaders/zip.py
${PYSITELIB}/visidata/loaders/zip.pyc
${PYSITELIB}/visidata/loaders/zip.pyo
${PYSITELIB}/visidata/man/vd.1
${PYSITELIB}/visidata/metasheets.py
${PYSITELIB}/visidata/metasheets.pyc
${PYSITELIB}/visidata/metasheets.pyo
${PYSITELIB}/visidata/motd.py
${PYSITELIB}/visidata/motd.pyc
${PYSITELIB}/visidata/motd.pyo
${PYSITELIB}/visidata/movement.py
${PYSITELIB}/visidata/movement.pyc
${PYSITELIB}/visidata/movement.pyo
${PYSITELIB}/visidata/namedlist.py
${PYSITELIB}/visidata/namedlist.pyc
${PYSITELIB}/visidata/namedlist.pyo
${PYSITELIB}/visidata/path.py
${PYSITELIB}/visidata/path.pyc
${PYSITELIB}/visidata/path.pyo
${PYSITELIB}/visidata/pivot.py
${PYSITELIB}/visidata/pivot.pyc
${PYSITELIB}/visidata/pivot.pyo
${PYSITELIB}/visidata/pyobj.py
${PYSITELIB}/visidata/pyobj.pyc
${PYSITELIB}/visidata/pyobj.pyo
${PYSITELIB}/visidata/regex.py
${PYSITELIB}/visidata/regex.pyc
${PYSITELIB}/visidata/regex.pyo
${PYSITELIB}/visidata/search.py
${PYSITELIB}/visidata/search.pyc
${PYSITELIB}/visidata/search.pyo
${PYSITELIB}/visidata/selection.py
${PYSITELIB}/visidata/selection.pyc
${PYSITELIB}/visidata/selection.pyo
${PYSITELIB}/visidata/shell.py
${PYSITELIB}/visidata/shell.pyc
${PYSITELIB}/visidata/shell.pyo
${PYSITELIB}/visidata/slide.py
${PYSITELIB}/visidata/slide.pyc
${PYSITELIB}/visidata/slide.pyo
${PYSITELIB}/visidata/tidydata.py
${PYSITELIB}/visidata/tidydata.pyc
${PYSITELIB}/visidata/tidydata.pyo
${PYSITELIB}/visidata/transpose.py
${PYSITELIB}/visidata/transpose.pyc
${PYSITELIB}/visidata/transpose.pyo
${PYSITELIB}/visidata/urlcache.py
${PYSITELIB}/visidata/urlcache.pyc
${PYSITELIB}/visidata/urlcache.pyo
${PYSITELIB}/visidata/utils.py
${PYSITELIB}/visidata/utils.pyc
${PYSITELIB}/visidata/utils.pyo
${PYSITELIB}/visidata/vdtui.py
${PYSITELIB}/visidata/vdtui.pyc
${PYSITELIB}/visidata/vdtui.pyo
${PYSITELIB}/visidata/vimkeys.py
${PYSITELIB}/visidata/vimkeys.pyc
${PYSITELIB}/visidata/vimkeys.pyo
${PYSITELIB}/visidata/zscroll.py
${PYSITELIB}/visidata/zscroll.pyc
${PYSITELIB}/visidata/zscroll.pyo
man/man1/vd.1

6
visidata/TODO Normal file
View File

@ -0,0 +1,6 @@
- Running `vd' ends up with a:
AttributeError: '_curses.window' object has no attribute 'get_wch'
It seems that curses(3) has a get_wch(3) but py-curses does not recognize it.
Investigate further (that's probably a general py-curses problem)!

7
visidata/distinfo Normal file
View File

@ -0,0 +1,7 @@
$NetBSD$
SHA1 (visidata-1.5.2.tar.gz) = 67ae888ef6f7a385bb5f8bf2bd446252ba9959e8
RMD160 (visidata-1.5.2.tar.gz) = fa08b1d1434f1624bbe0789cd5725c0bff20c407
SHA512 (visidata-1.5.2.tar.gz) = df236bb74909b3d0bbff012d20b01546ca9058038877a12e94fd2274d7b6465e68c0b652e37776e0b693916070c7185a773d54ead291c996bbb32625897bd4df
Size (visidata-1.5.2.tar.gz) = 123785 bytes
SHA1 (patch-visidata_vdtui.py) = 714357a9b384329b8527f0d98a469e04afa8303d

View File

@ -0,0 +1,23 @@
$NetBSD$
- Make curses(3) mouse support optional
--- visidata/vdtui.py.orig 2019-01-13 00:28:25.000000000 +0000
+++ visidata/vdtui.py
@@ -2817,9 +2817,13 @@ colors = ColorMaker()
def setupcolors(stdscr, f, *args):
curses.raw() # get control keys instead of signals
curses.meta(1) # allow "8-bit chars"
- curses.mousemask(-1) # even more than curses.ALL_MOUSE_EVENTS
- curses.mouseinterval(0) # very snappy but does not allow for [multi]click
- curses.mouseEvents = {}
+
+ try:
+ curses.mousemask(-1) # even more than curses.ALL_MOUSE_EVENTS
+ curses.mouseinterval(0) # very snappy but does not allow for [multi]click
+ curses.mouseEvents = {}
+ except:
+ pass
for k in dir(curses):
if k.startswith('BUTTON') or k == 'REPORT_MOUSE_POSITION':