Current section
Files
Jump to
Current section
Files
lib/yemux.ex
defmodule Yemux do
alias Yemux.{Error, Partial, Session}
@moduledoc """
## Synopsis
#
Yemux creates a string of shell commands that create or connect to a TMUX session.
It exposes a single function `main` which takes a symbol as first parameter which
allows to dispatch to the according functions and a list of additional parameters.
## Subcommands
### `:yemux`
"""
def main(dispatch, args)
def main(:yemux, args) do
_yemux(args)
end
def main(:partial, args) do
case _partial(args) do
[_ | _] = list -> list |> List.flatten() |> Enum.join("\n")
string -> string
end
end
defp _partial([partial_name, partial_filename]) do
case YamlElixir.read_from_file(partial_filename) do
{:ok, partials} -> _partial_from_hash(partial_name, partials, partial_filename)
{:error, %{message: message}} -> raise Error.BadYamlFile, message
end
end
def _partial_from_hash(partial_name, partials, partial_filename) do
case Partial.render_partial(partial_name, partials) do
{:ok, output} ->
output
{:error, message} ->
raise Error.BadPartialDefinition, Enum.join([message, partial_filename], " ")
end
end
defp _yemux(args)
defp _yemux([yml_filename, cfg_filename]) do
case YamlElixir.read_from_file(cfg_filename) do
{:ok, config} -> _yemux([yml_filename], config)
{:error, %{message: message}} -> raise Error.BadYamlFile, message
end
end
defp _yemux([filename], config \\ nil) do
case YamlElixir.read_from_file(filename) do
{:ok, yaml} -> _yemux_create(filename, yaml, config)
{:error, %{message: message}} -> raise Error.BadYamlFile, message
end
end
defp _yemux_create(filename, yaml, config) do
case Session.new(filename, yaml, config) |> Session.create() do
{:ok, list} -> list |> List.flatten() |> Enum.join("\n")
{:error, message} -> raise Error.BadSessionSpec, message
end
end
end
# SPDX-License-Identifier: Apache-2.0