Nothing
# layout ------------------------------------------------------------------
#' Change layout of a tmux window
#'
#' Functions to get and set the layout of a tmux window.
#'
#' @param target A tmuxr_window. If `NULL`, use currently active window.
#' @param value A string. Layout definition or name of preset.
#' @param width,height An integer. Width or height of the main pane.
#' @param reverse A logical. If `TRUE` the direction in which rotate the window
#' is reversed. Default: `FALSE`.
#'
#' @return A string. Layout definition.
#'
#' @export
layout <- function(target = NULL) {
prop(target, "window_layout")
}
#' @rdname layout
#' @export
`layout<-` <- function(target, value) {
set_layout(target, value)
}
#' @rdname layout
#' @export
set_layout <- function(target = NULL, value) {
flags <- c()
if (!is.null(target)) flags <- c(flags, "-t", get_target(target))
flags <- c(flags, value)
tmux_command("select-layout", flags)
invisible(target)
}
#' @rdname layout
#' @export
layout_even_horizontal <- function(target = NULL) {
set_layout(target, "even-horizontal")
}
#' @rdname layout
#' @export
layout_even_vertical <- function(target = NULL) {
set_layout(target, "even-vertical")
}
#' @rdname layout
#' @export
layout_main_horizontal <- function(target = NULL, height = NULL) {
if (!is.null(height)) set_option(target, "main-pane-height", height)
set_layout(target, "main-horizontal")
}
#' @rdname layout
#' @export
layout_main_vertical <- function(target = NULL, width = NULL) {
if (!is.null(width)) set_option(target, "main-pane-width", width)
set_layout(target, "main-vertical")
}
#' @rdname layout
#' @export
layout_tiled <- function(target = NULL) {
set_layout(target, "tiled")
}
#' @rdname layout
#' @export
layout_next <- function(target = NULL) {
set_layout(target, "-n")
}
#' @rdname layout
#' @export
layout_previous <- function(target = NULL) {
set_layout(target, "-p")
}
#' @rdname layout
#' @export
layout_even <- function(target = NULL) {
set_layout(target, "-E")
}
#' @rdname layout
#' @export
layout_undo <- function(target = NULL) {
set_layout(target, "-o")
}
#' @rdname layout
#' @export
layout_rotate <- function(target = NULL, reverse = FALSE) {
if (reverse) {
flags <- "-U"
} else {
flags <- "-D"
}
if (!is.null(target)) flags <- c(flags, "-t", get_target(target))
tmux_command("rotate-window", flags)
invisible(target)
}
# style -------------------------------------------------------------------
#' Style of a tmux window or pane
#'
#' Functions to get and set the layout of a tmux window or pane.
#'
#' @param target A tmuxr_window or tmuxr_pane.
#' @param value A named list. Style definition.
#' @export
style <- function(target) {
UseMethod("style")
}
#' @export
style.tmuxr_window <- function(target) {
strpstyle(prop(target, "window-style"))
}
#' @export
style.tmuxr_pane <- function(target) {
strpstyle(prop(target, "window-style"))
}
#' @rdname style
#' @export
`style<-` <- function(target, value) {
UseMethod("style<-")
}
#' @export
`style<-.tmuxr_window` <- function(target, value) {
set_option(target, "window-style", strfstyle(value), type = "window")
}
#' @export
`style<-.tmuxr_pane` <- function(target, value) {
set_option(target, "window-style", strfstyle(value), type = "pane")
}
#' @rdname style
#' @export
set_style <- function(target, value) {
style(target) <- value
}
#' Format and parse style strings
#'
#' Functions to convert a style string to a named list and back.
#'
#' @param ... Named strings and logicals or one named list.
#' Colors and attributes.
#' @param x A string.
#'
#' @return A string or named list.
#'
#' @examples
#' \dontrun{
#' strfstyle(fg = "red", bg = "#00ff00", blink = TRUE, align = FALSE)
#' strpstyle("fg=red,bg=#00ff00,blink,noalign")
#' }
#' @name style_convert
NULL
#' @rdname style_convert
#' @export
strfstyle <- function(...) {
args <- list(...)
styles <- c()
if (length(args) == 1 && is.list(args[[1]]) && is.null(names(args))) {
args <- args[[1]]
}
for (k in names(args)) {
v <- args[[k]]
if (is.logical(v)) {
if (v) {
styles <- c(styles, k)
} else {
styles <- c(styles, paste0("no", k))
}
} else {
styles <- c(styles, paste0(k, "=", v))
}
}
if (length(styles) > 0) {
paste(styles, collapse = ",")
} else {
"default"
}
}
#' @rdname style_convert
#' @export
strpstyle <- function(x) {
style <- list()
if (x %in% c("", "default")) return(list())
parts <- unlist(strsplit(x, ",", fixed = TRUE))
for (part in parts) {
kv <- unlist(strsplit(part, "=", fixed = TRUE))
if (length(kv) == 1) {
if (substring(kv, 1, 2) == "no") {
style[substring(kv, 3)] = FALSE
} else {
style[kv] = TRUE
}
} else {
style[kv[1]] = kv[2]
}
}
style
}
#' Swap two tmux windows or panes
#'
#' @param from A tmuxr_window or tmuxr_pane.
#' @param to A tmuxr_window or tmuxr_pane.
#' @param reverse A logical.
#' @param select A logical. If `FALSE`, do not select the new window or pane.
#' Default: `TRUE`.
#'
#' @export
swap_pane <- function(from = NULL, to = NULL, reverse = FALSE, select = TRUE) {
flags <- c()
if (!select) flags <- c(flags, "-d")
if (is.null(to)) {
if (reverse) {
flags <- c(flags, "-U")
} else {
flags <- c(flags, "-D")
}
} else {
flags <- c(flags, "-s", get_target(to))
}
if (!is.null(from)) flags <- c(flags, "-t", get_target(from))
tmux_command("swap-pane", flags)
invisible(to)
}
#' @rdname swap_pane
#' @export
swap_window <- function(from = NULL, to = NULL, select = TRUE) {
flags <- c()
if (!select) flags <- c(flags, "-d")
if (!is.null(to)) flags <- c(flags, "-s", get_target(to))
if (!is.null(from)) flags <- c(flags, "-t", get_target(from))
tmux_command("swap-window", flags)
invisible(to)
}
# tmux_options(named list)
# tmux_options(): return named list of all options
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.