hiiro 0.1.134 → 0.1.135

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e5c49242912889d365b5eabdfdc3adeb72ea6d55dd7311280dcc9b3f6ac40013
4
- data.tar.gz: 219b6710d528233190c7bfb30465d4f3b293cea21f24c8a01561768566ce83ff
3
+ metadata.gz: f028f163e6d99e3596af0a95fd9497be38eeaffd5f6691ace74900c15f345dd0
4
+ data.tar.gz: 48a575c2e4c71223db8c5a2ef07502e3628e75f6ec7661ffb6c809eee8c005f2
5
5
  SHA512:
6
- metadata.gz: 8ae90dc0c81c21b6d580ccfa3b2ba3475633f7686efdc5de97147cc3030538632e01c436a244e682d6ee7cc361cd3ed9945652c2fd1c4792da8ad98d6a160913
7
- data.tar.gz: ebca695230cc51d34b926726c5514af9b6c535eb368920fca89a0dd3dbec0e37d16748612612032485819ac01419b6c1f7b87ca44fc4d5281885610dec8e3900
6
+ metadata.gz: 26b910aa8b58fbe32d1dad4a5e7848f2a0ded7f7f816c15d67b23904be635e21f141bcb862573a7be3ba0cf36c402d9f700473a11fd99d88728a7f37a5b85f29
7
+ data.tar.gz: 72ab6bfe0873bd1afbeff94d4c699fa47aa629845343247902746c3e534f45ddfd20007acbf3eef1758924c6feaebfc42134cdc1091ce61d323ccc716fc81f82
data/bin/h-jumplist CHANGED
@@ -37,6 +37,23 @@ def tmux_display(fmt)
37
37
  `tmux display-message -p '#{fmt}'`.strip
38
38
  end
39
39
 
40
+ def prune_dead_entries(entries, pos)
41
+ new_entries = []
42
+ new_pos = pos
43
+ entries.each_with_index do |entry, i|
44
+ pane_id = entry.split('|', 2).first
45
+ if pane_exists?(pane_id)
46
+ new_entries << entry
47
+ else
48
+ new_pos -= 1 if i < pos
49
+ end
50
+ end
51
+ new_pos = new_pos.clamp(0, [new_entries.length - 1, 0].max)
52
+ write_entries(new_entries)
53
+ set_pos(new_pos)
54
+ [new_entries, new_pos]
55
+ end
56
+
40
57
  Hiiro.run(*ARGV) do
41
58
  add_subcmd(:setup) do
42
59
  puts <<~SETUP
@@ -52,6 +69,40 @@ Hiiro.run(*ARGV) do
52
69
  SETUP
53
70
  end
54
71
 
72
+ add_subcmd(:ls) do
73
+ entries, pos = prune_dead_entries(read_entries, get_pos)
74
+
75
+ if entries.empty?
76
+ puts "Jumplist is empty."
77
+ next
78
+ end
79
+
80
+ entries.each_with_index do |entry, i|
81
+ parts = entry.split('|')
82
+ pane_id, window_id, session_name, timestamp, pane_cmd = parts
83
+ time_str = Time.at(timestamp.to_i).strftime('%H:%M:%S')
84
+ marker = i == pos ? " <--" : ""
85
+ puts "%3d) %s | %s | %s | %s | %s%s" % [i, session_name, window_id, pane_id, pane_cmd, time_str, marker]
86
+ end
87
+ end
88
+
89
+ add_subcmd(:list) do
90
+ entries, pos = prune_dead_entries(read_entries, get_pos)
91
+
92
+ if entries.empty?
93
+ puts "Jumplist is empty."
94
+ next
95
+ end
96
+
97
+ entries.each_with_index do |entry, i|
98
+ parts = entry.split('|')
99
+ pane_id, window_id, session_name, timestamp, pane_cmd = parts
100
+ time_str = Time.at(timestamp.to_i).strftime('%H:%M:%S')
101
+ marker = i == pos ? " <--" : ""
102
+ puts "%3d) %s | %s | %s | %s | %s%s" % [i, session_name, window_id, pane_id, pane_cmd, time_str, marker]
103
+ end
104
+ end
105
+
55
106
  add_subcmd(:record) do
56
107
  # Check suppression flag
57
108
  suppress = `tmux show-environment TMUX_JUMPLIST_SUPPRESS 2>/dev/null`.strip
@@ -91,8 +142,7 @@ Hiiro.run(*ARGV) do
91
142
  end
92
143
 
93
144
  add_subcmd(:back) do
94
- entries = read_entries
95
- pos = get_pos
145
+ entries, pos = prune_dead_entries(read_entries, get_pos)
96
146
 
97
147
  if entries.empty?
98
148
  system('tmux', 'display-message', 'Jumplist: empty')
@@ -117,67 +167,38 @@ Hiiro.run(*ARGV) do
117
167
  end
118
168
  end
119
169
 
120
- # Find next valid entry going backward
121
170
  new_pos = pos + 1
