Class: Tmuxinator::Window

Inherits:
Object
  • Object
show all
Includes:
Util
Defined in:
lib/tmuxinator/window.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Util

#exit!, #yes_no

Constructor Details

#initialize(window_yaml, index, project) ⇒ Window

Returns a new instance of Window.



9
10
11
12
13
14
15
16
17
# File 'lib/tmuxinator/window.rb', line 9

def initialize(window_yaml, index, project)
  first_key = window_yaml.keys.first

  @name = first_key.to_s.shellescape unless first_key.nil?
  @yaml = window_yaml.values.first
  @project = project
  @index = index
  @commands = build_commands(tmux_window_command_prefix, @yaml)
end

Instance Attribute Details

#commandsObject (readonly)

Returns the value of attribute commands.



7
8
9
# File 'lib/tmuxinator/window.rb', line 7

def commands
  @commands
end

#indexObject (readonly)

Returns the value of attribute index.



7
8
9
# File 'lib/tmuxinator/window.rb', line 7

def index
  @index
end

#nameObject (readonly)

Returns the value of attribute name.



7
8
9
# File 'lib/tmuxinator/window.rb', line 7

def name
  @name
end

#projectObject (readonly)

Returns the value of attribute project.



7
8
9
# File 'lib/tmuxinator/window.rb', line 7

def project
  @project
end

Instance Method Details

#_hashed?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'lib/tmuxinator/window.rb', line 23

def _hashed?
  @yaml.is_a?(Hash)
end

#_project_rootObject



47
48
49
# File 'lib/tmuxinator/window.rb', line 47

def _project_root
  project.root if project.root?
end

#_yaml_rootObject



43
44
45
# File 'lib/tmuxinator/window.rb', line 43

def _yaml_root
  File.expand_path(yaml["root"]).shellescape if yaml["root"]
end

#build_commands(_prefix, command_yml) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/tmuxinator/window.rb', line 68

def build_commands(_prefix, command_yml)
  if command_yml.is_a?(Array)
    command_yml.map do |command|
      "#{tmux_window_command_prefix} #{command.shellescape} C-m" if command
    end.compact
  elsif command_yml.is_a?(String) && !command_yml.empty?
    ["#{tmux_window_command_prefix} #{command_yml.shellescape} C-m"]
  else
    []
  end
end

#build_panes(panes_yml) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/tmuxinator/window.rb', line 51

def build_panes(panes_yml)
  return if panes_yml.nil?

  Array(panes_yml).map.with_index do |pane_yml, index|
    commands, title = case pane_yml
                      when Hash
                        [pane_yml.values.first, pane_yml.keys.first]
                      when Array
                        [pane_yml, nil]
                      else
                        [pane_yml, nil]
                      end

    Tmuxinator::Pane.new(index, project, self, *commands, title: title)
  end.flatten
end

#layoutObject



31
32
33
# File 'lib/tmuxinator/window.rb', line 31

def layout
  yaml["layout"] ? yaml["layout"].shellescape : nil
end

#panesObject



19
20
21
# File 'lib/tmuxinator/window.rb', line 19

def panes
  build_panes(yaml["panes"]) || []
end

#panes?Boolean

Returns:

  • (Boolean)


94
95
96
# File 'lib/tmuxinator/window.rb', line 94

def panes?
  panes.any?
end

#preObject



80
81
82
83
84
85
86
87
88
# File 'lib/tmuxinator/window.rb', line 80

def pre
  _pre = yaml["pre"]

  if _pre.is_a?(Array)
    _pre.join(" && ")
  elsif _pre.is_a?(String)
    _pre
  end
end

#rootObject



39
40
41
# File 'lib/tmuxinator/window.rb', line 39

def root
  _yaml_root || _project_root
end

#root?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/tmuxinator/window.rb', line 90

def root?
  !root.nil?
end

#synchronizeObject



35
36
37
# File 'lib/tmuxinator/window.rb', line 35

def synchronize
  yaml["synchronize"] || false
end

#synchronize_after?Boolean

Returns:

  • (Boolean)


141
142
143
# File 'lib/tmuxinator/window.rb', line 141

def synchronize_after?
  synchronize == "after"
end

#synchronize_before?Boolean

Returns:

  • (Boolean)


137
138
139
# File 'lib/tmuxinator/window.rb', line 137

def synchronize_before?
  synchronize == true || synchronize == "before"
end

#tmux_layout_commandObject



129
130
131
# File 'lib/tmuxinator/window.rb', line 129

def tmux_layout_command
  "#{project.tmux} select-layout -t #{tmux_window_target} #{layout}"
end

#tmux_new_window_commandObject



116
117
118
119
# File 'lib/tmuxinator/window.rb', line 116

def tmux_new_window_command
  path = root? ? "#{Tmuxinator::Config.default_path_option} #{root}" : nil
  "#{project.tmux} new-window #{path} -t #{tmux_window_target} #{tmux_window_name_option}"
end

#tmux_pre_window_commandObject



102
103
104
105
106
# File 'lib/tmuxinator/window.rb', line 102

def tmux_pre_window_command
  return unless project.pre_window

  "#{project.tmux} send-keys -t #{tmux_window_target} #{project.pre_window.shellescape} C-m"
end

#tmux_select_first_paneObject



133
134
135
# File 'lib/tmuxinator/window.rb', line 133

def tmux_select_first_pane
  "#{project.tmux} select-pane -t #{tmux_window_target}.#{panes.first.index + project.pane_base_index}"
end

#tmux_synchronize_panesObject



125
126
127
# File 'lib/tmuxinator/window.rb', line 125

def tmux_synchronize_panes
  "#{project.tmux} set-window-option -t #{tmux_window_target} synchronize-panes on"
end

#tmux_tiled_layout_commandObject



121
122
123
# File 'lib/tmuxinator/window.rb', line 121

def tmux_tiled_layout_command
  "#{project.tmux} select-layout -t #{tmux_window_target} tiled"
end

#tmux_window_command_prefixObject



108
109
110
# File 'lib/tmuxinator/window.rb', line 108

def tmux_window_command_prefix
  "#{project.tmux} send-keys -t #{project.name}:#{index + project.base_index}"
end

#tmux_window_name_optionObject



112
113
114
# File 'lib/tmuxinator/window.rb', line 112

def tmux_window_name_option
  name ? "-n #{name}" : ""
end

#tmux_window_targetObject



98
99
100
# File 'lib/tmuxinator/window.rb', line 98

def tmux_window_target
  "#{project.name}:#{index + project.base_index}"
end

#yamlObject



27
28
29
# File 'lib/tmuxinator/window.rb', line 27

def yaml
  _hashed? ? @yaml : {}
end