smem: allow column auto-sizing

This commit is contained in:
Cybjit 2014-11-18 20:01:16 -06:00
commit e692903c47
2 changed files with 44 additions and 0 deletions

40
smem
View file

@ -471,6 +471,37 @@ def showfields(fields, f):
for l in sorted(fields.keys()):
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):
header = ""
format = ""
@ -493,6 +524,11 @@ def showtable(rows, fields, columns, sort):
showfields(fields, missing)
sys.exit(-1)
if options.autosize:
colsizes = autosize(columns, fields, rows)
else:
colsizes = {}
for n in columns:
f = fields[n][2]
if 'a' in f:
@ -503,6 +539,8 @@ def showtable(rows, fields, columns, sort):
f = f.replace('a', 's')
else:
formatter.append(lambda x: x)
if n in colsizes:
f = re.sub(r"[0-9]+", str(colsizes[n]), f)
format += f + " "
header += f % fields[n][0] + " "
@ -626,6 +664,8 @@ parser.add_option("-c", "--columns", type="str",
help="columns to show")
parser.add_option("-t", "--totals", action="store_true",
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",
help="amount of physical RAM")

4
smem.8
View file

@ -95,6 +95,10 @@ User filter regular expression.
.SS OUTPUT FORMATTING
.TP
.B \-a, \-\-autosize
Size columns to fit terminal size.
.TP
.BI "\-c " COLUMNS ", \-\-columns=" COLUMNS
Columns to show.