122
- while new_pos < entries.length
123
- entry = entries[new_pos]
124
- parts = entry.split('|')
125
- target_pane = parts[0]
126
- target_window = parts[1]
127
- target_session = parts[2]
128
-
129
- if pane_exists?(target_pane)
130
- system('tmux', 'set-environment', 'TMUX_JUMPLIST_SUPPRESS', '1')
131
- system('tmux', 'switch-client', '-t', target_session)
132
- system('tmux', 'select-window', '-t', target_window)
133
- system('tmux', 'select-pane', '-t', target_pane)
134
- set_pos(new_pos)
135
- next # exit the subcmd block
136
- end
137
-
138
- new_pos += 1
171
+ if new_pos < entries.length
172
+ parts = entries[new_pos].split('|')
173
+ system('tmux', 'set-environment', 'TMUX_JUMPLIST_SUPPRESS', '1')
174
+ system('tmux', 'switch-client', '-t', parts[2])
175
+ system('tmux', 'select-window', '-t', parts[1])
176
+ system('tmux', 'select-pane', '-t', parts[0])
177
+ set_pos(new_pos)
178
+ else
179
+ system('tmux', 'display-message', 'Jumplist: at oldest entry')
139
180
  end
140
-
141
- system('tmux', 'display-message', 'Jumplist: at oldest entry')
142
181
  end
143
182
 
144
183
  add_subcmd(:forward) do
145
- pos = get_pos
184
+ entries, pos = prune_dead_entries(read_entries, get_pos)
146
185
 
147
186
  if pos <= 0
148
187
  system('tmux', 'display-message', 'Jumplist: at newest entry')
149
188
  next
150
189
  end
151
190
 
152
- entries = read_entries
153
-
154
191
  if entries.empty?
155
192
  system('tmux', 'display-message', 'Jumplist: empty')
156
193
  next
157
194
  end
158
195
 
159
- # Find next valid entry going forward (toward index 0)
160
196
  new_pos = pos - 1
161
- while new_pos >= 0
162
- entry = entries[new_pos]
163
- parts = entry.split('|')
164
- target_pane = parts[0]
165
- target_window = parts[1]
166
- target_session = parts[2]
167
-
168
- if pane_exists?(target_pane)
169
- system('tmux', 'set-environment', 'TMUX_JUMPLIST_SUPPRESS', '1')
170
- system('tmux', 'switch-client', '-t', target_session)
171
- system('tmux', 'select-window', '-t', target_window)
172
- system('tmux', 'select-pane', '-t', target_pane)
173
- set_pos(new_pos)
174
- next # exit the subcmd block
175
- end
176
-
177
- new_pos -= 1
178
- end
179
-
180
- system('tmux', 'display-message', 'Jumplist: at newest entry')
181
- set_pos(0)
197
+ parts = entries[new_pos].split('|')
198
+ system('tmux', 'set-environment', 'TMUX_JUMPLIST_SUPPRESS', '1')
199
+ system('tmux', 'switch-client', '-t', parts[2])
200
+ system('tmux', 'select-window', '-t', parts[1])
201
+ system('tmux', 'select-pane', '-t', parts[0])
202
+ set_pos(new_pos)
182
203
  end
183
204
  end
data/bin/h-notify CHANGED
@@ -10,13 +10,16 @@ TYPE_PRESETS = {
10
10
  'warning' => { prefix: '[WARN]', sound: 'Purr', title: 'Warning' },
11
11
  }
12
12
 
13
+ NOTIFY_DIR = File.join(Dir.home, '.config', 'hiiro', 'notify')
14
+ FileUtils.mkdir_p(NOTIFY_DIR)
15
+
13
16
  def session_name
14
17
  `tmux display-message -p '\#{session_name}'`.strip
15
18
  end
16
19
 
17
20
  def notify_file(session = nil)
18
21
  session ||= session_name
19
- "/tmp/tmux-notifications-#{session}"
22
+ File.join(NOTIFY_DIR, "#{session}.log")
20
23
  end
21
24
 
22
25
  def read_notifications(session = nil)
@@ -40,11 +43,11 @@ def pane_exists?(pane_id)
40
43
  end
41
44
 
42
45
  Hiiro.run(*ARGV) do
43
- opts = Hiiro::Options.parse(args) do
46
+ @opts = Hiiro::Options.parse(args) do
44
47
  option(:type, short: 't', desc: 'Notification type (success, error, info, warning)', default: 'info')
45
48
  end
46
49
 
47
- preset = TYPE_PRESETS[opts.type] || TYPE_PRESETS['info']
50
+ @preset = TYPE_PRESETS[@opts.type] || TYPE_PRESETS['info']
48
51
 
49
52
  add_subcmd(:push) do |*push_args|
50
53
  message = push_args.join(' ')
@@ -66,13 +69,13 @@ Hiiro.run(*ARGV) do
66
69
  write_notifications(entries, session)
67
70
 
68
71
  # Show tmux display-message with type prefix
69
- system('tmux', 'display-message', "#{preset[:prefix]} #{message}")
72
+ system('tmux', 'display-message', "#{@preset[:prefix]} #{message}")
70
73
 
71
74
  # Also send terminal-notifier
72
75
  system('terminal-notifier',
73
- '-title', preset[:title],
76
+ '-title', @preset[:title],
74
77
  '-message', message,
75
- '-sound', preset[:sound])
78
+ '-sound', @preset[:sound])
76
79
  end
77
80
 
78
81
  add_subcmd(:menu) do
data/lib/hiiro/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Hiiro
2
- VERSION = "0.1.134"
2
+ VERSION = "0.1.135"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hiiro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.134
4
+ version: 0.1.135
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Toyota