mirror of
https://github.com/ebeem/guile-swayer.git
synced 2024-11-16 07:47:32 +01:00
1634 lines
70 KiB
Scheme
1634 lines
70 KiB
Scheme
(define-module (swayipc dispatcher)
|
||
#:use-module (swayipc connection)
|
||
#:use-module (swayipc records)
|
||
#:use-module (srfi srfi-9)
|
||
#:use-module (srfi srfi-1)
|
||
#:use-module (sjson)
|
||
|
||
#:export (SWAY-ORIENTATION-HORIZONTAL
|
||
SWAY-ORIENTATION-VERTICAL
|
||
SWAY-ORIENTATION-AUTO
|
||
SWAY-LAYOUT-DEFAULT
|
||
SWAY-LAYOUT-STACKING
|
||
SWAY-LAYOUT-TABBED
|
||
SWAY-XWAYLAND-ENABLE
|
||
SWAY-XWAYLAND-DISABLE
|
||
SWAY-XWAYLAND-FORCE
|
||
SWAY-BORDER-NONE
|
||
SWAY-BORDER-NORMAL
|
||
SWAY-BORDER-CSD
|
||
SWAY-BORDER-PIXEL
|
||
SWAY-FLOATING-ENABLED
|
||
SWAY-FLOATING-DISABLED
|
||
SWAY-FLOATING-TOGGLE
|
||
SWAY-DIRECTION-UP
|
||
SWAY-DIRECTION-RIGHT
|
||
SWAY-DIRECTION-DOWN
|
||
SWAY-DIRECTION-LEFT
|
||
SWAY-SIBLING-NEXT
|
||
SWAY-SIBLING-PREV
|
||
SWAY-HIERARCHY-CHILD
|
||
SWAY-HIERARCHY-PARENT
|
||
SWAY-FULLSCREEN-ENABLED
|
||
SWAY-FULLSCREEN-DISABLED
|
||
SWAY-FULLSCREEN-TOGGLE
|
||
SWAY-GAPS-OPTION-INNER
|
||
SWAY-GAPS-OPTION-OUTER
|
||
SWAY-GAPS-OPTION-HORIZONTAL
|
||
SWAY-GAPS-OPTION-VERTICAL
|
||
SWAY-GAPS-OPTION-TOP
|
||
SWAY-GAPS-OPTION-RIGHT
|
||
SWAY-GAPS-OPTION-BOTTOM
|
||
SWAY-GAPS-OPTION-LEFT
|
||
SWAY-GAPS-WORKSPACE-ALL
|
||
SWAY-GAPS-WORKSPACE-CURRENT
|
||
SWAY-GAPS-WORKSPACE-SET
|
||
SWAY-GAPS-WORKSPACE-PLUS
|
||
SWAY-GAPS-WORKSPACE-MINUS
|
||
SWAY-GAPS-WORKSPACE-TOGGLE
|
||
SWAY-MOUSE-WARPING-OUTPUT
|
||
SWAY-MOUSE-WARPING-CONTAINER
|
||
SWAY-MOUSE-WARPING-NONE
|
||
SWAY-POPUP-TYPE-OUTPUTSMART
|
||
SWAY-POPUP-TYPE-IGNORE
|
||
SWAY-POPUP-TYPE-LEAVE-FULLSCREEN
|
||
SWAY-PRIMARY-SELECTION-ENABLED
|
||
SWAY-PRIMARY-SELECTION-DISABLED
|
||
SWAY-SHOW-MARKS-YES
|
||
SWAY-SHOW-MARKS-NO
|
||
SWAY-OPACITY-SET
|
||
SWAY-OPACITY-PLUS
|
||
SWAY-OPACITY-MINUS
|
||
SWAY-TILING-DRAG-ENABLE
|
||
SWAY-TILING-DRAG-DISABLE
|
||
SWAY-TILING-DRAG-TOGGLE
|
||
SWAY-TILING-ALIGN-LEFT
|
||
SWAY-TILING-ALIGN-CENTER
|
||
SWAY-TILING-ALIGN-RIGHT
|
||
SWAY-WORKSPACE-AUTO-BACK-AND-FORTH-OPTION-YES
|
||
SWAY-WORKSPACE-AUTO-BACK-AND-FORTH-OPTION-NO
|
||
SWAY-FLOATING-MODIFIER-TYPE-NORMAL
|
||
SWAY-FLOATING-MODIFIER-TYPE-INVERSE
|
||
SWAY-FOCUS-FOLLOW-MOUSE-FLAG-YES
|
||
SWAY-FOCUS-FOLLOW-MOUSE-FLAG-NO
|
||
SWAY-FOCUS-FOLLOW-MOUSE-FLAG-ALWAYS
|
||
SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-SMART
|
||
SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-URGENT
|
||
SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-FOCUS
|
||
SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-NONE
|
||
SWAY-FOCUS-WRAPPING-FLAG-YES
|
||
SWAY-FOCUS-WRAPPING-FLAG-NO
|
||
SWAY-FOCUS-WRAPPING-FLAG-FORCE
|
||
SWAY-FOCUS-WRAPPING-FLAG-WORKSPACE
|
||
SWAY-EDGE-BORDER-TYPE-NONE
|
||
SWAY-EDGE-BORDER-TYPE-VERTICAL
|
||
SWAY-EDGE-BORDER-TYPE-HORIZONTAL
|
||
SWAY-EDGE-BORDER-TYPE-BOTH
|
||
SWAY-EDGE-BORDER-TYPE-SMART
|
||
SWAY-EDGE-BORDER-TYPE-SMART-NO-GAPS
|
||
SWAY-SMART-BORDERS-ON
|
||
SWAY-SMART-BORDERS-OFF
|
||
SWAY-SMART-BORDERS-NO-GAPS
|
||
SWAY-SMART-GAPS-ON
|
||
SWAY-SMART-GAPS-OFF
|
||
SWAY-SMART-GAPS-TOGGLE
|
||
SWAY-SMART-GAPS-INVERSE-OUTER
|
||
SWAY-RESIZE-TYPE-SHRINK
|
||
SWAY-RESIZE-TYPE-GROW
|
||
SWAY-RESIZE-DIRECTION-HEIGHT
|
||
SWAY-RESIZE-DIRECTION-WIDTH
|
||
SWAY-SIZE-UNIT-PX
|
||
SWAY-SIZE-UNIT-PPT
|
||
SWAY-SPLIT-VERTICAL
|
||
SWAY-SPLIT-HORIZONTAL
|
||
SWAY-SPLIT-NONE
|
||
SWAY-SPLIT-TOGGLE
|
||
SWAY-STICKY-ENABLE
|
||
SWAY-STICKY-DISABLE
|
||
SWAY-STICKY-TOGGLE
|
||
SWAY-SWAY-CONTAINER-TYPE-ID
|
||
SWAY-SWAY-CONTAINER-TYPE-CONTAINER-ID
|
||
SWAY-SWAY-CONTAINER-TYPE-MARK
|
||
SWAY-URGENT-ENABLE
|
||
SWAY-URGENT-DISABLE
|
||
SWAY-URGENT-ALLOW
|
||
SWAY-URGENT-DENY
|
||
SWAY-BORDER-STYLE-NONE
|
||
SWAY-BORDER-STYLE-NORMAL
|
||
SWAY-BORDER-STYLE-PIXEL
|
||
SWAY-INHIBIT-IDLE-FOCUS
|
||
SWAY-INHIBIT-IDLE-FULLSCREEN
|
||
SWAY-INHIBIT-IDLE-OPEN
|
||
SWAY-INHIBIT-IDLE-NONE
|
||
SWAY-INHIBIT-IDLE-VISIBLE
|
||
SWAY-LAYOUT-SPLITH
|
||
SWAY-LAYOUT-SPLITV
|
||
SWAY-LAYOUT-TOGGLE-ALL
|
||
SWAY-LAYOUT-TOGGLE-SPLIT
|
||
SWAY-WORKSPACE-PREVIOUS
|
||
SWAY-WORKSPACE-NEXT
|
||
SWAY-WORKSPACE-CURRENT
|
||
SWAY-WORKSPACE-PREVIOUS-ON-OUTPUT
|
||
SWAY-WORKSPACE-NEXT-ON-OUTPUT
|
||
SWAY-WORKSPACE-BACK-AND-FORTH
|
||
SWAY-OUTPUT-CURRENT
|
||
SWAY-OUTPUT-UP
|
||
SWAY-OUTPUT-RIGHT
|
||
SWAY-OUTPUT-DOWN
|
||
SWAY-OUTPUT-LEFT
|
||
|
||
sway-dispatch-command
|
||
sway-dispatch-commands
|
||
sway-default-orientation
|
||
sway-include
|
||
sway-swaybg-command
|
||
sway-swaynag-command
|
||
sway-workspace-layout
|
||
sway-xwayland
|
||
sway-border
|
||
sway-border-toggle
|
||
sway-exit
|
||
sway-floating
|
||
sway-mark
|
||
sway-focus-container-criteria
|
||
sway-focus-container
|
||
sway-focus-container-sibling
|
||
sway-focus-container-child
|
||
sway-focus-container-parent
|
||
sway-focus-output-direction
|
||
sway-focus-output-name
|
||
sway-focus-container-tiling
|
||
sway-focus-container-floating
|
||
sway-fullscreen
|
||
sway-gaps
|
||
sway-inhibit-idle
|
||
sway-layout
|
||
sway-layout-toggle
|
||
sway-move-container
|
||
sway-move-container-absolute-position
|
||
sway-move-container-absolute-center
|
||
sway-move-container-cursor
|
||
sway-move-container-to-mark
|
||
sway-move-container-to-workspace
|
||
sway-move-container-to-output
|
||
sway-move-container-to-scratchpad
|
||
sway-move-workspace-to-output
|
||
sway-nop
|
||
sway-reload
|
||
sway-rename-workspace
|
||
sway-rename-current-workspace
|
||
sway-resize
|
||
sway-resize-height
|
||
sway-resize-width
|
||
sway-show-scratchpad
|
||
sway-shortcuts-inhibitor
|
||
sway-split-container
|
||
sway-sticky
|
||
sway-swap-container
|
||
sway-title-format
|
||
sway-assign-to-workspace
|
||
sway-assign-to-output
|
||
sway-bindsym
|
||
sway-bindcode
|
||
sway-bindswitch
|
||
sway-unbindswitch
|
||
sway-unbindsym
|
||
sway-unbindcode
|
||
sway-unmark
|
||
sway-urgent
|
||
sway-client-background
|
||
sway-client-focused-color
|
||
sway-client-focused-inactive-color
|
||
sway-client-focused-tab-title-color
|
||
sway-client-placeholder-color
|
||
sway-client-unfocused-color
|
||
sway-client-urgent-color
|
||
sway-default-border-style
|
||
sway-default-floating-border-style
|
||
sway-exec
|
||
sway-exec-always
|
||
sway-floating-maximum-size
|
||
sway-floating-minimum-size
|
||
sway-floating-modifier
|
||
sway-focus-follow-mouse
|
||
sway-focus-on-window-activation
|
||
sway-focus-wrapping
|
||
sway-font
|
||
sway-force-display-urgency-hint
|
||
sway-titlebar-border-thickness
|
||
sway-titlebar-padding
|
||
sway-for-window
|
||
sway-default-gaps
|
||
sway-hide-edge-borders
|
||
sway-input
|
||
sway-seat
|
||
sway-kill
|
||
sway-smart-borders
|
||
sway-smart-gaps
|
||
sway-mode
|
||
sway-mode-subcommand
|
||
sway-mouse-warping
|
||
sway-no-focus
|
||
sway-output
|
||
sway-popup-during-fullscreen
|
||
sway-primary-selection
|
||
sway-show-marks
|
||
sway-opacity
|
||
sway-tiling-drag
|
||
sway-tiling-drag-threshold
|
||
sway-tiling-align
|
||
sway-switch-workspace-id
|
||
sway-switch-workspace
|
||
sway-switch-workspace-on-output
|
||
sway-workspace-auto-back-and-forth
|
||
sway-workspace-gaps
|
||
sway-criteria))
|
||
|
||
(define (custom-exception-handler exc)
|
||
(display "An error occurred while dispatching the command\n"))
|
||
|
||
(define (catch-all thunk)
|
||
(with-exception-handler
|
||
(lambda (exn)
|
||
(format (current-error-port)
|
||
"Uncaught exception: ~s\n" exn)
|
||
#f)
|
||
thunk
|
||
#:unwind? #t))
|
||
|
||
(define (sway-dispatch-command command)
|
||
"Parses and runs the payload as sway command.
|
||
Parameters:
|
||
- a sway command
|
||
Response:
|
||
An array of objects corresponding to each command that was parsed. Each
|
||
object has the property success."
|
||
(sway-dispatch-commands command))
|
||
|
||
(define (sway-dispatch-commands . commands)
|
||
"Parses and runs the payload as sway commands
|
||
Parameters:
|
||
- list of sway commands
|
||
Response:
|
||
An array of objects corresponding to each command that was parsed. Each
|
||
object has the property success."
|
||
(format #t "dispatching: ~a\n" (string-join commands "\n"))
|
||
|
||
(catch-all
|
||
(lambda ()
|
||
(begin
|
||
;; write the commands message
|
||
(sway-write-msg SWAY-COMMAND-SOCKET SWAY-MSG-ID-RUN-COMMMAND (string-join commands " "))
|
||
;; read response from socket
|
||
(map
|
||
(lambda (res)
|
||
(scm->sway-tick res))
|
||
(vector->list
|
||
(json-string->scm
|
||
(list-ref (sway-read-msg SWAY-COMMAND-SOCKET) 1))))))))
|
||
|
||
;; bar [<bar-id>] <bar-subcommands...>
|
||
;; For details on bar subcommands, see sway-bar(5).
|
||
|
||
(define SWAY-ORIENTATION-HORIZONTAL "horizontal")
|
||
(define SWAY-ORIENTATION-VERTICAL "vertical")
|
||
(define SWAY-ORIENTATION-AUTO "auto")
|
||
|
||
(define* (sway-default-orientation orientation #:key (exec #t))
|
||
"Sets the default container layout for tiled containers.
|
||
parameters:
|
||
- orientation: `SWAY-ORIENTATION-HORIZONTAL`, `SWAY-ORIENTATION-VERTICAL`, `SWAY-ORIENTATION-AUTO`"
|
||
(let ((command (format #f "default_orientation ~a" orientation)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-include file-path #:key (exec #t))
|
||
"Includes another configuration file from path (not scheme file).
|
||
parameters:
|
||
- file-path: string"
|
||
(let ((command (format #f "include ~a" file-path)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-swaybg-command command #:key (exec #t))
|
||
"Executes custom background command. Default is swaybg.
|
||
parameters:
|
||
- command: string"
|
||
(let ((command (format #f "swaybg_command ~a" command)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-swaynag-command command #:key (exec #t))
|
||
"Executes custom command for swaynag. Default is swaynag.
|
||
parameters:
|
||
- command: string"
|
||
(let ((command (format #f "swaynag_command ~a" command)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-LAYOUT-DEFAULT "default")
|
||
(define SWAY-LAYOUT-STACKING "stacking")
|
||
(define SWAY-LAYOUT-TABBED "tabbed")
|
||
|
||
(define* (sway-workspace-layout layout #:key (exec #t))
|
||
"Specifies the initial layout for new containers in an empty workspace.
|
||
parameters:
|
||
- layout: `SWAY-LAYOUT-DEFAULT`, `SWAY-LAYOUT-STACKING`, `SWAY-LAYOUT-TABBED`"
|
||
(let ((command (format #f "workspace_layout ~a" layout)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-XWAYLAND-ENABLE "enable")
|
||
(define SWAY-XWAYLAND-DISABLE "disable")
|
||
(define SWAY-XWAYLAND-FORCE "force")
|
||
|
||
(define* (sway-xwayland option #:key (exec #t))
|
||
"Enables or disables Xwayland support, which allows X11 applications to be used.
|
||
parameters:
|
||
- option: `SWAY-XWAYLAND-ENABLE`, `SWAY-XWAYLAND-DISABLE`, `SWAY-XWAYLAND-FORCE`"
|
||
(let* ((option (cond
|
||
((equal? #t option) SWAY-XWAYLAND-ENABLE)
|
||
((equal? #f option) SWAY-XWAYLAND-DISABLE)
|
||
(else option)))
|
||
(command (format #f "xwayland ~a" option)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-BORDER-NONE "none")
|
||
(define SWAY-BORDER-NORMAL "normal")
|
||
(define SWAY-BORDER-CSD "csd")
|
||
(define SWAY-BORDER-PIXEL "pixel")
|
||
|
||
(define* (sway-border option thickness #:key (exec #t))
|
||
"Enables or disables Xwayland support, which allows X11 applications to be used.
|
||
parameters:
|
||
- option: `SWAY-BORDER-NONE`, `SWAY-BORDER-NORMAL`, `SWAY-BORDER-CSD`, `SWAY-BORDER-PIXEL`
|
||
- thickness: int"
|
||
(let ((command (format #f "border ~a ~a" option thickness)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-border-toggle #:key (exec #t))
|
||
"Cycles through the available border styles."
|
||
(let ((command (format #f "border toggle")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-exit #:key (exec #t))
|
||
"Exit sway and end your Wayland session."
|
||
(let ((command (format #f "exit")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-FLOATING-ENABLED "enabled")
|
||
(define SWAY-FLOATING-DISABLED "disabled")
|
||
(define SWAY-FLOATING-TOGGLE "toggle")
|
||
|
||
(define* (sway-floating option #:key (exec #t))
|
||
"Make focused view floating, non-floating, or the opposite of what it is now.
|
||
parameters:
|
||
- layout: `SWAY-FLOATING-ENABLED`, `SWAY-FLOATING-DISABLED`, `SWAY-FLOATING-TOGGLE`"
|
||
(let* ((option (cond
|
||
((equal? #t option) SWAY-FLOATING-ENABLED)
|
||
((equal? #f option) SWAY-FLOATING-DISABLED)
|
||
(else option)))
|
||
(command (format #f "floating ~a" option)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-focus-container-criteria criteria #:key (exec #t))
|
||
"Moves focus to the container that matches the specified criteria.
|
||
parameters:
|
||
- criteria: sway criteria"
|
||
(let ((command (format #f "~a focus" criteria)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-DIRECTION-UP "up")
|
||
(define SWAY-DIRECTION-RIGHT "right")
|
||
(define SWAY-DIRECTION-DOWN "down")
|
||
(define SWAY-DIRECTION-LEFT "left")
|
||
(define SWAY-SIBLING-NEXT "next")
|
||
(define SWAY-SIBLING-PREV "prev")
|
||
(define SWAY-HIERARCHY-CHILD "child")
|
||
(define SWAY-HIERARCHY-PARENT "parent")
|
||
|
||
(define* (sway-focus-container direction #:key (exec #t))
|
||
"Moves focus to the next container in the specified direction.
|
||
parameters:
|
||
- direction: `SWAY-DIRECTION-UP`, `SWAY-DIRECTION-RIGHT`, `SWAY-DIRECTION-DOWN`, `SWAY-DIRECTION-LEFT`"
|
||
(let ((command (format #f "focus ~a" direction)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-focus-container-sibling sibling #:key (exec #t))
|
||
"Moves focus to the previous or next container in the current layout.
|
||
parameters:
|
||
- sibling: `SWAY-SIBLING-NEXT`, `SWAY-SIBLING-PREV`"
|
||
(let ((command (format #f "focus ~a" sibling)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-focus-container-child #:key (exec #t))
|
||
"Moves focus to the last-focused child of the focused container."
|
||
(let ((command (format #f "focus child")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-focus-container-parent #:key (exec #t))
|
||
"Moves focus to the last-focused parent of the focused container."
|
||
(let ((command (format #f "focus parent")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-focus-output-direction direction #:key (exec #t))
|
||
"Moves focus to the next output in the specified direction.
|
||
parameters:
|
||
- direction: `SWAY-DIRECTION-UP`, `SWAY-DIRECTION-RIGHT`, `SWAY-DIRECTION-DOWN`, `SWAY-DIRECTION-LEFT`"
|
||
(let ((command (format #f "focus output ~a" direction)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-focus-output-name name #:key (exec #t))
|
||
"Moves focus to the named output.
|
||
parameters:
|
||
- name: string, output name"
|
||
(let ((command (format #f "focus output ~a" name)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-focus-container-tiling #:key (exec #t))
|
||
"Sets focus to the last focused tiling container."
|
||
(let ((command (format #f "focus tiling")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-focus-container-floating #:key (exec #t))
|
||
"Sets focus to the last focused floating container."
|
||
(let ((command (format #f "focus floating")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-FULLSCREEN-ENABLED "enabled")
|
||
(define SWAY-FULLSCREEN-DISABLED "disabled")
|
||
(define SWAY-FULLSCREEN-TOGGLE "toggle")
|
||
|
||
(define* (sway-fullscreen option #:key global (exec #t))
|
||
"Makes focused view fullscreen, non-fullscreen, or the opposite of current.
|
||
parameters:
|
||
- option: `SWAY-FULLSCREEN-ENABLED`, `SWAY-FULLSCREEN-DISABLED`, `SWAY-FULLSCREEN-TOGGLE`
|
||
- global: #t, #f"
|
||
(let* ((option (cond
|
||
((equal? #t option) SWAY-FULLSCREEN-ENABLED)
|
||
((equal? #f option) SWAY-FULLSCREEN-DISABLED)
|
||
(else option)))
|
||
(global (if global "global" ""))
|
||
(command (format #f "fullscreen ~a ~a" option global)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-GAPS-OPTION-INNER "inner")
|
||
(define SWAY-GAPS-OPTION-OUTER "outer")
|
||
(define SWAY-GAPS-OPTION-HORIZONTAL "horizontal")
|
||
(define SWAY-GAPS-OPTION-VERTICAL "vertical")
|
||
(define SWAY-GAPS-OPTION-TOP "top")
|
||
(define SWAY-GAPS-OPTION-RIGHT "right")
|
||
(define SWAY-GAPS-OPTION-BOTTOM "bottom")
|
||
(define SWAY-GAPS-OPTION-LEFT "left")
|
||
|
||
(define SWAY-GAPS-WORKSPACE-ALL "all")
|
||
(define SWAY-GAPS-WORKSPACE-CURRENT "current")
|
||
(define SWAY-GAPS-WORKSPACE-SET "set")
|
||
(define SWAY-GAPS-WORKSPACE-PLUS "plus")
|
||
(define SWAY-GAPS-WORKSPACE-MINUS "minus")
|
||
(define SWAY-GAPS-WORKSPACE-TOGGLE "toggle")
|
||
|
||
(define* (sway-gaps option workspace amount #:key (exec #t))
|
||
"Changes the inner or outer gaps for either all workspaces or the current workspace.
|
||
parameters:
|
||
- option: `SWAY-GAPS-OPTION-INNER`, `SWAY-GAPS-OPTION-OUTER`, `SWAY-GAPS-OPTION-HORIZONTAL`,
|
||
`SWAY-GAPS-OPTION-VERTICAL`, `SWAY-GAPS-OPTION-TOP`, `SWAY-GAPS-OPTION-RIGHT`,
|
||
`SWAY-GAPS-OPTION-BOTTOM`, `SWAY-GAPS-OPTION-LEFT`
|
||
- workspace: `SWAY-GAPS-WORKSPACE-ALL`, `SWAY-GAPS-WORKSPACE-CURRENT`, `SWAY-GAPS-WORKSPACE-SET`,
|
||
`SWAY-GAPS-WORKSPACE-PLUS`, `SWAY-GAPS-WORKSPACE-MINUS`, `SWAY-GAPS-WORKSPACE-TOGGLE`
|
||
- amount: amount of gap (number)"
|
||
(let* ((command (format #f "gaps ~a ~a ~a" option workspace amount)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-INHIBIT-IDLE-FOCUS "focus")
|
||
(define SWAY-INHIBIT-IDLE-FULLSCREEN "fullscreen")
|
||
(define SWAY-INHIBIT-IDLE-OPEN "open")
|
||
(define SWAY-INHIBIT-IDLE-NONE "none")
|
||
(define SWAY-INHIBIT-IDLE-VISIBLE "visible")
|
||
|
||
(define* (sway-inhibit-idle option #:key (exec #t))
|
||
"Set/unset an idle inhibitor for the view.
|
||
parameters:
|
||
- option: `SWAY-INHIBIT-IDLE-FOCUS`, `SWAY-INHIBIT-IDLE-FULLSCREEN`, `SWAY-INHIBIT-IDLE-OPEN`,
|
||
`SWAY-INHIBIT-IDLE-NONE`, `SWAY-INHIBIT-IDLE-VISIBLE`"
|
||
(let* ((command (format #f "inhibit_idle ~a" option)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-LAYOUT-SPLITH "splith")
|
||
(define SWAY-LAYOUT-SPLITV "splitv")
|
||
|
||
(define* (sway-layout option #:key (exec #t))
|
||
"Set/unset an idle inhibitor for the view.
|
||
parameters:
|
||
- option: `SWAY-LAYOUT-DEFAULT`, `SWAY-LAYOUT-SPLITH`, `SWAY-LAYOUT-SPLITV`,
|
||
`SWAY-LAYOUT-STACKING`, `SWAY-LAYOUT-TABBED`"
|
||
(let* ((command (format #f "layout ~a" option)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-LAYOUT-TOGGLE-ALL "all")
|
||
(define SWAY-LAYOUT-TOGGLE-SPLIT "split")
|
||
|
||
(define* (sway-layout-toggle #:key option (exec #t))
|
||
"Cycles the layout mode of the focused container though a preset list of layouts.
|
||
parameters:
|
||
- option: `SWAY-LAYOUT-TOGGLE-ALL`, `SWAY-LAYOUT-TOGGLE-SPLIT`"
|
||
(let* ((option (if option (format #f " ~a" option) ""))
|
||
(command (format #f "layout toggle~a" option)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-move-container direction #:key amount (exec #t))
|
||
"Moves the focused container in the direction specified.
|
||
parameters:
|
||
- direction: `SWAY-DIRECTION-UP`, `SWAY-DIRECTION-RIGHT`, `SWAY-DIRECTION-DOWN`, `SWAY-DIRECTION-LEFT`
|
||
- amount: int"
|
||
(let* ((amount (or amount ""))
|
||
(command (format #f "move ~a ~a" direction amount)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-move-container-absolute-position x y #:key (exec #t))
|
||
"Moves the focused container to the specified position in the workspace.
|
||
parameters:
|
||
- x: int
|
||
- y: int"
|
||
(let* ((command (format #f "move absolute position ~a ~a" x y)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-move-container-absolute-center #:key (exec #t))
|
||
"Moves the focused container to be centered on the workspace."
|
||
(let* ((command (format #f "move absolute position center")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-move-container-cursor #:key (exec #t))
|
||
"Moves the focused container to be centered on the cursor."
|
||
(let* ((command (format #f "move position cursor")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-move-container-to-mark mark #:key (exec #t))
|
||
"Moves the focused container to the specified mark."
|
||
(let* ((command (format #f "move container to mark ~a" mark)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-WORKSPACE-PREVIOUS "prev")
|
||
(define SWAY-WORKSPACE-NEXT "next")
|
||
(define SWAY-WORKSPACE-CURRENT "current")
|
||
(define SWAY-WORKSPACE-PREVIOUS-ON-OUTPUT "prev_on_output")
|
||
(define SWAY-WORKSPACE-NEXT-ON-OUTPUT "next_on_output")
|
||
(define SWAY-WORKSPACE-BACK-AND-FORTH "back_and_forth")
|
||
|
||
(define* (sway-move-container-to-workspace workspace #:key (exec #t))
|
||
"Moves the focused container to the workspace name
|
||
parameters:
|
||
- workspace: workspace name, `SWAY-WORKSPACE-PREVIOUS`, `SWAY-WORKSPACE-NEXT`, `SWAY-WORKSPACE-CURRENT`,
|
||
`SWAY-WORKSPACE-PREVIOUS-ON-OUTPUT`, `SWAY-WORKSPACE-NEXT-ON-OUTPUT`, `SWAY-WORKSPACE-BACK-AND-FORTH`"
|
||
(let* ((command (format #f "move container to workspace \"~a\"" workspace)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-OUTPUT-CURRENT "current")
|
||
(define SWAY-OUTPUT-UP "up")
|
||
(define SWAY-OUTPUT-RIGHT "right")
|
||
(define SWAY-OUTPUT-DOWN "down")
|
||
(define SWAY-OUTPUT-LEFT "left")
|
||
|
||
(define* (sway-move-container-to-output output #:key (exec #t))
|
||
"Moves the focused container to the specified output id|name|direction.
|
||
parameters:
|
||
- workspace: output name, output id, `SWAY-OUTPUT-CURRENT`, `SWAY-OUTPUT-UP`,
|
||
`SWAY-OUTPUT-RIGHT`, `SWAY-OUTPUT-DOWN`, `SWAY-OUTPUT-LEFT`"
|
||
(let* ((command (format #f "move container to output \"~a\"" output)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-move-container-to-scratchpad #:key (exec #t))
|
||
"Moves the focused container to the scratchpad."
|
||
(let* ((command (format #f "move container to scratchpad")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-move-workspace-to-output output #:key (exec #t))
|
||
"Moves the focused workspace to the specified output id|name|direction.
|
||
parameters:
|
||
- workspace: output name, output id, `SWAY-OUTPUT-CURRENT`, `SWAY-OUTPUT-UP`,
|
||
`SWAY-OUTPUT-RIGHT`, `SWAY-OUTPUT-DOWN`, `SWAY-OUTPUT-LEFT`"
|
||
(let* ((command (format #f "move workspace to output ~a" output)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-nop #:key (comment "") (exec #t))
|
||
"A no operation command that can be used to override default behaviour.
|
||
parameters:
|
||
- comment: optional comment argument is ignored, but logged for debugging purposes."
|
||
(let* ((command (format #f "nop ~a" comment)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-reload #:key (exec #t))
|
||
"Reloads the sway config file and applies any changes."
|
||
(let* ((command (format #f "reload")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-rename-workspace old-name new-name #:key (exec #t))
|
||
"Rename workspace <old_name> to the <new_name>
|
||
parameters:
|
||
- old-name: old workspace name (str).
|
||
- new-name: new workspace name (str)."
|
||
(let* ((command (format #f "rename workspace ~a to ~a" old-name new-name)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-rename-current-workspace new-name #:key (exec #t))
|
||
"Rename current workspace to the <new_name>
|
||
parameters:
|
||
- new-name: new workspace name (str)."
|
||
(let* ((command (format #f "rename workspace to ~a" new-name)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-RESIZE-TYPE-SHRINK "shrink")
|
||
(define SWAY-RESIZE-TYPE-GROW "grow")
|
||
(define SWAY-RESIZE-DIRECTION-HEIGHT "height")
|
||
(define SWAY-RESIZE-DIRECTION-WIDTH "width")
|
||
|
||
(define SWAY-SIZE-UNIT-PX "px")
|
||
(define SWAY-SIZE-UNIT-PPT "ppt")
|
||
|
||
(define* (sway-resize type direction amount #:key unit (exec #t))
|
||
"Resizes the currently focused container by amount, specified in pixels or percentage points.
|
||
If the units are omitted, floating containers are resized in px and tiled containers by ppt.
|
||
parameters:
|
||
- type: `SWAY-RESIZE-TYPE-SHRINK`, `SWAY-RESIZE-TYPE-GROW`
|
||
- direction: `SWAY-RESIZE-DIRECTION-HEIGHT`, `SWAY-RESIZE-DIRECTION-WIDTH`
|
||
- amount: number
|
||
- unit: `SWAY-SIZE-UNIT-PX`, `SWAY-SIZE-UNIT-PPT`"
|
||
(let* ((unit (or unit ""))
|
||
(command (format #f "resize ~a ~a ~a ~a" type direction amount unit)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-resize-height amount #:key unit (exec #t))
|
||
"Sets the height of the container to height, specified in pixels or percentage points."
|
||
(let* ((unit (or unit ""))
|
||
(command (format #f "resize set height ~a ~a" amount unit)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-resize-width amount #:key unit (exec #t))
|
||
"Sets the width of the container to width, specified in pixels or percentage points."
|
||
(let* ((unit (or unit ""))
|
||
(command (format #f "resize set width ~a ~a" amount unit)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-show-scratchpad #:key (exec #t))
|
||
"Shows a window from the scratchpad."
|
||
(let* ((command (format #f "scratchpad show")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-shortcuts-inhibitor flag #:key (exec #t))
|
||
"Enables or disables the ability of clients to inhibit keyboard shortcuts for a view."
|
||
(let* ((flag (if flag "enabled" "disabled"))
|
||
(command (format #f "shortcuts_inhibitor ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-SPLIT-VERTICAL "vertical")
|
||
(define SWAY-SPLIT-HORIZONTAL "horizontal")
|
||
(define SWAY-SPLIT-NONE "none")
|
||
(define SWAY-SPLIT-TOGGLE "toggle")
|
||
|
||
(define* (sway-split-container option #:key (exec #t))
|
||
"Splits the current container, vertically or horizontally. When none is specified,
|
||
the effect of a previous split is undone.
|
||
parameters:
|
||
- option: `SWAY-SPLIT-VERTICAL`, `SWAY-SPLIT-HORIZONTAL`, `SWAY-SPLIT-NONE`, `SWAY-SPLIT-TOGGLE`"
|
||
(let* ((command (format #f "split ~a" option)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-STICKY-ENABLE "enable")
|
||
(define SWAY-STICKY-DISABLE "disable")
|
||
(define SWAY-STICKY-TOGGLE "toggle")
|
||
|
||
(define* (sway-sticky flag #:key (exec #t))
|
||
"Sticks a floating window to the current output so that it shows up on all workspaces.
|
||
parameters:
|
||
- flag: `SWAY-STICKY-ENABLE`, `SWAY-STICKY-DISABLE`, `SWAY-STICKY-TOGGLE`"
|
||
(let* ((flag (cond
|
||
((equal? #t flag) SWAY-STICKY-ENABLE)
|
||
((equal? #f flag) SWAY-STICKY-DISABLE)
|
||
(else flag)))
|
||
(command (format #f "sticky ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-SWAY-CONTAINER-TYPE-ID "id")
|
||
(define SWAY-SWAY-CONTAINER-TYPE-CONTAINER-ID "con_id")
|
||
(define SWAY-SWAY-CONTAINER-TYPE-MARK "mark")
|
||
|
||
(define* (sway-swap-container type arg #:key (exec #t))
|
||
"Swaps the position, geometry, and fullscreen status of focused container with another
|
||
target container.
|
||
parameters:
|
||
- type: `SWAY-SWAY-CONTAINER-TYPE-ID`, `SWAY-SWAY-CONTAINER-TYPE-CONTAINER-ID`,
|
||
`SWAY-SWAY-CONTAINER-TYPE-MARK`
|
||
- arg: argument passed (based on selected type)"
|
||
(let* ((command (format #f "swap container with ~a ~a" type arg)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-title-format iformat #:key (exec #t))
|
||
"Sets the format of window titles.
|
||
parameters:
|
||
- format: a string that can use some placehodlers to display windows title format
|
||
%title - The title supplied by the window
|
||
%app_id - The wayland app ID (applicable to wayland windows only)
|
||
%class - The X11 classname (applicable to xwayland windows only)
|
||
%instance - The X11 instance (applicable to xwayland windows only)
|
||
%shell - The protocol the window is using (typically xwayland or xdg_shell)"
|
||
(let* ((command (format #f "title_format ~a" iformat)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-assign-to-workspace criteria workspace #:key (exec #t))
|
||
"Assigns views matching criteria to workspace.
|
||
parameters:
|
||
- criteria: a criteria string, use (sway-criteria) to build a one
|
||
- workspace: workspace name"
|
||
(let* ((command (format #f "assign ~a workspace ~a" criteria workspace)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-assign-to-output criteria output #:key (exec #t))
|
||
"Assigns views matching criteria to output.
|
||
parameters:
|
||
- criteria: a criteria string, use (sway-criteria) to build a one
|
||
- output: output name"
|
||
(let* ((command (format #f "assign ~a output ~a" criteria output)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-bindsym key command #:key whole-window border exclude-titlebar
|
||
release locked to-code input-device no-warn
|
||
no-repeat inhibited group (exec #t))
|
||
"Binds key combo to execute the sway command command when pressed.
|
||
parameters:
|
||
- key: a string that represents the key to bind
|
||
- command: a string sway command to execute option receiving the key
|
||
- whole-window: affect the region in which the mouse bindings can be triggered.
|
||
- border: affect the region in which the mouse bindings can be triggered.
|
||
- exclude-titlebar: affect the region in which the mouse bindings can be triggered.
|
||
- release: command is executed when the key combo is released.
|
||
- locked: run command also when screen locking program is active
|
||
- to-code: the keysyms will be translated into the corresponding keycodes
|
||
this will make them layout independant
|
||
- input-device: the binding will only be executed for specified input device
|
||
- no-warn: silence sway warning when overriding a keybinding
|
||
- no-repeat: the command will not be run repeatedly when the key is held
|
||
- inhibited: keyboard shortcuts run also when inhibitor is active for the currently focused window.
|
||
- group: binding will only be available for specified group."
|
||
(let* ((options (string-join
|
||
(filter (lambda (x) (> (string-length x) 0))
|
||
(list
|
||
(if whole-window "--whole-window" "")
|
||
(if border "--border" "")
|
||
(if exclude-titlebar "--exclude-titlebar" "")
|
||
(if exclude-titlebar "--exclude-titlebar" "")
|
||
(if release "--release" "")
|
||
(if locked "--locked" "")
|
||
(if to-code "--to-code" "")
|
||
(if input-device (string-append "--input-device=" input-device) "")
|
||
(if no-warn "--no-warn" "")
|
||
(if no-repeat "--no-repeat" "")
|
||
(if inhibited "--inhibited" "")
|
||
(if group "--group" "")))
|
||
" "))
|
||
(command (format #f "bindsym ~a ~a ~a" options key command)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-bindcode code command #:key whole-window border exclude-titlebar
|
||
release locked input-device no-warn
|
||
no-repeat inhibited group (exec #t))
|
||
"for binding with key/button codes instead of key/button names.
|
||
parameters:
|
||
- key: a string that represents the key to bind
|
||
- command: a string sway command to execute option receiving the key
|
||
- whole-window: affect the region in which the mouse bindings can be triggered.
|
||
- border: affect the region in which the mouse bindings can be triggered.
|
||
- exclude-titlebar: affect the region in which the mouse bindings can be triggered.
|
||
- release: command is executed when the key combo is released.
|
||
- locked: run command also when screen locking program is active
|
||
- input-device: the binding will only be executed for specified input device
|
||
- no-warn: silence sway warning when overriding a keybinding
|
||
- no-repeat: the command will not be run repeatedly when the key is held
|
||
- inhibited: keyboard shortcuts run also when inhibitor is active for the currently focused window.
|
||
- group: binding will only be available for specified group."
|
||
(let* ((options (string-join
|
||
(filter (lambda (x) (> (string-length x) 0))
|
||
(list
|
||
(if whole-window "--whole-window" "")
|
||
(if border "--border" "")
|
||
(if exclude-titlebar "--exclude-titlebar" "")
|
||
(if exclude-titlebar "--exclude-titlebar" "")
|
||
(if release "--release" "")
|
||
(if locked "--locked" "")
|
||
(if input-device (string-append "--input-device=" input-device) "")
|
||
(if no-warn "--no-warn" "")
|
||
(if no-repeat "--no-repeat" "")
|
||
(if inhibited "--inhibited" "")
|
||
(if group "--group" "")))
|
||
" "))
|
||
(command (format #f "bindcode ~a ~a ~a" options code command)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-bindswitch switch state command #:key locked no-warn reload (exec #t))
|
||
"Binds <switch> to execute the sway command command on state changes.
|
||
parameters:
|
||
- switch: Supported switches are lid (laptop lid) and tablet (tablet mode) switches.
|
||
- state: valid values are on, off and toggle.
|
||
- command: a string sway command to execute option receiving the key
|
||
- locked: run command also when screen locking program is active
|
||
- no-warn: silence sway warning when overriding a keybinding
|
||
- reload: the binding should also be executed when the config is reloaded."
|
||
(let* ((options (string-join
|
||
(filter (lambda (x) (> (string-length x) 0))
|
||
(list
|
||
(if locked "--locked" "")
|
||
(if no-warn "--no-warn" "")
|
||
(if reload "--reload" "")))
|
||
" "))
|
||
(command (format #f "bindswitch ~a ~a:~a ~a" options switch state command)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
;; TODO
|
||
;; bindgesture [--exact] [--input-device=<device>] [--no-warn] <ges‐
|
||
;; ture>[:<fingers>][:directions] <command>
|
||
;; Binds gesture to execute the sway command command when detected.
|
||
;; Currently supports the hold, pinch or swipe gesture. Optionally can
|
||
;; be limited to bind to a certain number of fingers or, for a pinch or
|
||
;; swipe gesture, to certain directions.
|
||
|
||
;; ┌───────┬─────────┬────────────────────────────────────────────────────┐
|
||
;; │ type │ fingers │ direction │
|
||
;; ├───────┼─────────┼────────────────────────────────────────────────────┤
|
||
;; │ hold │ 1 - 5 │ none │
|
||
;; ├───────┼─────────┼────────────────────────────────────────────────────┤
|
||
;; │ swipe │ 3 - 5 │ up, down, left, right │
|
||
;; ├───────┼─────────┼────────────────────────────────────────────────────┤
|
||
;; │ pinch │ 2 - 5 │ all above + inward, outward, clockwise, counter‐ │
|
||
;; │ │ │ clockwise │
|
||
;; └───────┴─────────┴────────────────────────────────────────────────────┘
|
||
|
||
;; The fingers can be limited to any sensible number or left empty to
|
||
;; accept any finger counts. Valid directions are up, down, left and
|
||
;; right, as well as inward, outward, clockwise, counterclockwise for
|
||
;; the pinch gesture. Multiple directions can be combined by a plus.
|
||
|
||
;; If a input-device is given, the binding will only be executed for
|
||
;; that input device and will be executed instead of any binding that
|
||
;; is generic to all devices. By default, if you overwrite a binding,
|
||
;; swaynag will give you a warning. To silence this, use the --no-warn
|
||
;; flag.
|
||
|
||
;; The --exact flag can be used to ensure a binding only matches when
|
||
;; exactly all specified directions are matched and nothing more. If
|
||
;; there is matching binding with --exact, it will be preferred.
|
||
|
||
;; The priority for matching bindings is as follows: input device, then
|
||
;; exact matches followed by matches with the highest number of match‐
|
||
;; ing directions.
|
||
|
||
;; Gestures executed while the pointer is above a bar are not handled
|
||
;; by sway. See the respective documentation, e.g. bindgesture in sway-
|
||
;; bar(5).
|
||
|
||
;; Example:
|
||
;; # Allow switching between workspaces with left and right swipes
|
||
;; bindgesture swipe:right workspace prev
|
||
;; bindgesture swipe:left workspace next
|
||
|
||
;; # Allow container movements by pinching them
|
||
;; bindgesture pinch:inward+up move up
|
||
;; bindgesture pinch:inward+down move down
|
||
;; bindgesture pinch:inward+left move left
|
||
;; bindgesture pinch:inward+right move right
|
||
|
||
(define* (sway-unbindswitch switch state #:key (exec #t))
|
||
"Removes a binding for when <switch> changes to <state>.
|
||
parameters:
|
||
- switch: Supported switches are lid (laptop lid) and tablet (tablet mode) switches.
|
||
- state: valid values are on, off and toggle."
|
||
(let* ((command (format #f "unbindswitch ~a:~a" switch state)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
;; TODO
|
||
;; unbindgesture [--exact] [--input-device=<device>] <gesture>[:<fin‐
|
||
;; gers>][:directions]
|
||
;; Removes a binding for the specified gesture, fingers and directions
|
||
;; combination.
|
||
|
||
(define* (sway-unbindsym key #:key whole-window border exclude-titlebar
|
||
release locked to-code input-device (exec #t))
|
||
"Removes the binding for key combo that was previously bound with the given flags.
|
||
parameters:
|
||
- key: a string that represents the key to bind
|
||
- whole-window: affect the region in which the mouse bindings can be triggered.
|
||
- border: affect the region in which the mouse bindings can be triggered.
|
||
- exclude-titlebar: affect the region in which the mouse bindings can be triggered.
|
||
- release: command is executed when the key combo is released.
|
||
- locked: run command also when screen locking program is active
|
||
- to-code: the keysyms will be translated into the corresponding keycodes
|
||
this will make them layout independant
|
||
- input-device: the binding will only be executed for specified input device"
|
||
(let* ((options (string-join
|
||
(filter (lambda (x) (> (string-length x) 0))
|
||
(list
|
||
(if whole-window "--whole-window" "")
|
||
(if border "--border" "")
|
||
(if exclude-titlebar "--exclude-titlebar" "")
|
||
(if exclude-titlebar "--exclude-titlebar" "")
|
||
(if release "--release" "")
|
||
(if locked "--locked" "")
|
||
(if to-code "--to-code" "")
|
||
(if input-device (string-append "--input-device=" input-device) "")))
|
||
" "))
|
||
(command (format #f "unbindsym ~a ~a" options key)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-unbindcode code #:key whole-window border exclude-titlebar
|
||
release locked input-device (exec #t))
|
||
"Removes the binding for code that was previously bound with the given flags.
|
||
parameters:
|
||
- key: a string that represents the key to bind
|
||
- whole-window: affect the region in which the mouse bindings can be triggered.
|
||
- border: affect the region in which the mouse bindings can be triggered.
|
||
- exclude-titlebar: affect the region in which the mouse bindings can be triggered.
|
||
- release: command is executed when the key combo is released.
|
||
- locked: run command also when screen locking program is active
|
||
- input-device: the binding will only be executed for specified input device"
|
||
(let* ((options (string-join
|
||
(filter (lambda (x) (> (string-length x) 0))
|
||
(list
|
||
(if whole-window "--whole-window" "")
|
||
(if border "--border" "")
|
||
(if exclude-titlebar "--exclude-titlebar" "")
|
||
(if exclude-titlebar "--exclude-titlebar" "")
|
||
(if release "--release" "")
|
||
(if locked "--locked" "")
|
||
(if input-device (string-append "--input-device=" input-device) "")))
|
||
" "))
|
||
(command (format #f "unbindcode ~a ~a" options code)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-unmark identifier #:key (exec #t))
|
||
"remove identifier from the list of current marks on a window.
|
||
Parameters:
|
||
- mark: string mark."
|
||
(let* ((command (format #f "unmark ~a" identifier)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-URGENT-ENABLE "enable")
|
||
(define SWAY-URGENT-DISABLE "disable")
|
||
(define SWAY-URGENT-ALLOW "allow")
|
||
(define SWAY-URGENT-DENY "deny")
|
||
|
||
(define* (sway-urgent flag #:key (exec #t))
|
||
"Using enable or disable manually sets or unsets the window's urgent state.
|
||
Parameters:
|
||
- flag: `SWAY-URGENT-ENABLE`, `SWAY-URGENT-DISABLE`,
|
||
`SWAY-URGENT-ALLOW`, `SWAY-URGENT-DENY`"
|
||
(let* ((command (format #f "urgent ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
;; The meaning of each color is:
|
||
;; border: The border around the title bar.
|
||
;; background: The background of the title bar.
|
||
;; text: The text color of the title bar.
|
||
;; indicator: The color used to indicate where a new view will open.
|
||
;; child_border: The border around the view itself.
|
||
(define* (sway-client-background color #:key (exec #t))
|
||
"This command is ignored and is only present for i3 compatibility.
|
||
parameters:
|
||
- color: color code to be used (str)"
|
||
(let* ((command (format #f "client.background ~a" color)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-client-focused-color border-color background-color text-color
|
||
#:key indictor-color child-border-color (exec #t))
|
||
"Configures the color of window borders and title bars of the window that has focus.
|
||
parameters:
|
||
- border-color: color code to be used for border (str)
|
||
- background-color: color code to be used for background (str)
|
||
- text-color: color code to be used for text (str)
|
||
- indictor-color: color code to be used for indicator (str)
|
||
- child-border-color: color code to be used for child border (str)"
|
||
(let* ((indictor-color (or indictor-color ""))
|
||
(child-border-color (or child-border-color ""))
|
||
(command (format #f "client.focused ~a ~a ~a ~a ~a"
|
||
border-color background-color text-color
|
||
indictor-color child-border-color)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-client-focused-inactive-color border-color background-color text-color
|
||
#:key indictor-color child-border-color (exec #t))
|
||
"Configures the color of window borders and title bars of the most
|
||
recently focused view within a container which is not focused.
|
||
parameters:
|
||
- border-color: color code to be used for border (str)
|
||
- background-color: color code to be used for background (str)
|
||
- text-color: color code to be used for text (str)
|
||
- indictor-color: color code to be used for indicator (str)
|
||
- child-border-color: color code to be used for child border (str)"
|
||
(let* ((indictor-color (or indictor-color ""))
|
||
(child-border-color (or child-border-color ""))
|
||
(command (format #f "client.focused_inactive ~a ~a ~a ~a ~a"
|
||
border-color background-color text-color
|
||
indictor-color child-border-color)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-client-focused-tab-title-color border-color background-color text-color #:key (exec #t))
|
||
"Configures the color of window borders and title bars of a
|
||
view that has focused descendant container.
|
||
parameters:
|
||
- border-color: color code to be used for border (str)
|
||
- background-color: color code to be used for background (str)
|
||
- text-color: color code to be used for text (str)
|
||
- indictor-color: color code to be used for indicator (str)
|
||
- child-border-color: color code to be used for child border (str)"
|
||
(let* ((command (format #f "client.focused_tab_title ~a ~a ~a"
|
||
border-color background-color text-color)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-client-placeholder-color border-color background-color text-color
|
||
#:key indictor-color child-border-color (exec #t))
|
||
"Ignored (present for i3 compatibility).
|
||
parameters:
|
||
- border-color: color code to be used for border (str)
|
||
- background-color: color code to be used for background (str)
|
||
- text-color: color code to be used for text (str)
|
||
- indictor-color: color code to be used for indicator (str)
|
||
- child-border-color: color code to be used for child border (str)"
|
||
(let* ((indictor-color (or indictor-color ""))
|
||
(child-border-color (or child-border-color ""))
|
||
(command (format #f "client.placeholder ~a ~a ~a ~a ~a"
|
||
border-color background-color text-color
|
||
indictor-color child-border-color)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-client-unfocused-color border-color background-color text-color
|
||
#:key indictor-color child-border-color (exec #t))
|
||
"Configures the color of window borders and title bars of a
|
||
view that does not have focus.
|
||
parameters:
|
||
- border-color: color code to be used for border (str)
|
||
- background-color: color code to be used for background (str)
|
||
- text-color: color code to be used for text (str)
|
||
- indictor-color: color code to be used for indicator (str)
|
||
- child-border-color: color code to be used for child border (str)"
|
||
(let* ((indictor-color (or indictor-color ""))
|
||
(child-border-color (or child-border-color ""))
|
||
(command (format #f "client.unfocused ~a ~a ~a ~a ~a"
|
||
border-color background-color text-color
|
||
indictor-color child-border-color)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-client-urgent-color border-color background-color text-color
|
||
#:key indictor-color child-border-color (exec #t))
|
||
"Configures the color of window borders and title bars of a
|
||
view with an urgency hint..
|
||
parameters:
|
||
- border-color: color code to be used for border (str)
|
||
- background-color: color code to be used for background (str)
|
||
- text-color: color code to be used for text (str)
|
||
- indictor-color: color code to be used for indicator (str)
|
||
- child-border-color: color code to be used for child border (str)"
|
||
(let* ((indictor-color (or indictor-color ""))
|
||
(child-border-color (or child-border-color ""))
|
||
(command (format #f "client.urgent ~a ~a ~a ~a ~a"
|
||
border-color background-color text-color
|
||
indictor-color child-border-color)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-BORDER-STYLE-NONE "none")
|
||
(define SWAY-BORDER-STYLE-NORMAL "normal")
|
||
(define SWAY-BORDER-STYLE-PIXEL "pixel")
|
||
|
||
(define* (sway-default-border-style type #:key n (exec #t))
|
||
"Set default border style for new tiled windows.
|
||
parameters:
|
||
- type: `SWAY-BORDER-STYLE-NONE`, `SWAY-BORDER-STYLE-NORMAL`, `SWAY-BORDER-STYLE-PIXEL`
|
||
- n: units in case pixel is chosen (number)"
|
||
(let* ((n (or n ""))
|
||
(command (format #f "default_border ~a ~a" type n)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-default-floating-border-style type #:key n (exec #t))
|
||
"Set default border style for new tiled windows.
|
||
parameters:
|
||
- type: color code to be used for border (str)
|
||
- n: units in case pixel is chosen (number)"
|
||
(let* ((n (or n ""))
|
||
(command (format #f "default_floating_border ~a ~a" type n)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-exec command #:key (exec #t))
|
||
"Executes shell command with sh.
|
||
parameters:
|
||
- command: command to be executed (str)"
|
||
(let* ((command (format #f "exec ~a" command)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-exec-always command #:key (exec #t))
|
||
"Like exec, but the shell command will be executed again after reload.
|
||
parameters:
|
||
- command: command to be executed (str)"
|
||
(let* ((command (format #f "exec_always ~a" command)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-floating-maximum-size width height #:key (exec #t))
|
||
"Specifies the maximum size of floating windows.
|
||
parameters:
|
||
- width: target size width (number)
|
||
- height: target size height (number)"
|
||
(let* ((command (format #f "floating_maximum_size ~a ~a" width height)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-floating-minimum-size width height #:key (exec #t))
|
||
"Specifies the minimum size of floating windows.
|
||
parameters:
|
||
- width: target size width (number)
|
||
- height: target size height (number)"
|
||
(let* ((command (format #f "floating_minimum_size ~a ~a" width height)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-FLOATING-MODIFIER-TYPE-NORMAL "normal")
|
||
(define SWAY-FLOATING-MODIFIER-TYPE-INVERSE "inverse")
|
||
|
||
(define* (sway-floating-modifier modifier type #:key (exec #t))
|
||
"When the modifier key is held down, you may hold left click to move windows,
|
||
and right click to resize them.
|
||
parameters:
|
||
- modifier: the modifier key (str)
|
||
- type: `SWAY-FLOATING-MODIFIER-TYPE-NORMAL`, `SWAY-FLOATING-MODIFIER-TYPE-INVERSE`"
|
||
(let* ((command (format #f "floating_modifier ~a ~a" modifier type)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-FOCUS-FOLLOW-MOUSE-FLAG-YES "yes")
|
||
(define SWAY-FOCUS-FOLLOW-MOUSE-FLAG-NO "no")
|
||
(define SWAY-FOCUS-FOLLOW-MOUSE-FLAG-ALWAYS "always")
|
||
|
||
(define* (sway-focus-follow-mouse flag #:key (exec #t))
|
||
"If set to yes, moving your mouse over a window will focus that window.
|
||
If set to always, the window under the cursor will always be
|
||
focused, even after switching between workspaces.
|
||
parameters:
|
||
- flag: `SWAY-FOCUS-FOLLOW-MOUSE-FLAG-YES`, `SWAY-FOCUS-FOLLOW-MOUSE-FLAG-NO`,
|
||
`SWAY-FOCUS-FOLLOW-MOUSE-FLAG-ALWAYS`"
|
||
(let* ((command (format #f "focus_follows_mouse ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-SMART "smart")
|
||
(define SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-URGENT "urgent")
|
||
(define SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-FOCUS "focus")
|
||
(define SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-NONE "none")
|
||
|
||
(define* (sway-focus-on-window-activation flag #:key (exec #t))
|
||
"This option determines what to do when a client requests window activation.
|
||
parameters:
|
||
- flag: `SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-SMART`, `SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-URGENT`,
|
||
`SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-FOCUS`, `SWAY-FOCUS-ON-WINDOW-ACTIVATION-FLAG-NONE`"
|
||
(let* ((command (format #f "focus_on_window_activation ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-FOCUS-WRAPPING-FLAG-YES "yes")
|
||
(define SWAY-FOCUS-WRAPPING-FLAG-NO "no")
|
||
(define SWAY-FOCUS-WRAPPING-FLAG-FORCE "force")
|
||
(define SWAY-FOCUS-WRAPPING-FLAG-WORKSPACE "workspace")
|
||
|
||
(define* (sway-focus-wrapping flag #:key (exec #t))
|
||
"This option determines what to do when a client requests window activation.
|
||
parameters:
|
||
- flag: `SWAY-FOCUS-WRAPPING-FLAG-YES`, `SWAY-FOCUS-WRAPPING-FLAG-NO`,
|
||
`SWAY-FOCUS-WRAPPING-FLAG-FORCE`, `SWAY-FOCUS-WRAPPING-FLAG-WORKSPACE`"
|
||
(let* ((command (format #f "focus_wrapping ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-font font #:key pango (exec #t))
|
||
"Sets font to use for the title bars. To enable support for pango markup,
|
||
preface the font name with pango:
|
||
parameters:
|
||
- font: font name (str)
|
||
- pango: whether to use pango or not (boolean)"
|
||
(let* ((pango (if pango "pango:" ""))
|
||
(command (format #f "font ~a~a" pango font)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-force-display-urgency-hint timeout #:key (exec #t))
|
||
"If an application on another workspace sets an urgency hint.
|
||
parameters:
|
||
- timeout: urgency timeout (number)"
|
||
(let* ((command (format #f "force_display_urgency_hint ~a" timeout)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-titlebar-border-thickness thickness #:key (exec #t))
|
||
"Thickness of the titlebar border in pixels.
|
||
parameters:
|
||
- thickness: thickness of border (number)"
|
||
(let* ((command (format #f "titlebar_border_thickness ~a" thickness)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-titlebar-padding horizontal vertical #:key (exec #t))
|
||
"Padding of the text in the titlebar.
|
||
parameters:
|
||
- horizontal: horizontal padding (number)
|
||
- vertical: vertical padding (number)"
|
||
(let* ((command (format #f "titlebar_padding ~a ~a" horizontal vertical)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-for-window criteria commands #:key (exec #t))
|
||
"Whenever a window that matches criteria appears, run list of commands.
|
||
parameters:
|
||
- criteria: a criteria string, use (sway-criteria) to build a one
|
||
- command: list of commands to execute (string comma seperated)"
|
||
(let* ((command (format #f "for_window ~a ~a" criteria commands)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-default-gaps option amount #:key (exec #t))
|
||
"Sets default amount pixels of inner or outer gap.
|
||
parameters:
|
||
- option: `SWAY-GAPS-OPTION-INNER`, `SWAY-GAPS-OPTION-OUTER`, `SWAY-GAPS-OPTION-HORIZONTAL`,
|
||
`SWAY-GAPS-OPTION-VERTICAL`, `SWAY-GAPS-OPTION-TOP`, `SWAY-GAPS-OPTION-RIGHT`,
|
||
`SWAY-GAPS-OPTION-BOTTOM`, `SWAY-GAPS-OPTION-LEFT`
|
||
- amount: amount of gap (number)"
|
||
(let* ((command (format #f "gaps ~a ~a" option amount)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-EDGE-BORDER-TYPE-NONE "none")
|
||
(define SWAY-EDGE-BORDER-TYPE-VERTICAL "vertical")
|
||
(define SWAY-EDGE-BORDER-TYPE-HORIZONTAL "horizontal")
|
||
(define SWAY-EDGE-BORDER-TYPE-BOTH "both")
|
||
(define SWAY-EDGE-BORDER-TYPE-SMART "smart")
|
||
(define SWAY-EDGE-BORDER-TYPE-SMART-NO-GAPS "smart_no_gaps")
|
||
|
||
(define* (sway-hide-edge-borders type #:key i3 (exec #t))
|
||
"Hides window borders adjacent to the screen edges.
|
||
parameters:
|
||
- type: `SWAY-EDGE-BORDER-TYPE-NONE`, `SWAY-EDGE-BORDER-TYPE-VERTICAL`, `SWAY-EDGE-BORDER-TYPE-HORIZONTAL`,
|
||
`SWAY-EDGE-BORDER-TYPE-BOTH`, `SWAY-EDGE-BORDER-TYPE-SMART`, `SWAY-EDGE-BORDER-TYPE-SMART-NO-GAPS`
|
||
- i3: enables i3-compatible behavior to hide the title bar on tabbed and stacked containers with one child"
|
||
(let* ((i3 (if i3 "--i3" ""))
|
||
(command (format #f "hide_edge_borders ~a ~a" i3 type)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-input device subcommands #:key (exec #t))
|
||
"For details on input subcommands, see sway-input(5).
|
||
parameters:
|
||
- device: the name of the target device
|
||
- subcommands: list of commands to execute (string)"
|
||
(let* ((command (format #f "input ~a ~a" device subcommands)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-seat seat subcommands #:key (exec #t))
|
||
"For details on input subcommands, see sway-input(5).
|
||
parameters:
|
||
- seat: the name of the seat device
|
||
- subcommands: list of commands to execute (string)"
|
||
(let* ((command (format #f "seat ~a ~a" seat subcommands)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-kill #:key (exec #t))
|
||
"Kills (closes) the currently focused container and all of its children."
|
||
(let* ((command (format #f "kill")))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-SMART-BORDERS-ON "on")
|
||
(define SWAY-SMART-BORDERS-OFF "off")
|
||
(define SWAY-SMART-BORDERS-NO-GAPS "no_gaps")
|
||
|
||
(define* (sway-smart-borders flag #:key (exec #t))
|
||
"If smart_borders are on, borders will only be enabled if the
|
||
workspace has more than one visible child.
|
||
parameters:
|
||
- flag: `SWAY-SMART-BORDERS-ON`, `SWAY-SMART-BORDERS-OFF`, `SWAY-SMART-BORDERS-NO-GAPS`"
|
||
(let* ((flag (cond
|
||
((equal? #t flag) SWAY-SMART-BORDERS-ON)
|
||
((equal? #f flag) SWAY-SMART-BORDERS-OFF)
|
||
(else flag)))
|
||
(command (format #f "smart_borders ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-SMART-GAPS-ON "on")
|
||
(define SWAY-SMART-GAPS-OFF "off")
|
||
(define SWAY-SMART-GAPS-TOGGLE "toggle")
|
||
(define SWAY-SMART-GAPS-INVERSE-OUTER "inverse_outer")
|
||
|
||
(define* (sway-smart-gaps flag #:key (exec #t))
|
||
"If smart_gaps are on gaps will only be enabled if a
|
||
workspace has more than one child.
|
||
parameters:
|
||
- flag: `SWAY-SMART-GAPS-ON`, `SWAY-SMART-GAPS-OFF`,
|
||
`SWAY-SMART-GAPS-TOGGLE`, `SWAY-SMART-GAPS-INVERSE-OUTER`"
|
||
(let* ((flag (cond
|
||
((equal? #t flag) SWAY-SMART-GAPS-ON)
|
||
((equal? #f flag) SWAY-SMART-GAPS-OFF)
|
||
(else flag)))
|
||
(command (format #f "smart_gaps ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-mark identifier #:key add toggle (exec #t))
|
||
"Marks are arbitrary labels that can be used to identify certain
|
||
windows and then jump to them at a later time.
|
||
parameters:
|
||
- add: add identifier to the list of current marks for that window.
|
||
- toggle: remove identifier if it is already marked.
|
||
- identifier: label that can be used to identify that window."
|
||
(let* ((command (format #f "mark ~a ~a ~a"
|
||
(if add "--add" "")
|
||
(if toggle "--toggle" "")
|
||
identifier)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-mode mode #:key (exec #t))
|
||
"Switches to the specified mode. The default mode is default.
|
||
parameters:
|
||
- mode: name of the mode (str)"
|
||
(let* ((command (format #f "mode \"~a\"" mode)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-mode-subcommand mode subcommand #:key (exec #t))
|
||
"The only valid mode-subcommands are bindsym, bindcode, bindswitch, and set.
|
||
parameters:
|
||
- mode: name of the mode (str)
|
||
- subcommand: list of subcommands (str)"
|
||
(let* ((command (format #f "mode \"~a\" ~a" mode subcommand)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-MOUSE-WARPING-OUTPUT "output")
|
||
(define SWAY-MOUSE-WARPING-CONTAINER "container")
|
||
(define SWAY-MOUSE-WARPING-NONE "none")
|
||
|
||
(define* (sway-mouse-warping mode #:key (exec #t))
|
||
"If output is specified, the mouse will be moved to new outputs as you move focus between them.
|
||
If container is specified, the mouse will be moved to the middle of the container on switch.
|
||
parameters:
|
||
- mode: `SWAY-MOUSE-WARPING-OUTPUT`, `SWAY-MOUSE-WARPING-CONTAINER`, `SWAY-MOUSE-WARPING-NONE`"
|
||
(let* ((command (format #f "mouse_warping ~a" mode)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-no-focus criteria #:key (exec #t))
|
||
"Prevents windows matching <criteria> from being focused automatically when they're created.
|
||
parameters:
|
||
- criteria: a criteria string, use (sway-criteria) to build a one"
|
||
(let* ((command (format #f "no_focus ~a" criteria)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-output output subcommands #:key (exec #t))
|
||
"For details on output subcommands, see sway-output(5).
|
||
parameters:
|
||
- output: name of the output (str)
|
||
- subcommand: list of subcommands (str)"
|
||
(let* ((command (format #f "output ~a ~a" output subcommands)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-POPUP-TYPE-OUTPUTSMART "outputsmart")
|
||
(define SWAY-POPUP-TYPE-IGNORE "ignore")
|
||
(define SWAY-POPUP-TYPE-LEAVE-FULLSCREEN "leave_fullscreen")
|
||
|
||
(define* (sway-popup-during-fullscreen type #:key (exec #t))
|
||
"Determines what to do when a fullscreen view opens a dialog.
|
||
parameters:
|
||
- type: `SWAY-POPUP-TYPE-OUTPUTSMART`, `SWAY-POPUP-TYPE-IGNORE`, `SWAY-POPUP-TYPE-LEAVE-FULLSCREEN`"
|
||
(let* ((command (format #f "popup_during_fullscreen ~a" type)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-PRIMARY-SELECTION-ENABLED "enabled")
|
||
(define SWAY-PRIMARY-SELECTION-DISABLED "disabled")
|
||
|
||
(define* (sway-primary-selection type #:key (exec #t))
|
||
"Enable or disable the primary selection clipboard. May only be configured at launch. Default is enabled.
|
||
parameters:
|
||
- type: `SWAY-PRIMARY-SELECTION-ENABLED`, `SWAY-PRIMARY-SELECTION-DISABLED`"
|
||
(let* ((type (cond
|
||
((equal? type #t) SWAY-PRIMARY-SELECTION-ENABLED)
|
||
((equal? type #f) SWAY-PRIMARY-SELECTION-DISABLED)
|
||
(else type)))
|
||
(command (format #f "primary_selection ~a" type)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-SHOW-MARKS-YES "yes")
|
||
(define SWAY-SHOW-MARKS-NO "no")
|
||
|
||
(define* (sway-show-marks flag #:key (exec #t))
|
||
"If show_marks is yes, marks will be displayed in the window borders.
|
||
parameters:
|
||
- flag: `SWAY-SHOW-MARKS-YES`, `SWAY-SHOW-MARKS-NO`"
|
||
(let* ((flag (cond
|
||
((equal? flag #t) SWAY-SHOW-MARKS-YES)
|
||
((equal? flag #f) SWAY-SHOW-MARKS-NO)
|
||
(else flag)))
|
||
(command (format #f "show_marks ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-OPACITY-SET "set")
|
||
(define SWAY-OPACITY-PLUS "plus")
|
||
(define SWAY-OPACITY-MINUS "minus")
|
||
|
||
(define* (sway-opacity type value #:key (exec #t))
|
||
"Adjusts the opacity of the window between 0 (completely transparent) and 1 (completely opaque)
|
||
parameters:
|
||
- type: `SWAY-OPACITY-SET`, `SWAY-OPACITY-PLUS`, `SWAY-OPACITY-MINUS`
|
||
- value: opacity value (number) should be between 0 and 1"
|
||
(let* ((command (format #f "opacity ~a ~a" type value)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-TILING-DRAG-ENABLE "enable")
|
||
(define SWAY-TILING-DRAG-DISABLE "disable")
|
||
(define SWAY-TILING-DRAG-TOGGLE "toggle")
|
||
|
||
(define* (sway-tiling-drag flag #:key (exec #t))
|
||
"Sets whether or not tiling containers can be dragged with the mouse.
|
||
parameters:
|
||
- flag: `SWAY-TILING-DRAG-ENABLE`, `SWAY-TILING-DRAG-DISABLE`, `SWAY-TILING-DRAG-TOGGLE`"
|
||
(let* ((flag (cond
|
||
((equal? flag #t) SWAY-TILING-DRAG-ENABLE)
|
||
((equal? flag #f) SWAY-TILING-DRAG-DISABLE)
|
||
(else flag)))
|
||
(command (format #f "tiling_drag ~a" flag)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-tiling-drag-threshold threshold #:key (exec #t))
|
||
"Sets whether or not tiling containers can be dragged with the mouse.
|
||
parameters:
|
||
- threshold: threshold value (number)"
|
||
(let* ((command (format #f "tiling_drag_threshold ~a" threshold)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-TILING-ALIGN-LEFT "left")
|
||
(define SWAY-TILING-ALIGN-CENTER "center")
|
||
(define SWAY-TILING-ALIGN-RIGHT "right")
|
||
|
||
(define* (sway-tiling-align type #:key (exec #t))
|
||
"Sets the title alignment.
|
||
parameters:
|
||
- type: `SWAY-TILING-ALIGN-LEFT`, `SWAY-TILING-ALIGN-CENTER`, `SWAY-TILING-ALIGN-RIGHT`"
|
||
(let* ((command (format #f "title_align ~a" type)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-switch-workspace-id id #:key auto-back-and-forth (exec #t))
|
||
"switch to the workspace with the provided id.
|
||
parameters:
|
||
- id: workspace id (number)
|
||
- auto-back-and-forth: enable/disable auto back and forth"
|
||
(let* ((back-forth (if auto-back-and-forth "--no-auto-back-and-forth" ""))
|
||
(command (format #f "workspace number ~a ~a" back-forth id)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-switch-workspace workspace #:key auto-back-and-forth (exec #t))
|
||
"switch to the workspace with the provided name.
|
||
parameters:
|
||
- workspace: workspace name (str)
|
||
- auto-back-and-forth: enable/disable auto back and forth"
|
||
(let* ((back-forth (if auto-back-and-forth "--no-auto-back-and-forth" ""))
|
||
(command (format #f "workspace ~a ~a" back-forth workspace)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-switch-workspace-on-output workspace output #:key (exec #t))
|
||
"assigns workspace to output.
|
||
parameters:
|
||
- workspace: workspace name (str)
|
||
- output: output name"
|
||
(let* ((command (format #f "workspace ~a output ~a" workspace output)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define SWAY-WORKSPACE-AUTO-BACK-AND-FORTH-OPTION-YES "yes")
|
||
(define SWAY-WORKSPACE-AUTO-BACK-AND-FORTH-OPTION-NO "no")
|
||
|
||
(define* (sway-workspace-auto-back-and-forth option #:key (exec #t))
|
||
"When yes, repeating a workspace switch command will switch back to the prior workspace.
|
||
parameters:
|
||
- option: `SWAY-WORKSPACE-AUTO-BACK-AND-FORTH-OPTION-YES`, `SWAY-WORKSPACE-AUTO-BACK-AND-FORTH-OPTION-NO`"
|
||
(let* ((option (cond
|
||
((equal? option #t) SWAY-WORKSPACE-AUTO-BACK-AND-FORTH-OPTION-YES)
|
||
((equal? option #f) SWAY-WORKSPACE-AUTO-BACK-AND-FORTH-OPTION-NO)
|
||
(else option)))
|
||
(command (format #f "workspace_auto_back_and_forth ~a" option)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-workspace-gaps workspace option amount #:key (exec #t))
|
||
"Specifies that workspace name should have the given gaps settings when it is created.
|
||
This command does not affect existing workspaces. To alter the gaps of an existing workspace,
|
||
use the `sway-gaps` command.
|
||
parameters:
|
||
- workspace: workspace name (str)
|
||
- option: `SWAY-GAPS-OPTION-INNER`, `SWAY-GAPS-OPTION-OUTER`, `SWAY-GAPS-OPTION-HORIZONTAL`,
|
||
`SWAY-GAPS-OPTION-VERTICAL`, `SWAY-GAPS-OPTION-TOP`, `SWAY-GAPS-OPTION-RIGHT`,
|
||
`SWAY-GAPS-OPTION-BOTTOM`, `SWAY-GAPS-OPTION-LEFT`
|
||
- amount: the amount of gap (number)"
|
||
(let* ((command (format #f "workspace ~a ~a ~a" workspace option amount)))
|
||
(if exec (sway-dispatch-command command)
|
||
command)))
|
||
|
||
(define* (sway-criteria #:key app-id class con-id con-mark
|
||
floating id instance pid shell tiling title urgent
|
||
window-role window-type workspace (exec #t))
|
||
"Generate a string that contains one or more (space separated) attribute/value pairs."
|
||
(string-append
|
||
"["
|
||
(string-join
|
||
(filter (lambda (x) (and x (> (string-length x) 0)))
|
||
(list
|
||
(if class (format #f "class=\"~a\"" class) "")
|
||
(if con-id (format #f "con_id=~a" con-id) "")
|
||
(if con-mark (format #f "con_mark=\"~a\"" con-mark) "")
|
||
(if floating (format #f "floating=\"~a\"" floating) "")
|
||
(if id (format #f "id=~a" id) "")
|
||
(if instance (format #f "instance=\"~a\"" instance) "")
|
||
(if pid (format #f "pid=~a" pid) "")
|
||
(if shell (format #f "shell=\"~a\"" shell) "")
|
||
(if tiling (format #f "tiling=\"~a\"" tiling) "")
|
||
(if title (format #f "title=\"~a\"" title) "")
|
||
(if urgent (format #f "urgent=\"~a\"" urgent) "")
|
||
(if window-role (format #f "window_role=\"~a\"" window-role) "")
|
||
(if window-type (format #f "window_type=\"~a\"" window-type) "")
|
||
(if workspace (format #f "workspace=\"~a\"" workspace) "")))
|
||
" ")
|
||
"]"))
|