Class: Rufio::TabModeManager
- Inherits:
-
Object
- Object
- Rufio::TabModeManager
- Defined in:
- lib/rufio/tab_mode_manager.rb
Overview
タブモード管理クラス上部メニューの2段目に表示するモードタブを管理する
Constant Summary collapse
- MODES =
%i[files logs jobs help].freeze
- MODE_LABELS =
{ files: 'Files', logs: 'Logs', jobs: 'Jobs', help: 'Help' }.freeze
- MODE_KEYS =
{ files: nil, logs: 'L', jobs: 'J', help: '?' }.freeze
Instance Attribute Summary collapse
-
#current_mode ⇒ Object
readonly
Returns the value of attribute current_mode.
Instance Method Summary collapse
-
#available_modes ⇒ Object
利用可能なモード一覧.
-
#current_mode_info ⇒ Object
現在のモード情報を取得.
-
#initialize ⇒ TabModeManager
constructor
A new instance of TabModeManager.
-
#mode_keys ⇒ Object
モードのキーバインド一覧.
-
#mode_labels ⇒ Object
モードのラベル一覧.
-
#next_mode ⇒ Object
次のモードに切り替え.
-
#on_mode_change(&block) ⇒ Object
モード変更時のコールバックを設定.
-
#previous_mode ⇒ Object
前のモードに切り替え.
-
#render_tab_line(width) ⇒ String
タブ行をレンダリング.
-
#switch_to(mode) ⇒ Object
特定のモードに切り替え.
Constructor Details
#initialize ⇒ TabModeManager
Returns a new instance of TabModeManager.
25 26 27 28 |
# File 'lib/rufio/tab_mode_manager.rb', line 25 def initialize @current_mode = :files @mode_change_callback = nil end |
Instance Attribute Details
#current_mode ⇒ Object (readonly)
Returns the value of attribute current_mode.
23 24 25 |
# File 'lib/rufio/tab_mode_manager.rb', line 23 def current_mode @current_mode end |
Instance Method Details
#available_modes ⇒ Object
利用可能なモード一覧
31 32 33 |
# File 'lib/rufio/tab_mode_manager.rb', line 31 def available_modes MODES end |
#current_mode_info ⇒ Object
現在のモード情報を取得
69 70 71 72 73 74 75 |
# File 'lib/rufio/tab_mode_manager.rb', line 69 def current_mode_info { mode: @current_mode, label: MODE_LABELS[@current_mode], index: MODES.index(@current_mode) } end |
#mode_keys ⇒ Object
モードのキーバインド一覧
41 42 43 |
# File 'lib/rufio/tab_mode_manager.rb', line 41 def mode_keys MODE_KEYS end |
#mode_labels ⇒ Object
モードのラベル一覧
36 37 38 |
# File 'lib/rufio/tab_mode_manager.rb', line 36 def mode_labels MODE_LABELS end |
#next_mode ⇒ Object
次のモードに切り替え
46 47 48 49 50 |
# File 'lib/rufio/tab_mode_manager.rb', line 46 def next_mode current_index = MODES.index(@current_mode) new_index = (current_index + 1) % MODES.length switch_to(MODES[new_index]) end |
#on_mode_change(&block) ⇒ Object
モード変更時のコールバックを設定
78 79 80 |
# File 'lib/rufio/tab_mode_manager.rb', line 78 def on_mode_change(&block) @mode_change_callback = block end |
#previous_mode ⇒ Object
前のモードに切り替え
53 54 55 56 57 |
# File 'lib/rufio/tab_mode_manager.rb', line 53 def previous_mode current_index = MODES.index(@current_mode) new_index = (current_index - 1) % MODES.length switch_to(MODES[new_index]) end |
#render_tab_line(width) ⇒ String
タブ行をレンダリング
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/rufio/tab_mode_manager.rb', line 85 def render_tab_line(width) tabs = MODES.map do |mode| label = MODE_LABELS[mode] if mode == @current_mode # 現在のモード: シアン背景 + 黒文字 + 太字で目立たせる "\e[46m\e[30m\e[1m #{label} \e[0m" else # 非選択モード: 暗めの色 "\e[90m #{label} \e[0m" end end tab_content = tabs.join("\e[90m│\e[0m") # 幅に合わせてパディング # ANSIエスケープシーケンスを除いた実際の表示幅を計算 display_width = strip_ansi(tab_content).length padding = width - display_width if padding > 0 tab_content + ' ' * padding else tab_content[0...width] end end |
#switch_to(mode) ⇒ Object
特定のモードに切り替え
60 61 62 63 64 65 66 |
# File 'lib/rufio/tab_mode_manager.rb', line 60 def switch_to(mode) return unless MODES.include?(mode) return if @current_mode == mode @current_mode = mode @mode_change_callback&.call(mode) end |