summaryrefslogtreecommitdiff
path: root/awesome/lib/beautiful/xresources.lua
diff options
context:
space:
mode:
Diffstat (limited to 'awesome/lib/beautiful/xresources.lua')
-rw-r--r--awesome/lib/beautiful/xresources.lua117
1 files changed, 117 insertions, 0 deletions
diff --git a/awesome/lib/beautiful/xresources.lua b/awesome/lib/beautiful/xresources.lua
new file mode 100644
index 0000000..f0f5d78
--- /dev/null
+++ b/awesome/lib/beautiful/xresources.lua
@@ -0,0 +1,117 @@
+----------------------------------------------------------------------------
+--- Library for getting xrdb data.
+--
+-- @author Yauhen Kirylau <yawghen@gmail.com>
+-- @copyright 2015 Yauhen Kirylau
+-- @module beautiful.xresources
+----------------------------------------------------------------------------
+
+-- Grab environment
+local awesome = awesome
+local screen = screen
+local round = require("awful.util").round
+local gears_debug = require("gears.debug")
+
+local xresources = {}
+
+local fallback = {
+ --black
+ color0 = '#000000',
+ color8 = '#465457',
+ --red
+ color1 = '#cb1578',
+ color9 = '#dc5e86',
+ --green
+ color2 = '#8ecb15',
+ color10 = '#9edc60',
+ --yellow
+ color3 = '#cb9a15',
+ color11 = '#dcb65e',
+ --blue
+ color4 = '#6f15cb',
+ color12 = '#7e5edc',
+ --purple
+ color5 = '#cb15c9',
+ color13 = '#b75edc',
+ --cyan
+ color6 = '#15b4cb',
+ color14 = '#5edcb4',
+ --white
+ color7 = '#888a85',
+ color15 = '#ffffff',
+ --
+ background = '#0e0021',
+ foreground = '#bcbcbc',
+}
+
+--- Get current base colorscheme from xrdb.
+-- @treturn table Color table with keys 'background', 'foreground' and 'color0'..'color15'
+function xresources.get_current_theme()
+ local keys = { 'background', 'foreground' }
+ for i=0,15 do table.insert(keys, "color"..i) end
+ local colors = {}
+ for _, key in ipairs(keys) do
+ colors[key] = awesome.xrdb_get_value("", key)
+ if not colors[key] then
+ gears_debug.print_warning("beautiful: can't get colorscheme from xrdb (using fallback).")
+ return fallback
+ end
+ if colors[key]:find("rgb:") then
+ colors[key] = "#"..colors[key]:gsub("[a]?rgb:", ""):gsub("/", "")
+ end
+ end
+ return colors
+end
+
+
+local dpi_per_screen = {}
+
+local function get_screen(s)
+ return s and screen[s]
+end
+
+--- Get global or per-screen DPI value falling back to xrdb.
+-- @tparam[opt] integer|screen s The screen.
+-- @treturn number DPI value.
+function xresources.get_dpi(s)
+ s = get_screen(s)
+ if dpi_per_screen[s] then
+ return dpi_per_screen[s]
+ end
+ if not xresources.dpi then
+ -- Might not be present when run under unit tests
+ if awesome and awesome.xrdb_get_value then
+ xresources.dpi = tonumber(awesome.xrdb_get_value("", "Xft.dpi"))
+ end
+ if not xresources.dpi then
+ xresources.dpi = 96
+ end
+ end
+ return xresources.dpi
+end
+
+
+--- Set DPI for a given screen (defaults to global).
+-- @tparam number dpi DPI value.
+-- @tparam[opt] integer s Screen.
+function xresources.set_dpi(dpi, s)
+ s = get_screen(s)
+ if not s then
+ xresources.dpi = dpi
+ else
+ dpi_per_screen[s] = dpi
+ end
+end
+
+
+--- Compute resulting size applying current DPI value (optionally per screen).
+-- @tparam number size Size
+-- @tparam[opt] integer|screen s The screen.
+-- @treturn integer Resulting size (rounded to integer).
+function xresources.apply_dpi(size, s)
+ return round(size / 96 * xresources.get_dpi(s))
+end
+
+return xresources
+
+-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80