First commit
This commit is contained in:
parent
be68fea3d7
commit
a4fe44fe8e
232 changed files with 1276 additions and 2 deletions
145
rounding.lua
Normal file
145
rounding.lua
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
--[[ ##############################################################################################################################
|
||||
# This lua file was created by Matt Grotke (mgrotke@gmail.com) and is in the public domain.
|
||||
# ---------------------------------------------------------------------------------------------------------------------------------
|
||||
# The function below is intended to be called by a Conky config file in the following way:
|
||||
# ${lua MyRound <value to round> <decimal places> <rounding type> <unit to use> <option>}
|
||||
#
|
||||
# Note that the function name in this file is "conky_MyRound" but it is called from Conky using "MyRound". This is normal.
|
||||
#
|
||||
# All arguments are mandatory:
|
||||
# <value to round> Requires a numeric value, which may or may not contiain a trailing unit letter (it is expected that the Conky configuration variable "short_units" is set to "yes").
|
||||
# <decimal places> Requires an integer, such as 0 (for no decimal places), 1, 2, etc.
|
||||
# <rounding type> Requires one of the following (no quotes used): halfup, floor, ceil. Halfup is "standard" rounding where less than .5 goes down, and .5 and over goes up.
|
||||
# <unit to use> Requires one of the following (no quotes used): auto, B, K, M, G, T. They will convert the number to Bytes, Kilobytes, Megabytes, Gigabytes, or Terabytes.
|
||||
# <options> Requires one of the following (no quotes used): normal, hideUnit, addSpace.
|
||||
# Examples:
|
||||
# ${lua MyRound ${mem} 0 halfup auto normal} # Displays memory used, rounded to the nearest whole number, shown in whatever unit Conky determines is the most appropriate.
|
||||
# ${lua MyRound ${mem} 0 halfup M normal} # Displays memory used, rounded to the nearest whole number, shown in Megabytes.
|
||||
# ${lua MyRound ${mem} 0 ceil G hideUnit} # Displays memory used, rounded to the next whole number. The value WILL be in Megabytes, but a unit will not be displayed.
|
||||
# ${lua MyRound ${mem} 1 halfup G addSpace} # Displays memory used, rounded to the nearest 1 decimal place, shown in Gigabytes. There will be a space before the G.
|
||||
############################################################################################################################## ]]--
|
||||
do
|
||||
function conky_MyRound(arg, places, roundType, useUnit, modify)
|
||||
|
||||
-- Get args passed from Conky
|
||||
local sArg = conky_parse(arg)
|
||||
local sPlaces = conky_parse(places)
|
||||
local sRoundType = conky_parse(roundType)
|
||||
local sUseUnit = conky_parse(useUnit)
|
||||
local sModify = conky_parse(modify)
|
||||
|
||||
-- Convert args into types
|
||||
local nPlaces = tonumber(sPlaces)
|
||||
local nValue = tonumber(sArg)
|
||||
local sLastChar = ""
|
||||
if nValue == nil then
|
||||
-- It's not a number, because we assume it has a single char unit trailing
|
||||
sLastChar = string.sub(sArg, -1) --select the last char
|
||||
nValue = tonumber(string.sub(sArg, 0, string.len(sArg) - 1)) --select the first part of the string, except for the last char
|
||||
if nValue == nil then return "Error, not number" end -- Still not a number
|
||||
end
|
||||
|
||||
-- Convert unit
|
||||
local sUnitText = ""
|
||||
if sUseUnit == "auto" then
|
||||
sUnitText = sLastChar
|
||||
elseif sUseUnit == sLastChar then
|
||||
sUnitText = sLastChar
|
||||
else
|
||||
sUnitText = sUseUnit
|
||||
if sLastChar == "B" then
|
||||
if sUseUnit == "K" then
|
||||
nValue = nValue / 1000
|
||||
elseif sUseUnit == "M" then
|
||||
nValue = nValue / 1000000
|
||||
elseif sUseUnit == "G" then
|
||||
nValue = nValue / 1000000000
|
||||
elseif sUseUnit == "T" then
|
||||
nValue = nValue / 1000000000000
|
||||
else
|
||||
return "Error, invalid unit"
|
||||
end
|
||||
elseif sLastChar == "K" then
|
||||
if sUseUnit == "B" then
|
||||
nValue = nValue * 1000
|
||||
elseif sUseUnit == "M" then
|
||||
nValue = nValue / 1000
|
||||
elseif sUseUnit == "G" then
|
||||
nValue = nValue / 1000000
|
||||
elseif sUseUnit == "T" then
|
||||
nValue = nValue / 1000000000
|
||||
else
|
||||
return "Error, invalid unit"
|
||||
end
|
||||
elseif sLastChar == "M" then
|
||||
if sUseUnit == "B" then
|
||||
nValue = nValue * 1000000
|
||||
elseif sUseUnit == "K" then
|
||||
nValue = nValue * 1000
|
||||
elseif sUseUnit == "G" then
|
||||
nValue = nValue / 1000
|
||||
elseif sUseUnit == "T" then
|
||||
nValue = nValue / 1000000
|
||||
else
|
||||
return "Error, invalid unit"
|
||||
end
|
||||
elseif sLastChar == "G" then
|
||||
if sUseUnit == "B" then
|
||||
nValue = nValue * 1000000000
|
||||
elseif sUseUnit == "K" then
|
||||
nValue = nValue * 1000000
|
||||
elseif sUseUnit == "M" then
|
||||
nValue = nValue * 1000
|
||||
elseif sUseUnit == "T" then
|
||||
nValue = nValue / 1000
|
||||
else
|
||||
return "Error, invalid unit"
|
||||
end
|
||||
elseif sLastChar == "T" then
|
||||
if sUseUnit == "B" then
|
||||
nValue = nValue * 1000000000000
|
||||
elseif sUseUnit == "K" then
|
||||
nValue = nValue * 1000000000
|
||||
elseif sUseUnit == "M" then
|
||||
nValue = nValue * 1000000
|
||||
elseif sUseUnit == "G" then
|
||||
nValue = nValue * 1000
|
||||
else
|
||||
return "Error, invalid unit"
|
||||
end
|
||||
else
|
||||
return "Error, invalid unit"
|
||||
end
|
||||
end
|
||||
|
||||
-- Modify unit?
|
||||
if sModify == "normal" then
|
||||
--do nothing (keep unit text how it is)
|
||||
elseif sModify == "hideUnit" then
|
||||
sUnitText = ""
|
||||
elseif sModify == "addSpace" then
|
||||
sUnitText = string.format(" %s", sUnitText)
|
||||
else
|
||||
return "Error, invalid modify"
|
||||
end
|
||||
|
||||
-- Do the rounding
|
||||
local nRounded = 0
|
||||
if sRoundType == "halfup" then
|
||||
local nPower = math.pow(10, nPlaces or 0)
|
||||
nValue = nValue * nPower
|
||||
if nValue >= 0 then nValue = math.floor(nValue + 0.5) else nValue = math.ceil(nValue - 0.5) end
|
||||
nRounded = nValue / nPower
|
||||
elseif sRoundType == "ceil" then
|
||||
local nPower = math.pow(10, nPlaces or 0)
|
||||
nRounded = math.ceil(nValue * nPower) / nPower
|
||||
elseif sRoundType == "floor" then
|
||||
local nPower = math.pow(10, nPlaces or 0)
|
||||
nRounded = math.floor(nValue * nPower) / nPower
|
||||
else
|
||||
return "Error, invalid round type"
|
||||
end
|
||||
local sFormatter = string.format("%s%s%s", "%.", tostring(nPlaces), "f%s")
|
||||
return string.format(sFormatter, nRounded, sUnitText)
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue