Files

Guard::Notifier::Tmux

Changes the color of the Tmux status bar and optionally shows messages in the status bar.

@example Add the `:tmux` notifier to your `Guardfile`

notification :tmux

@example Enable text messages

notification :tmux, display_message: true

@example Customize the tmux status colored for notifications

notification :tmux, color_location: 'status-right-bg'

Constants

DEFAULTS

Default options for the tmux notifications.

Public Class Methods

_register!(opts) click to toggle source

@private

Detects if a TMUX environment is available and if not, displays an error message unless `opts` is true.

@return [Boolean] whether or not a TMUX environment is available

# File lib/guard/notifiers/tmux.rb, line 59
def self._register!(opts)
  if _tmux_environment_available?(opts)
    true
  else
    unless opts[:silent]
      ::Guard::UI.error 'The :tmux notifier runs only on when Guard is executed inside of a tmux session.'
    end
    false
  end
end
_tmux_environment_available?(opts) click to toggle source

@private

@return [Boolean] whether or not a TMUX environment is available

# File lib/guard/notifiers/tmux.rb, line 48
def self._tmux_environment_available?(opts)
  !ENV[opts.fetch(:tmux_environment, DEFAULTS[:tmux_environment])].nil?
end
available?(opts = {}) click to toggle source
# File lib/guard/notifiers/tmux.rb, line 40
def self.available?(opts = {})
  super and _register!(opts)
end
options_store() click to toggle source
# File lib/guard/notifiers/tmux.rb, line 238
def self.options_store
  @options_store ||= {}
end
turn_off() click to toggle source

Notification stopping. Restore the previous Tmux state if available (existing options are restored, new options are unset) and unquiet the Tmux output.

# File lib/guard/notifiers/tmux.rb, line 223
def self.turn_off
  if @options_stored
    @options_store.each do |client, options|
      options.each do |key, value|
        if value
          `#{ DEFAULTS[:client] } set -t #{ client } -q #{ key } #{ value }`
        else
          `#{ DEFAULTS[:client] } set -t #{ client } -q -u #{ key }`
        end
      end
    end
    _reset_options_store
  end
end
turn_on() click to toggle source

Notification starting, save the current Tmux settings and quiet the Tmux output.

# File lib/guard/notifiers/tmux.rb, line 203
def self.turn_on
  unless @options_stored
    _reset_options_store

    _clients.each do |client|
      options_store[client] ||= {}
      `#{ DEFAULTS[:client] } show -t #{ client }`.each_line do |line|
        option, _, setting = line.chomp.partition(' ')
        @options_store[client][option] = setting
      end
    end

    @options_stored = true
  end
end

Public Instance Methods

display_message(type, title, message, opts = {}) click to toggle source

Displays a message in the status bar of tmux.

@param [String] type the notification type. Either ‘success’,

'pending', 'failed' or 'notify'

@param [String] title the notification title @param [String] message the notification message body @param [Hash] options additional notification library options @option options [Integer] timeout the amount of seconds to show the

message in the status bar

@option options [String] success_message_format a string to use as

formatter for the success message.

@option options [String] failed_message_format a string to use as

formatter for the failed message.

@option options [String] pending_message_format a string to use as

formatter for the pending message.

@option options [String] default_message_format a string to use as

formatter when no format per type is defined.

@option options [String] success_message_color the success notification

foreground color name.

@option options [String] failed_message_color the failed notification

foreground color name.

@option options [String] pending_message_color the pending notification

foreground color name.

@option options [String] default_message_color a notification

foreground color to use when no color per type is defined.

@option options [String] line_separator a string to use instead of a

line-break.
# File lib/guard/notifiers/tmux.rb, line 171
def display_message(type, title, message, opts = {})
  message_format = opts.fetch("#{ type }_message_format".to_sym, opts.fetch(:default_message_format, DEFAULTS[:default_message_format]))
  message_color = opts.fetch("#{ type }_message_color".to_sym, opts.fetch(:default_message_color, DEFAULTS[:default_message_color]))
  display_time = opts.fetch(:timeout, DEFAULTS[:timeout])
  separator = opts.fetch(:line_separator, DEFAULTS[:line_separator])

  color = tmux_color type, opts
  formatted_message = message.split("\n").join(separator)
  display_message = message_format % [title, formatted_message]

  _run_client "set", "#{_quiet_option}display-time #{ display_time * 1000 }"
  _run_client "set", "#{_quiet_option}message-fg #{ message_color }"
  _run_client "set", "#{_quiet_option}message-bg #{ color }"
  _run_client "display-message", "'#{ display_message }'"
end
display_title(type, title, message, opts = {}) click to toggle source

Displays a message in the title bar of the terminal.

@param [String] title the notification title @param [String] message the notification message body @param [Hash] options additional notification library options @option options [String] success_message_format a string to use as

formatter for the success message.

@option options [String] failed_message_format a string to use as

formatter for the failed message.

@option options [String] pending_message_format a string to use as

formatter for the pending message.

@option options [String] default_message_format a string to use as

formatter when no format per type is defined.
# File lib/guard/notifiers/tmux.rb, line 135
def display_title(type, title, message, opts = {})
  title_format   = opts.fetch("#{ type }_title_format".to_sym, opts.fetch(:default_title_format, DEFAULTS[:default_title_format]))
  teaser_message = message.split("\n").first
  display_title  = title_format % [title, teaser_message]

  _run_client "set-option", "#{_quiet_option}set-titles-string '#{ display_title }'"
end
notify(message, opts = {}) click to toggle source

Shows a system notification.

By default, the Tmux notifier only makes use of a color based notification, changing the background color of the `color_location` to the color defined in either the `success`, `failed`, `pending` or `default`, depending on the notification type.

You may enable an extra explicit message by setting `display_message` to true, and may further disable the colorization by setting `change_color` to false.

@param [String] title the notification title @param [Hash] opts additional notification library options @option opts [String] type the notification type. Either ‘success’,

'pending', 'failed' or 'notify'

@option opts [String] message the notification message body @option opts [String] image the path to the notification image @option opts [Boolean] change_color whether to show a color

notification

@option opts [String,Array] color_location the location where to draw the

color notification

@option opts [Boolean] display_message whether to display a message

or not

@option opts [Boolean] display_on_all_clients whether to display a

message on all tmux clients or not
# File lib/guard/notifiers/tmux.rb, line 96
def notify(message, opts = {})
  super
  opts.delete(:image)

  if opts.fetch(:change_color, DEFAULTS[:change_color])
    color_locations = Array(opts.fetch(:color_location, DEFAULTS[:color_location]))
    color = tmux_color(opts[:type], opts)

    color_locations.each do |color_location|
      _run_client "set","#{_quiet_option}#{ color_location } #{ color }"
    end
  end

  type  = opts.delete(:type).to_s
  title = opts.delete(:title)

  if opts.fetch(:display_title, DEFAULTS[:display_title])
    display_title(type, title, message, opts)
  end

  if opts.fetch(:display_message, DEFAULTS[:display_message])
    display_message(type, title, message, opts)
  end
end
tmux_color(type, opts = {}) click to toggle source

Get the Tmux color for the notification type. You can configure your own color by overwriting the defaults.

@param [String] type the notification type @return [String] the name of the emacs color

# File lib/guard/notifiers/tmux.rb, line 193
def tmux_color(type, opts = {})
  type = type.to_sym
  type = :default unless [:success, :failed, :pending].include?(type)

  opts.fetch(type, DEFAULTS[type])
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.