{"action":"created","comment":{"url":"https://api.github.com/repos/awesomeWM/awesome/pulls/comments/80636350","pull_request_review_id":1680296,"id":80636350,"diff_hunk":"@@ -0,0 +1,508 @@\n+---------------------------------------------------------------------------\n+-- An interactive mouse based slider widget.\n+--\n+--@DOC_wibox_widget_defaults_slider_EXAMPLE@\n+--\n+-- @author Grigory Mishchenko &lt;grishkokot@gmail.com&gt;\n+-- @author Emmanuel Lepage Vallee &lt;elv1313@gmail.com&gt;\n+-- @copyright 2015 Grigory Mishchenko, 2016 Emmanuel Lepage Vallee\n+-- @release @AWESOME_VERSION@\n+-- @classmod wibox.widget.slider\n+---------------------------------------------------------------------------\n+\n+local setmetatable = setmetatable\n+local type = type\n+local color = require(\"gears.color\")\n+local util = require(\"awful.util\")\n+local beautiful = require(\"beautiful\")\n+local base = require(\"wibox.widget.base\")\n+local shape = require(\"gears.shape\")\n+local gmatrix = require(\"gears.matrix\")\n+local capi = {\n+    mouse        = mouse,\n+    mousegrabber = mousegrabber,\n+    root         = root,\n+}\n+\n+local slider = {mt={}}\n+\n+--- The slider handle shape.\n+--\n+--@DOC_wibox_widget_slider_handle_shape_EXAMPLE@\n+--\n+-- @property handle_shape\n+-- @tparam[opt=gears shape rectangle] gears.shape shape\n+-- @see gears.shape\n+\n+--- The slider handle color.\n+--\n+--@DOC_wibox_widget_slider_handle_color_EXAMPLE@\n+--\n+-- @property handle_color\n+-- @param color\n+\n+--- The slider handle margins.\n+--\n+--@DOC_wibox_widget_slider_handle_margins_EXAMPLE@\n+--\n+-- @property handle_margins\n+-- @tparam[opt={}] table margins\n+-- @tparam[opt=0] number margins.left\n+-- @tparam[opt=0] number margins.right\n+-- @tparam[opt=0] number margins.top\n+-- @tparam[opt=0] number margins.bottom\n+\n+--- The slider handle width.\n+--\n+--@DOC_wibox_widget_slider_handle_width_EXAMPLE@\n+--\n+-- @property handle_width\n+-- @param number\n+\n+--- The handle border_color.\n+--\n+--@DOC_wibox_widget_slider_handle_border_EXAMPLE@\n+--\n+-- @property handle_border_color\n+-- @param color\n+\n+--- The handle border width.\n+-- @property handle_border_width\n+-- @param[opt=0]  number\n+\n+--- The bar (background) shape.\n+--\n+--@DOC_wibox_widget_slider_bar_shape_EXAMPLE@\n+--\n+-- @property bar_shape\n+-- @tparam[opt=gears shape rectangle] gears.shape shape\n+-- @see gears.shape\n+\n+--- The bar (background) height.\n+--\n+--@DOC_wibox_widget_slider_bar_height_EXAMPLE@\n+--\n+-- @property bar_height\n+-- @param number\n+\n+--- The bar (background) color.\n+--\n+--@DOC_wibox_widget_slider_bar_color_EXAMPLE@\n+--\n+-- @property bar_color\n+-- @param color\n+\n+--- The bar (background) margins.\n+--\n+--@DOC_wibox_widget_slider_bar_margins_EXAMPLE@\n+--\n+-- @property bar_margins\n+-- @tparam[opt={}] table margins\n+-- @tparam[opt=0] number margins.left\n+-- @tparam[opt=0] number margins.right\n+-- @tparam[opt=0] number margins.top\n+-- @tparam[opt=0] number margins.bottom\n+\n+--- The bar (background) border width.\n+-- @property bar_border_width\n+-- @param[opt=0] numbergb\n+\n+--- The bar (background) border_color.\n+--\n+--@DOC_wibox_widget_slider_bar_border_EXAMPLE@\n+--\n+-- @property bar_border_color\n+-- @param color\n+\n+--- The slider value.\n+--\n+--@DOC_wibox_widget_slider_value_EXAMPLE@\n+--\n+-- @property value\n+-- @param[opt=0] number\n+\n+--- The slider minimum value.\n+-- @property minimum\n+-- @param[opt=0] number\n+\n+--- The slider maximum value.\n+-- @property maximum\n+-- @param[opt=100] number\n+\n+--- The bar (background) border width.\n+-- @beautiful beautiful.slider_bar_border_width\n+-- @param number\n+\n+--- The bar (background) border color.\n+-- @beautiful beautiful.slider_bar_border_color\n+-- @param color\n+\n+--- The handle border_color.\n+-- @beautiful beautiful.slider_handle_border_color\n+-- @param color\n+\n+--- The handle border width.\n+-- @beautiful beautiful.slider_handle_border_width\n+-- @param number\n+\n+--- The handle .\n+-- @beautiful beautiful.slider_handle_width\n+-- @param number\n+\n+-- @beautiful beautiful.slider_handle_color\n+-- @param color\n+\n+--- The handle shape.\n+-- @beautiful beautiful.slider_handle_shape\n+-- @tparam[opt=gears shape rectangle] gears.shape shape\n+-- @see gears.shape\n+\n+--- The bar (background) shape.\n+-- @beautiful beautiful.slider_bar_shape\n+-- @tparam[opt=gears shape rectangle] gears.shape shape\n+-- @see gears.shape\n+\n+--- The bar (background) height.\n+-- @beautiful beautiful.slider_bar_height\n+-- @param number\n+\n+--- The bar (background) margins.\n+-- @beautiful beautiful.slider_bar_margins\n+-- @tparam[opt={}] table margins\n+-- @tparam[opt=0] number margins.left\n+-- @tparam[opt=0] number margins.right\n+-- @tparam[opt=0] number margins.top\n+-- @tparam[opt=0] number margins.bottom\n+\n+--- The slider handle margins.\n+-- @beautiful beautiful.slider_handle_margins\n+-- @tparam[opt={}] table margins\n+-- @tparam[opt=0] number margins.left\n+-- @tparam[opt=0] number margins.right\n+-- @tparam[opt=0] number margins.top\n+-- @tparam[opt=0] number margins.bottom\n+\n+--- The bar (background) color.\n+-- @beautiful beautiful.slider_bar_color\n+-- @param color\n+\n+local properties = {\n+    -- Handle\n+    handle_shape         = shape.rectangle,\n+    handle_color         = false,\n+    handle_margins       = {},\n+    handle_width         = false,\n+    handle_border_width  = 0,\n+    handle_border_color  = false,\n+\n+    -- Bar\n+    bar_shape            = shape.rectangle,\n+    bar_height           = false,\n+    bar_color            = false,\n+    bar_margins          = {},\n+    bar_border_width     = 0,\n+    bar_border_color     = false,\n+\n+    -- Content\n+    value                = 0,\n+    minimum              = 0,\n+    maximum              = 100,\n+}\n+\n+-- Create the accessors\n+for prop in pairs(properties) do\n+    slider[\"set_\"..prop] = function(self, value)\n+        local changed = self._private[prop] ~= value\n+        self._private[prop] = value\n+\n+        if changed then\n+            self:emit_signal(\"property::\"..prop)\n+            self:emit_signal(\"widget::redraw_needed\")\n+        end\n+    end\n+\n+    slider[\"get_\"..prop] = function(self)\n+        -- Ignoring the false's is on purpose\n+        return self._private[prop] == nil\n+            and properties[prop]\n+            or self._private[prop]\n+    end\n+end\n+\n+-- Add some validation to set_value\n+function slider:set_value(value)\n+    value = math.min(value, self:get_maximum())\n+    value = math.max(value, self:get_minimum())\n+    local changed = self._private.value ~= value\n+\n+    self._private.value = value\n+\n+    if changed then\n+        self:emit_signal( \"property::value\"       )\n+        self:emit_signal( \"widget::redraw_needed\" )\n+    end\n+end\n+\n+local function get_extremums(self)\n+    local min = self._private.minimum or properties.minimum\n+    local max = self._private.maximum or properties.maximum\n+    local interval = max - min\n+\n+    return min, max, interval\n+end\n+\n+local function get_value(self, width, x)\n+    local _, _, interval = get_extremums(self)\n+\n+    return math.floor((x*interval)/width)\n+end\n+\n+function slider:draw(_, cr, width, height)\n+    local bar_height = self._private.bar_height\n+\n+    -- If there is no background, then skip this\n+    local bar_color = self._private.bar_color\n+        or beautiful.slider_bar_color\n+\n+    if bar_color then\n+        cr:set_source(color(bar_color))\n+    end\n+\n+    local margins = self._private.bar_margins\n+        or beautiful.slider_bar_margins\n+\n+    local x_offset, right_margin, y_offset = 0, 0\n+\n+    if margins then\n+        if type(margins) == \"number\" then\n+            bar_height = bar_height or (height - 2*margins)\n+            x_offset, y_offset = margins, margins\n+            right_margin = margins\n+        else\n+            bar_height = bar_height or (\n+                height - (margins.top or 0) - (margins.bottom or 0)\n+            )\n+            x_offset, y_offset = margins.left or 0, margins.top or 0\n+            right_margin = margins.right or 0\n+        end\n+    else\n+        bar_height = bar_height or beautiful.slider_bar_height or height\n+        y_offset   = (height - bar_height)/2\n+    end\n+\n+\n+    cr:translate(x_offset, y_offset)\n+\n+    local bar_shape = self._private.bar_shape\n+        or beautiful.slider_bar_shape\n+        or properties.bar_shape\n+\n+    local bar_border_width = self._private.bar_border_width\n+        or beautiful.slider_bar_border_width\n+        or properties.bar_border_width\n+\n+    bar_shape(cr, width - x_offset - right_margin, bar_height or height)\n+\n+    if bar_color then\n+        if bar_border_width == 0 then\n+            cr:fill()\n+        else\n+            cr:fill_preserve()\n+        end\n+    end\n+\n+    -- Draw the bar border\n+    if bar_border_width > 0 then\n+        local bar_border_color = self._private.bar_border_color\n+            or beautiful.slider_bar_border_color\n+            or properties.bar_border_color\n+\n+        cr:set_line_width(bar_border_width)\n+\n+        if bar_border_color then\n+            cr:save()\n+            cr:set_source(color(bar_border_color))\n+            cr:stroke()\n+            cr:restore()\n+        else\n+            cr:stroke()\n+        end\n+    end\n+\n+    cr:translate(-x_offset, -y_offset)\n+\n+    -- Paint the handle\n+    local handle_color = self._private.handle_color\n+        or beautiful.slider_handle_color\n+\n+    -- It is ok if there is no color, it will be inherited\n+    if handle_color then\n+        cr:set_source(color(handle_color))\n+    end\n+\n+    local handle_height, handle_width = height, self._private.handle_width\n+        or beautiful.slider_handle_width\n+        or height/2\n+\n+    local handle_shape = self._private.handle_shape\n+        or beautiful.slider_handle_shape\n+        or properties.handle_shape\n+\n+    -- Lets get the margins for the handle\n+    margins = self._private.handle_margins\n+        or beautiful.slider_handle_margins\n+\n+    x_offset, y_offset = 0, 0\n+\n+    if margins then\n+        if type(margins) == \"number\" then\n+            x_offset, y_offset = margins, margins\n+            handle_width  = handle_width  - 2*margins\n+            handle_height = handle_height - 2*margins\n+        else\n+            x_offset, y_offset = margins.left or 0, margins.top or 0\n+            handle_width  = handle_width  -\n+                (margins.left or 0) - (margins.right  or 0)\n+            handle_height = handle_height -\n+                (margins.top  or 0) - (margins.bottom or 0)\n+        end\n+    end\n+\n+    local value = self._private.value or self._private.min or 0\n+\n+    -- Get the widget size back to it's non-transfored value\n+    --local matrix = gmatrix.from_cairo_matrix(cr:get_matrix())\n+    local min, _, interval = get_extremums(self)\n+    local rel_value = ((value-min)/interval) * (width-handle_width)\n+\n+    cr:translate(x_offset + rel_value, y_offset)\n+\n+    local handle_border_width = self._private.handle_border_width\n+        or beautiful.slider_handle_border_width\n+        or properties.handle_border_width or 0\n+\n+    handle_shape(cr, handle_width, handle_height)\n+\n+    if handle_border_width > 0 then\n+        cr:fill_preserve()\n+    else\n+        cr:fill()\n+    end\n+\n+    -- Draw the handle border\n+    if handle_border_width > 0 then\n+        local handle_border_color = self._private.handle_border_color\n+            or beautiful.slider_handle_border_color\n+            or properties.handle_border_color\n+\n+        if handle_border_color then\n+            cr:set_source(color(handle_border_color))\n+        end\n+\n+        cr:set_line_width(handle_border_width)\n+        cr:stroke()\n+    end\n+end\n+\n+function slider:fit(_, width, height)\n+    -- Use all the space, this should be used with a constraint widget\n+    return width, height\n+end\n+\n+local event = {}\n+\n+local rect_order = {\"x\", \"y\", \"width\", \"height\"}\n+\n+-- Move the handle to the correct location\n+local function move_handle(self, x, y, geo)\n+    -- Fix the X position when used in a rotate or mirror widget\n+\n+    -- Remove the translation to bring {x, y} and the rect on the same origin\n+    local rem_translate = geo.matrix_to_device*gmatrix.identity\n+    rem_translate.x0, rem_translate.y0 = 0, 0\n+\n+    local rect = {rem_translate:transform_rectangle(\n+        0,\n+        0,\n+        geo.width,\n+        geo.height\n+    )}\n+\n+    -- Floating point precision is here both too much and not enough\n+    for k, v in ipairs(rect) do\n+        rect[rect_order[k]] = util.round(v)\n+    end\n+\n+    local px = rem_translate:transform_point(x, y)\n+\n+    -- If the transformation moved the rectangle away from {0,0}, compensate\n+    if rect.x < 0 then\n+        px = rect.width + px\n+    end\n+\n+    self:set_value(get_value(self, rect.width, px))\n+    self:emit_signal(\"widget::redraw_needed\")\n+end\n+\n+function event.mouse_press(self, x, y, button_id, _, geo)\n+    if button_id ~= 1 then return end\n+\n+    move_handle(self, x, y, geo)\n+\n+    -- Get the \"real\" position of the widget\n+    local wgeo = geo.drawable.drawable:geometry()\n+    local wx = wgeo.x + geo.x\n+    local wy = wgeo.y + geo.y\n+\n+    capi.mousegrabber.run(function(mouse)\n+        if not mouse.buttons[1] then\n+            self:emit_signal(\"widget::redraw_needed\")\n+            return false\n+        end\n+\n+        -- Get the closest point to the widget\n+        local abs_x, abs_y = mouse.x, mouse.y\n+        abs_x = abs_x > (wx+geo.width) and wx+geo.width or (\n+            abs_x < wx and wx\n+        ) or abs_x\n+        abs_y = abs_y > (wy+geo.height) and wy+geo.height or (\n+            abs_y < wy and wy\n+        ) or abs_y\n+\n+        -- Get the relative point\n+        local rx, ry = abs_x - wx, abs_y - wy\n+        move_handle(self, rx, ry, geo)","path":"lib/wibox/widget/slider.lua","position":474,"original_position":474,"commit_id":"d117b2ddfe7a5f3c3bb48357c5841c987bc3b2ee","original_commit_id":"a3ccdd0954f3c9d8a6dcc840c892ef4fb08c149f","user":{"login":"psychon","id":89482,"avatar_url":"https://avatars.githubusercontent.com/u/89482?v=3","gravatar_id":"","url":"https://api.github.com/users/psychon","html_url":"https://github.com/psychon","followers_url":"https://api.github.com/users/psychon/followers","following_url":"https://api.github.com/users/psychon/following{/other_user}","gists_url":"https://api.github.com/users/psychon/gists{/gist_id}","starred_url":"https://api.github.com/users/psychon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/psychon/subscriptions","organizations_url":"https://api.github.com/users/psychon/orgs","repos_url":"https://api.github.com/users/psychon/repos","events_url":"https://api.github.com/users/psychon/events{/privacy}","received_events_url":"https://api.github.com/users/psychon/received_events","type":"User","site_admin":false},"body":"Ok, I might need a while to figure out the needed magic O.o","created_at":"2016-09-27T07:46:52Z","updated_at":"2016-09-27T07:46:52Z","html_url":"https://github.com/awesomeWM/awesome/pull/1121#discussion_r80636350","pull_request_url":"https://api.github.com/repos/awesomeWM/awesome/pulls/1121","_links":{"self":{"href":"https://api.github.com/repos/awesomeWM/awesome/pulls/comments/80636350"},"html":{"href":"https://github.com/awesomeWM/awesome/pull/1121#discussion_r80636350"},"pull_request":{"href":"https://api.github.com/repos/awesomeWM/awesome/pulls/1121"}}},"pull_request":{"url":"https://api.github.com/repos/awesomeWM/awesome/pulls/1121","id":86864177,"html_url":"https://github.com/awesomeWM/awesome/pull/1121","diff_url":"https://github.com/awesomeWM/awesome/pull/1121.diff","patch_url":"https://github.com/awesomeWM/awesome/pull/1121.patch","issue_url":"https://api.github.com/repos/awesomeWM/awesome/issues/1121","number":1121,"state":"open","locked":false,"title":"Add a slider widget","user":{"login":"Elv13","id":340384,"avatar_url":"https://avatars.githubusercontent.com/u/340384?v=3","gravatar_id":"","url":"https://api.github.com/users/Elv13","html_url":"https://github.com/Elv13","followers_url":"https://api.github.com/users/Elv13/followers","following_url":"https://api.github.com/users/Elv13/following{/other_user}","gists_url":"https://api.github.com/users/Elv13/gists{/gist_id}","starred_url":"https://api.github.com/users/Elv13/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Elv13/subscriptions","organizations_url":"https://api.github.com/users/Elv13/orgs","repos_url":"https://api.github.com/users/Elv13/repos","events_url":"https://api.github.com/users/Elv13/events{/privacy}","received_events_url":"https://api.github.com/users/Elv13/received_events","type":"User","site_admin":false},"body":"Thanks to @psychon for fixing the matrix issue. I removed the --FIXME and --HACK part from the commit first proposed in #1044. It look cleaner now and there is no \"WTF pseudo math until it works\" code ;).\r\n\r\nTo test:\r\n\r\n```lua\r\nlocal w2 = wibox {\r\n    visible = true,\r\n    width = 150,\r\n    height = 30,\r\n    x= 200,\r\n    y=125,\r\n    ontop = true,\r\n    bg = color(\"#0000ff\")\r\n}\r\nw2:setup{\r\n    {\r\n        {\r\n            widget = wibox.widget.slider,\r\n        },\r\n        direction = \"south\",\r\n        widget =  wibox.container.rotate\r\n    },\r\n    reflection = {\r\n        vertical = false\r\n    },\r\n    widget = wibox.container.mirror\r\n}\r\n\r\nlocal w = wibox {\r\n    visible = true,\r\n    width = 30,\r\n    height = 150,\r\n    x= 100,\r\n    y=125,\r\n    ontop = true,\r\n    bg = color(\"#0000ff\")\r\n}\r\nw:setup{\r\n    {\r\n        {\r\n            widget = wibox.widget.slider,\r\n        },\r\n        direction = \"east\",\r\n        widget =  wibox.container.rotate\r\n    },\r\n    reflection = {\r\n        horizontal = false,\r\n        vertical   = true\r\n    },\r\n    widget = wibox.container.mirror\r\n}\r\n\r\nlocal w3 = wibox {\r\n    visible = true,\r\n    width = 30,\r\n    height = 150,\r\n    x= 100,\r\n    y=325,\r\n    ontop = true,\r\n    bg = color(\"#0000ff\")\r\n}\r\nw3:setup{\r\n    {\r\n        {\r\n            widget = wibox.widget.slider,\r\n        },\r\n        direction = \"west\",\r\n        widget =  wibox.container.rotate\r\n    },\r\n    reflection = {\r\n        horizontal = false,\r\n        vertical   = true\r\n    },\r\n    widget = wibox.container.mirror\r\n}\r\n\r\nlocal w4 = wibox {\r\n    visible = true,\r\n    width = 30,\r\n    height = 150,\r\n    x= 400,\r\n    y=325,\r\n    ontop = true,\r\n    bg = color(\"#0000ff\")\r\n}\r\nw4:setup{\r\n    {\r\n        {\r\n            widget = wibox.widget.slider,\r\n        },\r\n        direction = \"east\",\r\n        widget =  wibox.container.rotate\r\n    },\r\n    reflection = {\r\n        horizontal = true\r\n    },\r\n    widget = wibox.container.mirror\r\n}\r\n\r\n\r\nlocal w5 = wibox {\r\n    visible = true,\r\n    width = 150,\r\n    height = 30,\r\n    x= 370,\r\n    y=125,\r\n    ontop = true,\r\n    bg = color(\"#0000ff\")\r\n}\r\nw5:setup{\r\n    widget = wibox.widget.slider,\r\n}\r\n\r\n```","created_at":"2016-09-27T05:27:13Z","updated_at":"2016-09-27T07:46:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7983ed26ee63d24b8691b78f5b66ab668c1b86ed","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/awesomeWM/awesome/pulls/1121/commits","review_comments_url":"https://api.github.com/repos/awesomeWM/awesome/pulls/1121/comments","review_comment_url":"https://api.github.com/repos/awesomeWM/awesome/pulls/comments{/number}","comments_url":"https://api.github.com/repos/awesomeWM/awesome/issues/1121/comments","statuses_url":"https://api.github.com/repos/awesomeWM/awesome/statuses/d117b2ddfe7a5f3c3bb48357c5841c987bc3b2ee","head":{"label":"Elv13:add_slider_widget","ref":"add_slider_widget","sha":"d117b2ddfe7a5f3c3bb48357c5841c987bc3b2ee","user":{"login":"Elv13","id":340384,"avatar_url":"https://avatars.githubusercontent.com/u/340384?v=3","gravatar_id":"","url":"https://api.github.com/users/Elv13","html_url":"https://github.com/Elv13","followers_url":"https://api.github.com/users/Elv13/followers","following_url":"https://api.github.com/users/Elv13/following{/other_user}","gists_url":"https://api.github.com/users/Elv13/gists{/gist_id}","starred_url":"https://api.github.com/users/Elv13/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Elv13/subscriptions","organizations_url":"https://api.github.com/users/Elv13/orgs","repos_url":"https://api.github.com/users/Elv13/repos","events_url":"https://api.github.com/users/Elv13/events{/privacy}","received_events_url":"https://api.github.com/users/Elv13/received_events","type":"User","site_admin":false},"repo":{"id":17379398,"name":"awesome-1","full_name":"Elv13/awesome-1","owner":{"login":"Elv13","id":340384,"avatar_url":"https://avatars.githubusercontent.com/u/340384?v=3","gravatar_id":"","url":"https://api.github.com/users/Elv13","html_url":"https://github.com/Elv13","followers_url":"https://api.github.com/users/Elv13/followers","following_url":"https://api.github.com/users/Elv13/following{/other_user}","gists_url":"https://api.github.com/users/Elv13/gists{/gist_id}","starred_url":"https://api.github.com/users/Elv13/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Elv13/subscriptions","organizations_url":"https://api.github.com/users/Elv13/orgs","repos_url":"https://api.github.com/users/Elv13/repos","events_url":"https://api.github.com/users/Elv13/events{/privacy}","received_events_url":"https://api.github.com/users/Elv13/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Elv13/awesome-1","description":"Semi-official mirror of the awesome window manager from git://git.naquadah.org/awesome.git, updated hourly.","fork":true,"url":"https://api.github.com/repos/Elv13/awesome-1","forks_url":"https://api.github.com/repos/Elv13/awesome-1/forks","keys_url":"https://api.github.com/repos/Elv13/awesome-1/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Elv13/awesome-1/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Elv13/awesome-1/teams","hooks_url":"https://api.github.com/repos/Elv13/awesome-1/hooks","issue_events_url":"https://api.github.com/repos/Elv13/awesome-1/issues/events{/number}","events_url":"https://api.github.com/repos/Elv13/awesome-1/events","assignees_url":"https://api.github.com/repos/Elv13/awesome-1/assignees{/user}","branches_url":"https://api.github.com/repos/Elv13/awesome-1/branches{/branch}","tags_url":"https://api.github.com/repos/Elv13/awesome-1/tags","blobs_url":"https://api.github.com/repos/Elv13/awesome-1/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Elv13/awesome-1/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Elv13/awesome-1/git/refs{/sha}","trees_url":"https://api.github.com/repos/Elv13/awesome-1/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Elv13/awesome-1/statuses/{sha}","languages_url":"https://api.github.com/repos/Elv13/awesome-1/languages","stargazers_url":"https://api.github.com/repos/Elv13/awesome-1/stargazers","contributors_url":"https://api.github.com/repos/Elv13/awesome-1/contributors","subscribers_url":"https://api.github.com/repos/Elv13/awesome-1/subscribers","subscription_url":"https://api.github.com/repos/Elv13/awesome-1/subscription","commits_url":"https://api.github.com/repos/Elv13/awesome-1/commits{/sha}","git_commits_url":"https://api.github.com/repos/Elv13/awesome-1/git/commits{/sha}","comments_url":"https://api.github.com/repos/Elv13/awesome-1/comments{/number}","issue_comment_url":"https://api.github.com/repos/Elv13/awesome-1/issues/comments{/number}","contents_url":"https://api.github.com/repos/Elv13/awesome-1/contents/{+path}","compare_url":"https://api.github.com/repos/Elv13/awesome-1/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Elv13/awesome-1/merges","archive_url":"https://api.github.com/repos/Elv13/awesome-1/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Elv13/awesome-1/downloads","issues_url":"https://api.github.com/repos/Elv13/awesome-1/issues{/number}","pulls_url":"https://api.github.com/repos/Elv13/awesome-1/pulls{/number}","milestones_url":"https://api.github.com/repos/Elv13/awesome-1/milestones{/number}","notifications_url":"https://api.github.com/repos/Elv13/awesome-1/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Elv13/awesome-1/labels{/name}","releases_url":"https://api.github.com/repos/Elv13/awesome-1/releases{/id}","deployments_url":"https://api.github.com/repos/Elv13/awesome-1/deployments","created_at":"2014-03-03T20:41:58Z","updated_at":"2014-11-01T22:48:43Z","pushed_at":"2016-09-27T05:25:02Z","git_url":"git://github.com/Elv13/awesome-1.git","ssh_url":"git@github.com:Elv13/awesome-1.git","clone_url":"https://github.com/Elv13/awesome-1.git","svn_url":"https://github.com/Elv13/awesome-1","homepage":"https://awesome.naquadah.org/","size":12198,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":9,"forks":0,"open_issues":9,"watchers":0,"default_branch":"master"}},"base":{"label":"awesomeWM:master","ref":"master","sha":"7f74c783cd174edb241fcfa2a695cdc78927982d","user":{"login":"awesomeWM","id":6843364,"avatar_url":"https://avatars.githubusercontent.com/u/6843364?v=3","gravatar_id":"","url":"https://api.github.com/users/awesomeWM","html_url":"https://github.com/awesomeWM","followers_url":"https://api.github.com/users/awesomeWM/followers","following_url":"https://api.github.com/users/awesomeWM/following{/other_user}","gists_url":"https://api.github.com/users/awesomeWM/gists{/gist_id}","starred_url":"https://api.github.com/users/awesomeWM/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/awesomeWM/subscriptions","organizations_url":"https://api.github.com/users/awesomeWM/orgs","repos_url":"https://api.github.com/users/awesomeWM/repos","events_url":"https://api.github.com/users/awesomeWM/events{/privacy}","received_events_url":"https://api.github.com/users/awesomeWM/received_events","type":"Organization","site_admin":false},"repo":{"id":17378009,"name":"awesome","full_name":"awesomeWM/awesome","owner":{"login":"awesomeWM","id":6843364,"avatar_url":"https://avatars.githubusercontent.com/u/6843364?v=3","gravatar_id":"","url":"https://api.github.com/users/awesomeWM","html_url":"https://github.com/awesomeWM","followers_url":"https://api.github.com/users/awesomeWM/followers","following_url":"https://api.github.com/users/awesomeWM/following{/other_user}","gists_url":"https://api.github.com/users/awesomeWM/gists{/gist_id}","starred_url":"https://api.github.com/users/awesomeWM/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/awesomeWM/subscriptions","organizations_url":"https://api.github.com/users/awesomeWM/orgs","repos_url":"https://api.github.com/users/awesomeWM/repos","events_url":"https://api.github.com/users/awesomeWM/events{/privacy}","received_events_url":"https://api.github.com/users/awesomeWM/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/awesomeWM/awesome","description":"awesome window manager","fork":false,"url":"https://api.github.com/repos/awesomeWM/awesome","forks_url":"https://api.github.com/repos/awesomeWM/awesome/forks","keys_url":"https://api.github.com/repos/awesomeWM/awesome/keys{/key_id}","collaborators_url":"https://api.github.com/repos/awesomeWM/awesome/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/awesomeWM/awesome/teams","hooks_url":"https://api.github.com/repos/awesomeWM/awesome/hooks","issue_events_url":"https://api.github.com/repos/awesomeWM/awesome/issues/events{/number}","events_url":"https://api.github.com/repos/awesomeWM/awesome/events","assignees_url":"https://api.github.com/repos/awesomeWM/awesome/assignees{/user}","branches_url":"https://api.github.com/repos/awesomeWM/awesome/branches{/branch}","tags_url":"https://api.github.com/repos/awesomeWM/awesome/tags","blobs_url":"https://api.github.com/repos/awesomeWM/awesome/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/awesomeWM/awesome/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/awesomeWM/awesome/git/refs{/sha}","trees_url":"https://api.github.com/repos/awesomeWM/awesome/git/trees{/sha}","statuses_url":"https://api.github.com/repos/awesomeWM/awesome/statuses/{sha}","languages_url":"https://api.github.com/repos/awesomeWM/awesome/languages","stargazers_url":"https://api.github.com/repos/awesomeWM/awesome/stargazers","contributors_url":"https://api.github.com/repos/awesomeWM/awesome/contributors","subscribers_url":"https://api.github.com/repos/awesomeWM/awesome/subscribers","subscription_url":"https://api.github.com/repos/awesomeWM/awesome/subscription","commits_url":"https://api.github.com/repos/awesomeWM/awesome/commits{/sha}","git_commits_url":"https://api.github.com/repos/awesomeWM/awesome/git/commits{/sha}","comments_url":"https://api.github.com/repos/awesomeWM/awesome/comments{/number}","issue_comment_url":"https://api.github.com/repos/awesomeWM/awesome/issues/comments{/number}","contents_url":"https://api.github.com/repos/awesomeWM/awesome/contents/{+path}","compare_url":"https://api.github.com/repos/awesomeWM/awesome/compare/{base}...{head}","merges_url":"https://api.github.com/repos/awesomeWM/awesome/merges","archive_url":"https://api.github.com/repos/awesomeWM/awesome/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/awesomeWM/awesome/downloads","issues_url":"https://api.github.com/repos/awesomeWM/awesome/issues{/number}","pulls_url":"https://api.github.com/repos/awesomeWM/awesome/pulls{/number}","milestones_url":"https://api.github.com/repos/awesomeWM/awesome/milestones{/number}","notifications_url":"https://api.github.com/repos/awesomeWM/awesome/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/awesomeWM/awesome/labels{/name}","releases_url":"https://api.github.com/repos/awesomeWM/awesome/releases{/id}","deployments_url":"https://api.github.com/repos/awesomeWM/awesome/deployments","created_at":"2014-03-03T19:56:16Z","updated_at":"2016-09-25T19:58:23Z","pushed_at":"2016-09-27T05:27:14Z","git_url":"git://github.com/awesomeWM/awesome.git","ssh_url":"git@github.com:awesomeWM/awesome.git","clone_url":"https://github.com/awesomeWM/awesome.git","svn_url":"https://github.com/awesomeWM/awesome","homepage":"https://awesomewm.org/","size":16787,"stargazers_count":899,"watchers_count":899,"language":"Lua","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":136,"mirror_url":null,"open_issues_count":136,"forks":136,"open_issues":136,"watchers":899,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/awesomeWM/awesome/pulls/1121"},"html":{"href":"https://github.com/awesomeWM/awesome/pull/1121"},"issue":{"href":"https://api.github.com/repos/awesomeWM/awesome/issues/1121"},"comments":{"href":"https://api.github.com/repos/awesomeWM/awesome/issues/1121/comments"},"review_comments":{"href":"https://api.github.com/repos/awesomeWM/awesome/pulls/1121/comments"},"review_comment":{"href":"https://api.github.com/repos/awesomeWM/awesome/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/awesomeWM/awesome/pulls/1121/commits"},"statuses":{"href":"https://api.github.com/repos/awesomeWM/awesome/statuses/d117b2ddfe7a5f3c3bb48357c5841c987bc3b2ee"}}}}
{"actor":{"display_login":"psychon"}}