hiiro 0.1.134 → 0.1.136

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: 771ab234e04048e9c86898f2d8e2a265e7323d2876e1bdcde7a4c72653b09cae
4
+ data.tar.gz: 7ccfb6999f64c47f10d055aa9a0c0203695638ba0eaf7ae6c42bc2443dc515b6
5
5
  SHA512:
6
- metadata.gz: 8ae90dc0c81c21b6d580ccfa3b2ba3475633f7686efdc5de97147cc3030538632e01c436a244e682d6ee7cc361cd3ed9945652c2fd1c4792da8ad98d6a160913
7
- data.tar.gz: ebca695230cc51d34b926726c5514af9b6c535eb368920fca89a0dd3dbec0e37d16748612612032485819ac01419b6c1f7b87ca44fc4d5281885610dec8e3900
6
+ metadata.gz: 996b6711ffc8758971f864628168965fa4895599360660897e85abde7f4ea16e6bd5b752571ca5e62dc43533794fc5aae0e403c4251a5f4032b13ec4927667f4
7
+ data.tar.gz: 17109c5ea9c6fd28188711e2fbaf00ec953be03e42aff5d511e63b99568734f5a40f0bf88b3824941b26c014a4ded5f96a501181da1a997942525780b5b42655
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,44 @@ Hiiro.run(*ARGV) do
52
69
  SETUP
53
70
  end
54
71
 
72
+ add_subcmd(:path) do
73
+ print JUMPLIST_FILE
74
+ end
75
+
76
+ add_subcmd(:ls) do
77
+ entries, pos = prune_dead_entries(read_entries, get_pos)
78
+
79
+ if entries.empty?
80
+ puts "Jumplist is empty."
81
+ next
82
+ end
83
+
84
+ entries.each_with_index do |entry, i|
85
+ parts = entry.split('|')
86
+ pane_id, window_id, session_name, timestamp, pane_cmd = parts
87
+ time_str = Time.at(timestamp.to_i).strftime('%H:%M:%S')
88
+ marker = i == pos ? " <--" : ""
89
+ puts "%3d) %s | %s | %s | %s | %s%s" % [i, session_name, window_id, pane_id, pane_cmd, time_str, marker]
90
+ end
91
+ end
92
+
93
+ add_subcmd(:list) do
94
+ entries, pos = prune_dead_entries(read_entries, get_pos)
95
+
96
+ if entries.empty?
97
+ puts "Jumplist is empty."
98
+ next
99
+ end
100
+
101
+ entries.each_with_index do |entry, i|
102
+ parts = entry.split('|')
103
+ pane_id, window_id, session_name, timestamp, pane_cmd = parts
104
+ time_str = Time.at(timestamp.to_i).strftime('%H:%M:%S')
105
+ marker = i == pos ? " <--" : ""
106
+ puts "%3d) %s | %s | %s | %s | %s%s" % [i, session_name, window_id, pane_id, pane_cmd, time_str, marker]
107
+ end
108
+ end
109
+
55
110
  add_subcmd(:record) do
56
111
  # Check suppression flag
57
112
  suppress = `tmux show-environment TMUX_JUMPLIST_SUPPRESS 2>/dev/null`.strip
@@ -91,8 +146,7 @@ Hiiro.run(*ARGV) do
91
146
  end
92
147
 
93
148
  add_subcmd(:back) do
94
- entries = read_entries
95
- pos = get_pos
149
+ entries, pos = prune_dead_entries(read_entries, get_pos)
96
150
 
97
151
  if entries.empty?
98
152
  system('tmux', 'display-message', 'Jumplist: empty')
@@ -117,67 +171,38 @@ Hiiro.run(*ARGV) do
117
171
  end
118
172
  end
119
173
 
120
- # Find next valid entry going backward
121
174
  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
175
+ if new_pos < entries.length
176
+ parts = entries[new_pos].split('|')
177
+ system('tmux', 'set-environment', 'TMUX_JUMPLIST_SUPPRESS', '1')
178
+ system('tmux', 'switch-client', '-t', parts[2])
179
+ system('tmux', 'select-window', '-t', parts[1])
180
+ system('tmux', 'select-pane', '-t', parts[0])
181
+ set_pos(new_pos)
182
+ else
183
+ system('tmux', 'display-message', 'Jumplist: at oldest entry')
139
184
  end
140
-
141
- system('tmux', 'display-message', 'Jumplist: at oldest entry')
142
185
  end
143
186
 
144
187
  add_subcmd(:forward) do
145
- pos = get_pos
188
+ entries, pos = prune_dead_entries(read_entries, get_pos)
146
189
 
147
190
  if pos <= 0
148
191
  system('tmux', 'display-message', 'Jumplist: at newest entry')
149
192
  next
150
193
  end
151
194
 
152
- entries = read_entries
153
-
154
195
  if entries.empty?
155
196
  system('tmux', 'display-message', 'Jumplist: empty')
156
197
  next
157
198
  end
158
199
 
159
- # Find next valid entry going forward (toward index 0)
160
200
  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)
201
+ parts = entries[new_pos].split('|')
202
+ system('tmux', 'set-environment', 'TMUX_JUMPLIST_SUPPRESS', '1')
203
+ system('tmux', 'switch-client', '-t', parts[2])
204
+ system('tmux', 'select-window', '-t', parts[1])
205
+ system('tmux', 'select-pane', '-t', parts[0])
206
+ set_pos(new_pos)
182
207
  end
183
208
  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.136"
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.136
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Toyota