Compare commits
	
		
			4 Commits
		
	
	
		
			conky_prin
			...
			a20777be37
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a20777be37 | |||
| c5edf04976 | |||
| 7fb4d8a8b0 | |||
| e7063807dd | 
							
								
								
									
										38
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								README.md
									
									
									
									
									
								
							| @@ -4,34 +4,16 @@ root window (mostly I only see one window taking up the entire screen, with a | ||||
| dmenu at the top, and another dmenu at the bottom that runs conky).  I run conky | ||||
| in CLI mode only, and that's good enough for me. | ||||
|  | ||||
| I pipe the output of conky through dmenu, which upates every two seconds.  I | ||||
| also have custom formatting functions (see scripts.lua in this repository). | ||||
| This ensures the output of conky has the same length, even if certain fields | ||||
| within the string change.  This is especially useful for the network bandwidth | ||||
| output, which otherwise change length every two seconds as the bandwidth usage | ||||
| I pipe the output of conky through dmenu, which upates every second.  I also | ||||
| have custom formatting functions (see scripts.lua in this repository).  This | ||||
| ensures the output of conky has the same length, even if certain fields within | ||||
| the string change.  This is especially useful for the network bandwidth output, | ||||
| which otherwise change length every two seconds as the bandwidth usage | ||||
| fluctuates between bytes (B), Kilobytes (KiB), and Megabytes (MiB). | ||||
|  | ||||
| TODO:  My formatting function needs to be generalized.  Essentially, I'm | ||||
| creating a conky-specific printf function. Right now, it's split into two | ||||
| functions, with calls to the Lua string.format function.  One function takes | ||||
| only one format specifier, and the other takes two.   | ||||
| I have implemented `conky_printf`, a generalized function for printing conky | ||||
| data to the output string.  It needs more testing, as I'm sure there are edge | ||||
| cases where it doesn't work properly.   | ||||
|  | ||||
| The `fmt()` function takes the format string, and expects a single numerical | ||||
| second argument.  If the format string contains any format specifiers (see `man | ||||
| sprintf` for details) that aren't numbers (e.g. `%s` for strings), fmt() will | ||||
| fail with an error.  I use this for the percentages of RAM, Swap, and CPU in | ||||
| use. | ||||
|  | ||||
| The `fmt2()` function takes the format string, and expects two string arguments. | ||||
| It is not necessarily an error if either or both of the arguments are numbers, | ||||
| they will be cast to strings.  I use this function to format the bandwidth | ||||
| ("Net:") display in conky, so the length of this segment doesn't shift around | ||||
| (the Unicode arrow icons for up and down bandwidth stay in the same place).   | ||||
|  | ||||
| Ideally these two functions would be combined into a `"conky_printf` function, | ||||
| that could take an arbitrary format string with any number of format | ||||
| specifiers, with the requisite number of numerical or string arguments.  I know | ||||
| how to do this with the `...`/`arg`/`unpack(arg)` table specification in Lua, | ||||
| but numeric specifiers need to convert any strings passed to the function to | ||||
| numeric values instead of strings.  This is the challenging part, but should be | ||||
| doable. | ||||
| TODO:  Add color to the conky output!  That will take if statments, and text | ||||
| for dmenu to consume. | ||||
|   | ||||
							
								
								
									
										10
									
								
								conky.conf
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								conky.conf
									
									
									
									
									
								
							| @@ -32,18 +32,22 @@ conky.config = { | ||||
| 	no_buffers = true, | ||||
| 	update_interval = 1.0, | ||||
| 	uppercase = false, | ||||
| 	use_spacer = 'right', | ||||
| 	use_spacer = false, | ||||
|     pad_percents = 3, | ||||
|     short_units = false, | ||||
| }; | ||||
|  | ||||
| conky.text =  | ||||
| [[\ | ||||
| ${lua_parse printf %-20s ${nodename_short}} \ | ||||
| RAM:${lua_parse printf %3.0f%% ${memperc}} \ | ||||
| Swap:${lua_parse printf %3.0f%% ${swapperc}} \ | ||||
| CPU:${lua_parse printf %3.0f%% ${cpu cpu0}} \ | ||||
| / ${fs_used /}/${fs_size /} \ | ||||
| / ${lua_parse printf %10s/%10s ${fs_used /} ${fs_size /}} \ | ||||
| ${loadavg} \ | ||||
| ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1} \ | ||||
| ${lua_parse printf %-20s ${top name 1}} \ | ||||
| ${lua_parse printf %8d ${top pid 1}} \ | ||||
| ${lua_parse printf %3.2f ${top cpu 1}} \ | ||||
| ${lua_parse printf %3.2f ${top mem 1}} \ | ||||
| Net: ${lua_parse printf %10s▲%10s▼ ${upspeed wlp4s0} ${downspeed wlp4s0}} \ | ||||
| ]]; | ||||
|   | ||||
| @@ -19,7 +19,7 @@ function split_fmt(f) | ||||
|                 in_spec = false | ||||
|                 curr = "" | ||||
|             elseif string.match(char, '[qs]') then | ||||
|                 if string.match(curr, '^%%[0-9]*$') then | ||||
|                 if string.match(curr, '^%%%-?[0-9]*$') then | ||||
|                     curr = curr .. char | ||||
|                     table.insert(ret, curr) | ||||
|                     in_spec = false | ||||
| @@ -28,7 +28,7 @@ function split_fmt(f) | ||||
|                     io.stderr:write("Invalid format:  '" .. curr .. char .. "'\n") | ||||
|                     return nil | ||||
|                 end | ||||
|             elseif string.match(char, '[0-9%.]') then | ||||
|             elseif string.match(char, '[0-9%.%-]') then | ||||
|                 curr = curr .. char | ||||
|             elseif string.match(char, '%%') then | ||||
|                 if string.match(curr, '^%%') then | ||||
| @@ -105,7 +105,7 @@ function conky_printf(format, ...) | ||||
|     end | ||||
|     for i,fs in ipairs(formats) do | ||||
|         if is_fmt_spec(fs) then -- we have a format specifier | ||||
|             if string.match(fs, '[dEefgiouXx]$') then -- we have a numeric format specifier, convert value to number | ||||
|             if string.match(fs, '[cdEefgiouXx]$') then -- we have a numeric format specifier, convert value to number | ||||
|                 parsed_values[i] = tonumber(trim((parsed_values[i]))) | ||||
|             end | ||||
|         end | ||||
|   | ||||
		Reference in New Issue
	
	Block a user