lib/fusuma/plugin/wmctrl/workspace.rb in fusuma-plugin-wmctrl-1.0.1 vs lib/fusuma/plugin/wmctrl/workspace.rb in fusuma-plugin-wmctrl-1.1.0

- old
+ new

@@ -1,153 +1,160 @@ # frozen_string_literal: true -# Manage workspace -class Workspace - class InvalidOption < StandardError; end +module Fusuma + module Plugin + module Wmctrl + # Manage workspace + class Workspace + class MissingMatrixOption < StandardError; end - def initialize(wrap_navigation: nil, matrix_col_size: nil) - @wrap_navigation = wrap_navigation - @matrix_col_size = matrix_col_size - end + def initialize(wrap_navigation: nil, matrix_col_size: nil) + @wrap_navigation = wrap_navigation + @matrix_col_size = matrix_col_size + end - # get next workspace number - # @return [Integer] - def next_workspace_num(step:) - current_workspace_num, total_workspace_num = workspace_values + # get next workspace number + # @return [Integer] + def next_workspace_num(step:) + current_workspace_num, total_workspace_num = workspace_values - next_workspace_num = current_workspace_num + step + next_workspace_num = current_workspace_num + step - return next_workspace_num unless @wrap_navigation + return next_workspace_num unless @wrap_navigation - if next_workspace_num.negative? - next_workspace_num = total_workspace_num - 1 - elsif next_workspace_num >= total_workspace_num - next_workspace_num = 0 - else - next_workspace_num - end - next_workspace_num - end + if next_workspace_num.negative? + next_workspace_num = total_workspace_num - 1 + elsif next_workspace_num >= total_workspace_num + next_workspace_num = 0 + else + next_workspace_num + end + next_workspace_num + end - # @return [Array<Integer>] - def matrix_size(total_workspace_num) - must_have_matrix_option! - col_size = @matrix_col_size - row_size = (total_workspace_num / col_size) - [row_size.to_i, col_size.to_i] - end + # @return [Array<Integer>] + def matrix_size(total_workspace_num) + must_have_matrix_option! + col_size = @matrix_col_size + row_size = (total_workspace_num / col_size) + [row_size.to_i, col_size.to_i] + end - def must_have_matrix_option! - return if @matrix_col_size + def must_have_matrix_option! + return if @matrix_col_size - warn(<<~ERRRORMESSAGE) - Please set matrix-col-size to config.yml + # FIXME: move to executor + warn(<<~ERRRORMESSAGE) + Please set matrix-col-size to config.yml - ```config.yaml - plugin: - executors: - wmctrl_executor: - matrix-col-size: 2 - ``` - ERRRORMESSAGE - raise InvalidOption, 'You need to set matrix option to config.yml' - end + ```config.yaml + plugin: + executors: + wmctrl_executor: + matrix-col-size: 2 + ``` + ERRRORMESSAGE + raise MissingMatrixOption, 'You need to set matrix option to config.yml' + end - # @return [Integer] - # @raise RuntimeError - def next_workspace_num_for_matrix(direction:) - must_have_matrix_option! - current_workspace_num, total_workspace_num = workspace_values - row_size, col_size = matrix_size(total_workspace_num) - x = current_workspace_num % col_size - y = current_workspace_num / col_size - case direction - when 'right' - if x < col_size - 1 - current_workspace_num + 1 - elsif @wrap_navigation - current_workspace_num - (col_size - 1) - else - current_workspace_num - end - when 'left' - if x.positive? - current_workspace_num - 1 - elsif @wrap_navigation - current_workspace_num + (col_size - 1) - else - current_workspace_num - end - when 'down' - if y < row_size - 1 - current_workspace_num + col_size - elsif @wrap_navigation - (current_workspace_num + col_size) - total_workspace_num - else - current_workspace_num - end - when 'up' - if y.positive? - current_workspace_num - col_size - elsif @wrap_navigation - total_workspace_num + (current_workspace_num - col_size) - else - current_workspace_num - end - else - raise "#{direction} is invalid key" - end - end + # @return [Integer] + # @raise RuntimeError + def next_workspace_num_for_matrix(direction:) + must_have_matrix_option! + current_workspace_num, total_workspace_num = workspace_values + row_size, col_size = matrix_size(total_workspace_num) + x = current_workspace_num % col_size + y = current_workspace_num / col_size + case direction + when 'right' + if x < col_size - 1 + current_workspace_num + 1 + elsif @wrap_navigation + current_workspace_num - (col_size - 1) + else + current_workspace_num + end + when 'left' + if x.positive? + current_workspace_num - 1 + elsif @wrap_navigation + current_workspace_num + (col_size - 1) + else + current_workspace_num + end + when 'down' + if y < row_size - 1 + current_workspace_num + col_size + elsif @wrap_navigation + (current_workspace_num + col_size) - total_workspace_num + else + current_workspace_num + end + when 'up' + if y.positive? + current_workspace_num - col_size + elsif @wrap_navigation + total_workspace_num + (current_workspace_num - col_size) + else + current_workspace_num + end + else + raise "#{direction} is invalid key" + end + end - def move_command(direction:) - workspace_num = case direction - when 'next' - next_workspace_num(step: 1) - when 'prev' - next_workspace_num(step: -1) - else - raise "#{direction} is invalid key" - end - "wmctrl -s #{workspace_num}" - end + def move_command(direction:) + workspace_num = case direction + when 'next' + next_workspace_num(step: 1) + when 'prev' + next_workspace_num(step: -1) + else + raise "#{direction} is invalid key" + end + "wmctrl -s #{workspace_num}" + end - def move_command_for_matrix(direction:) - workspace_num = next_workspace_num_for_matrix(direction: direction) - "wmctrl -s #{workspace_num}" - end + def move_command_for_matrix(direction:) + workspace_num = next_workspace_num_for_matrix(direction: direction) + "wmctrl -s #{workspace_num}" + end - def move_window_command(direction:) - workspace_num = case direction - when 'next' - next_workspace_num(step: 1) - when 'prev' - next_workspace_num(step: -1) - else - raise "#{direction} is invalid key" - end - "wmctrl -r :ACTIVE: -t #{workspace_num} ; wmctrl -s #{workspace_num}" - end + def move_window_command(direction:) + workspace_num = case direction + when 'next' + next_workspace_num(step: 1) + when 'prev' + next_workspace_num(step: -1) + else + raise "#{direction} is invalid key" + end + "wmctrl -r :ACTIVE: -t #{workspace_num} ; wmctrl -s #{workspace_num}" + end - def move_window_command_for_matrix(direction:) - workspace_num = next_workspace_num_for_matrix(direction: direction) - "wmctrl -r :ACTIVE: -t #{workspace_num} ; wmctrl -s #{workspace_num}" - end + def move_window_command_for_matrix(direction:) + workspace_num = next_workspace_num_for_matrix(direction: direction) + "wmctrl -r :ACTIVE: -t #{workspace_num} ; wmctrl -s #{workspace_num}" + end - private + private - # get current workspace and total workspace numbers - # @return [Integer, Integer] - def workspace_values - wmctrl_output = `wmctrl -d`.split("\n") + # get current workspace and total workspace numbers + # @return [Integer, Integer] + def workspace_values + wmctrl_output = `wmctrl -d`.split("\n") - current_line = wmctrl_output.grep(/\*/).first - # NOTE: stderror when failed to get desktop - # `Cannot get current desktop properties. \ - # (_NET_CURRENT_DESKTOP or _WIN_WORKSPACE property)` - return [0, 1] if current_line.nil? + current_line = wmctrl_output.grep(/\*/).first + # NOTE: stderror when failed to get desktop + # `Cannot get current desktop properties. \ + # (_NET_CURRENT_DESKTOP or _WIN_WORKSPACE property)` + return [0, 1] if current_line.nil? - current_workspace_num = current_line.chars.first.to_i - total_workspace_num = wmctrl_output.length + current_workspace_num = current_line.chars.first.to_i + total_workspace_num = wmctrl_output.length - [current_workspace_num, total_workspace_num] + [current_workspace_num, total_workspace_num] + end + end + end end end