hot_corners
This commit is contained in:
parent
0539aae6aa
commit
f769617c1b
57
README.md
57
README.md
|
@ -8,6 +8,7 @@ smart_borders for awesomewm
|
||||||
Features:
|
Features:
|
||||||
------------
|
------------
|
||||||
- Full titlebar functionality without sacrificing space
|
- Full titlebar functionality without sacrificing space
|
||||||
|
- Hot corners
|
||||||
- Improved mouse controls
|
- Improved mouse controls
|
||||||
- Custom client menu
|
- Custom client menu
|
||||||
- Anti-aliased rounded corners
|
- Anti-aliased rounded corners
|
||||||
|
@ -97,6 +98,10 @@ Customization:
|
||||||
| `snapping_max_distance` | nil | maximum snapping distance (mouse to client border) |
|
| `snapping_max_distance` | nil | maximum snapping distance (mouse to client border) |
|
||||||
| `snapping_center_mouse` | false | center mouse on client when snapping |
|
| `snapping_center_mouse` | false | center mouse on client when snapping |
|
||||||
| `custom_menu_entries` | {} | list of custom menu entries (see custom menues section) |
|
| `custom_menu_entries` | {} | list of custom menu entries (see custom menues section) |
|
||||||
|
| `hot_corners` | {} | hot_corners definitions (see hot corners section)|
|
||||||
|
| `hot_corners_color` | "#00000000" | color of hot_corners |
|
||||||
|
| `hot_corners_width` | dpi(1) | width of hot_corners |
|
||||||
|
| `hot_corners_height` | dpi(1) | height of hot_corners |
|
||||||
|
|
||||||
Snapping:
|
Snapping:
|
||||||
------------
|
------------
|
||||||
|
@ -125,6 +130,56 @@ awful.mouse.append_global_mousebindings({
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Hot Corners:
|
||||||
|
------------
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
<img src="https://s4.gifyu.com/images/hot_corner.gif">
|
||||||
|
</p>
|
||||||
|
|
||||||
|
Execute custom functions at the corners of your screen (e.g. appmenu, volume control, etc.).
|
||||||
|
|
||||||
|
```
|
||||||
|
hot_corners = {
|
||||||
|
["top_right"] = {
|
||||||
|
left_click = function()
|
||||||
|
require("naughty").notify({text = "left_click"})
|
||||||
|
end,
|
||||||
|
right_click = function()
|
||||||
|
require("naughty").notify({text = "right_click"})
|
||||||
|
end,
|
||||||
|
middle_click = function()
|
||||||
|
require("naughty").notify({text = "middle_click"})
|
||||||
|
end,
|
||||||
|
forward_click = function()
|
||||||
|
require("naughty").notify({text = "forward_click"})
|
||||||
|
end,
|
||||||
|
back_click = function()
|
||||||
|
require("naughty").notify({text = "back_click"})
|
||||||
|
end,
|
||||||
|
wheel_up = function()
|
||||||
|
require("naughty").notify({text = "wheel_up"})
|
||||||
|
end,
|
||||||
|
wheel_down = function()
|
||||||
|
require("naughty").notify({text = "wheel_down"})
|
||||||
|
end,
|
||||||
|
enter = function()
|
||||||
|
require("naughty").notify({text = "enter"})
|
||||||
|
end,
|
||||||
|
leave = function()
|
||||||
|
require("naughty").notify({text = "leave"})
|
||||||
|
end
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
Possible positions are "top_left", "top_right", "bottom_left", "bottom_right" or any `awful.placement` defintion (e.g. "centered").
|
||||||
|
|
||||||
|
Execution can also be scriped:
|
||||||
|
|
||||||
|
```
|
||||||
|
echo "awesome.emit_signal('hot_corners::top_right::left_click')" | awesome-client
|
||||||
|
```
|
||||||
|
|
||||||
Custom Menues:
|
Custom Menues:
|
||||||
------------
|
------------
|
||||||
It is possible to add your own menu entries. Entries can be added globally or only for certain classes based on regex matching.
|
It is possible to add your own menu entries. Entries can be added globally or only for certain classes based on regex matching.
|
||||||
|
@ -174,7 +229,6 @@ Add a custom button to `buttons` (`marked` in this example):
|
||||||
|
|
||||||
```
|
```
|
||||||
buttons = { "minimize", "maximize", "close", "marked" }
|
buttons = { "minimize", "maximize", "close", "marked" }
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Define the button:
|
Define the button:
|
||||||
|
@ -209,7 +263,6 @@ s.mytasklist = awful.widget.tasklist {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Example Configuration (as shown on top gif):
|
Example Configuration (as shown on top gif):
|
||||||
------------
|
------------
|
||||||
```
|
```
|
||||||
|
|
88
init.lua
88
init.lua
|
@ -217,6 +217,76 @@ local rounded_corner_shape = function(radius, position)
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local add_hot_corner = function(args)
|
||||||
|
args = args or {}
|
||||||
|
local position = args.position or ""
|
||||||
|
local placement = awful.placement[position]
|
||||||
|
if not placement then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local actions = args.buttons or {}
|
||||||
|
local s = args.screen or awful.screen.focused()
|
||||||
|
local width = args.width
|
||||||
|
local height = args.height
|
||||||
|
local color = args.color
|
||||||
|
|
||||||
|
local corner = awful.popup({
|
||||||
|
screen = s,
|
||||||
|
placement = placement,
|
||||||
|
ontop = true,
|
||||||
|
border_width = 0,
|
||||||
|
minimum_height = height,
|
||||||
|
maximum_height = height,
|
||||||
|
minimum_width = width,
|
||||||
|
maximum_width = width,
|
||||||
|
bg = color,
|
||||||
|
widget = wibox.widget.background
|
||||||
|
})
|
||||||
|
|
||||||
|
-- this will run for every screen, so we have to make sure to only add one signal handler for every assigned signal
|
||||||
|
local must_connect_signal = (s.index == 1)
|
||||||
|
|
||||||
|
local function signal_name(pos, action)
|
||||||
|
return "hot_corners::" .. pos .. "::" .. action
|
||||||
|
end
|
||||||
|
|
||||||
|
local defs = {
|
||||||
|
{name = "left_click", button = 1},
|
||||||
|
{name = "middle_click", button = 2},
|
||||||
|
{name = "right_click", button = 3},
|
||||||
|
{name = "wheel_up", button = 4},
|
||||||
|
{name = "wheel_down", button = 5},
|
||||||
|
{name = "back_click", button = 8},
|
||||||
|
{name = "forward_click", button = 9}
|
||||||
|
}
|
||||||
|
|
||||||
|
local buttons = {}
|
||||||
|
for _, btn in ipairs(defs) do
|
||||||
|
if actions[btn.name] then
|
||||||
|
local signal = signal_name(position, btn.name)
|
||||||
|
table.insert(buttons, awful.button({}, btn.button, function()
|
||||||
|
awesome.emit_signal(signal)
|
||||||
|
end))
|
||||||
|
if must_connect_signal then
|
||||||
|
awesome.connect_signal(signal, actions[btn.name])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
corner:buttons(buttons)
|
||||||
|
|
||||||
|
for _, action in pairs({"enter", "leave"}) do
|
||||||
|
if actions[action] then
|
||||||
|
local signal = signal_name(position, action)
|
||||||
|
corner:connect_signal("mouse::" .. action, function()
|
||||||
|
awesome.emit_signal(signal)
|
||||||
|
end)
|
||||||
|
if must_connect_signal then
|
||||||
|
awesome.connect_signal(signal, actions[action])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local function new(config)
|
local function new(config)
|
||||||
local cfg = config or {}
|
local cfg = config or {}
|
||||||
local positions = cfg.positions or {"left", "right", "top", "bottom"}
|
local positions = cfg.positions or {"left", "right", "top", "bottom"}
|
||||||
|
@ -268,6 +338,11 @@ local function new(config)
|
||||||
local snapping_center_mouse = cfg.snapping_center_mouse or false
|
local snapping_center_mouse = cfg.snapping_center_mouse or false
|
||||||
local snapping_max_distance = cfg.snapping_max_distance or nil
|
local snapping_max_distance = cfg.snapping_max_distance or nil
|
||||||
|
|
||||||
|
local hot_corners = cfg.hot_corners or {}
|
||||||
|
local hot_corners_color = cfg.hot_corners_color or "#00000000"
|
||||||
|
local hot_corners_width = cfg.hot_corners_width or dpi(1)
|
||||||
|
local hot_corners_height = cfg.hot_corners_height or dpi(1)
|
||||||
|
|
||||||
local show_button_tooltips = cfg.show_button_tooltips or false -- tooltip might intercept mouseclicks; not recommended!
|
local show_button_tooltips = cfg.show_button_tooltips or false -- tooltip might intercept mouseclicks; not recommended!
|
||||||
local show_title_tooltip = cfg.show_title_tooltip or false -- might fuck up sloppy mouse focus; not recommended!
|
local show_title_tooltip = cfg.show_title_tooltip or false -- might fuck up sloppy mouse focus; not recommended!
|
||||||
|
|
||||||
|
@ -434,6 +509,19 @@ local function new(config)
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for s in screen do
|
||||||
|
for pos, buttons in pairs(hot_corners) do
|
||||||
|
add_hot_corner({
|
||||||
|
buttons = buttons,
|
||||||
|
screen = s,
|
||||||
|
position = pos,
|
||||||
|
color = hot_corners_color,
|
||||||
|
width = hot_corners_width,
|
||||||
|
height = hot_corners_height
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if layout ~= "fixed" and layout ~= "ratio" then
|
if layout ~= "fixed" and layout ~= "ratio" then
|
||||||
layout = "fixed"
|
layout = "fixed"
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue