-
Notifications
You must be signed in to change notification settings - Fork 4
/
vpager.py
43 lines (34 loc) · 1.13 KB
/
vpager.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import os
import shlex
import subprocess
from shutil import which
from visidata import BaseSheet, Column, SuspendCurses, vd
vd.option("vpager_cmd", "", "default external command for displaying cell contents")
@Column.api
def pageValue(col, row, cmd=None):
pager = cmd or vd.options.vpager_cmd or os.environ.get("PAGER", which("less"))
with SuspendCurses():
return subprocess.run(
shlex.split(pager), input=str(col.getValue(row)), encoding="utf8"
)
@Column.api
def pageValueWith(col, row):
pager = vd.input("external command: ", type="pager")
col.pageValue(row, pager)
BaseSheet.addCommand(
"",
"open-cell-pager",
"cursorCol.pageValue(cursorRow)",
"view a cell using the default pager",
)
BaseSheet.addCommand(
"",
"open-cell-with",
"cursorCol.pageValueWith(cursorRow)",
"view a cell using an external program",
)
try:
vd.addMenuItem("View", "Open cell with", "configured pager", "open-cell-pager")
vd.addMenuItem("View", "Open cell with", "custom pager...", "open-cell-with")
except AttributeError:
vd.debug("menu support not detected, skipping menu item setup")