smem: allow column auto-sizing
This commit is contained in:
parent
29fc357a31
commit
272cb17cf9
2 changed files with 44 additions and 0 deletions
40
smem
40
smem
|
|
@ -471,6 +471,37 @@ def showfields(fields, f):
|
||||||
for l in sorted(fields.keys()):
|
for l in sorted(fields.keys()):
|
||||||
print "%-8s %s" % (l, fields[l][-1])
|
print "%-8s %s" % (l, fields[l][-1])
|
||||||
|
|
||||||
|
def autosize(columns, fields, rows):
|
||||||
|
colsizes = {}
|
||||||
|
for c in columns:
|
||||||
|
sizes = [1]
|
||||||
|
|
||||||
|
if not options.no_header:
|
||||||
|
sizes.append(len(fields[c][0]))
|
||||||
|
|
||||||
|
if (options.abbreviate or options.percent) and 'a' in fields[c][2]:
|
||||||
|
sizes.append(7)
|
||||||
|
else:
|
||||||
|
for r in rows:
|
||||||
|
sizes.append(len(str(fields[c][1](r))))
|
||||||
|
|
||||||
|
colsizes[c] = max(sizes)
|
||||||
|
|
||||||
|
overflowcols = set(["command", "map"]) & set(columns)
|
||||||
|
if len(overflowcols) > 0:
|
||||||
|
overflowcol = overflowcols.pop()
|
||||||
|
totnoflow = sum(colsizes.values()) - colsizes[overflowcol]
|
||||||
|
try:
|
||||||
|
ttyrows, ttycolumns = os.popen('stty size', 'r').read().split()
|
||||||
|
ttyrows, ttycolumns = int(ttyrows), int(ttycolumns)
|
||||||
|
except:
|
||||||
|
ttyrows, ttycolumns = (24, 80)
|
||||||
|
maxflowcol = ttycolumns - totnoflow - len(columns)
|
||||||
|
maxflowcol = max(maxflowcol, 10)
|
||||||
|
colsizes[overflowcol] = min(colsizes[overflowcol], maxflowcol)
|
||||||
|
|
||||||
|
return colsizes
|
||||||
|
|
||||||
def showtable(rows, fields, columns, sort):
|
def showtable(rows, fields, columns, sort):
|
||||||
header = ""
|
header = ""
|
||||||
format = ""
|
format = ""
|
||||||
|
|
@ -493,6 +524,11 @@ def showtable(rows, fields, columns, sort):
|
||||||
showfields(fields, missing)
|
showfields(fields, missing)
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
|
|
||||||
|
if options.autosize:
|
||||||
|
colsizes = autosize(columns, fields, rows)
|
||||||
|
else:
|
||||||
|
colsizes = {}
|
||||||
|
|
||||||
for n in columns:
|
for n in columns:
|
||||||
f = fields[n][2]
|
f = fields[n][2]
|
||||||
if 'a' in f:
|
if 'a' in f:
|
||||||
|
|
@ -503,6 +539,8 @@ def showtable(rows, fields, columns, sort):
|
||||||
f = f.replace('a', 's')
|
f = f.replace('a', 's')
|
||||||
else:
|
else:
|
||||||
formatter.append(lambda x: x)
|
formatter.append(lambda x: x)
|
||||||
|
if n in colsizes:
|
||||||
|
f = re.sub(r"[0-9]+", str(colsizes[n]), f)
|
||||||
format += f + " "
|
format += f + " "
|
||||||
header += f % fields[n][0] + " "
|
header += f % fields[n][0] + " "
|
||||||
|
|
||||||
|
|
@ -626,6 +664,8 @@ parser.add_option("-c", "--columns", type="str",
|
||||||
help="columns to show")
|
help="columns to show")
|
||||||
parser.add_option("-t", "--totals", action="store_true",
|
parser.add_option("-t", "--totals", action="store_true",
|
||||||
help="show totals")
|
help="show totals")
|
||||||
|
parser.add_option("-a", "--autosize", action="store_true",
|
||||||
|
help="size columns to fit terminal size")
|
||||||
|
|
||||||
parser.add_option("-R", "--realmem", type="str",
|
parser.add_option("-R", "--realmem", type="str",
|
||||||
help="amount of physical RAM")
|
help="amount of physical RAM")
|
||||||
|
|
|
||||||
4
smem.8
4
smem.8
|
|
@ -95,6 +95,10 @@ User filter regular expression.
|
||||||
|
|
||||||
.SS OUTPUT FORMATTING
|
.SS OUTPUT FORMATTING
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-a, \-\-autosize
|
||||||
|
Size columns to fit terminal size.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.BI "\-c " COLUMNS ", \-\-columns=" COLUMNS
|
.BI "\-c " COLUMNS ", \-\-columns=" COLUMNS
|
||||||
Columns to show.
|
Columns to show.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue