hot_corners
This commit is contained in:
parent
0539aae6aa
commit
f769617c1b
67
README.md
67
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,8 +98,12 @@ 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:
|
||||||
------------
|
------------
|
||||||
When `useless_gaps` are disabled it is very easy and fast to control clients by using the mouse since you only have to move your mouse to the edge of the screen to hit the client border.
|
When `useless_gaps` are disabled it is very easy and fast to control clients by using the mouse since you only have to move your mouse to the edge of the screen to hit the client border.
|
||||||
However, when `useless_gaps` are enabled it can be frustrating to hit the border.
|
However, when `useless_gaps` are enabled it can be frustrating to hit the border.
|
||||||
|
@ -125,7 +130,57 @@ awful.mouse.append_global_mousebindings({
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Custom Menues:
|
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:
|
||||||
------------
|
------------
|
||||||
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.
|
||||||
|
|
||||||
|
@ -168,13 +223,12 @@ custom_menu_entries = {
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
Custom Buttons:
|
Custom Buttons:
|
||||||
------------
|
------------
|
||||||
Add a custom button to `buttons` (`marked` in this example):
|
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:
|
||||||
|
@ -187,7 +241,7 @@ color_marked_normal = "#ffff00",
|
||||||
color_marked_hover = "#ff0000",
|
color_marked_hover = "#ff0000",
|
||||||
```
|
```
|
||||||
|
|
||||||
Integration / Signals:
|
Integration / Signals:
|
||||||
------------
|
------------
|
||||||
It is possible to use `smart_borders` features in other modules by emitting signals.
|
It is possible to use `smart_borders` features in other modules by emitting signals.
|
||||||
|
|
||||||
|
@ -209,8 +263,7 @@ s.mytasklist = awful.widget.tasklist {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Example Configuration (as shown on top gif):
|
||||||
Example Configuration (as shown on top gif):
|
|
||||||
------------
|
------------
|
||||||
```
|
```
|
||||||
require("smart_borders") {
|
require("smart_borders") {
|
||||||
|
|
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