mailmate keybinding for emptying a mailbox
diff --git a/bin/,tmux-copy b/bin/,tmux-copy
new file mode 100755
index 00000000..3919346b
--- /dev/null
+++ b/bin/,tmux-copy
@@ -0,0 +1,76 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+require 'English'
+require 'shellwords'
+
+def executable(*commands)
+ commands.find do |c|
+ `command -v #{c.split.first}`.empty?.!
+ end
+end
+
+def halt(message)
+ system "tmux display-message #{Shellwords.escape(message)}"
+ exit
+end
+
+def with(command)
+ io = IO.popen(command, 'r+')
+ begin
+ stdout = $stdout
+ $stdout = io
+ begin
+ yield
+ rescue Errno::EPIPE
+ nil
+ end
+ ensure
+ $stdout = stdout
+ end
+ io.close_write
+ io.readlines.map(&:chomp)
+end
+
+# TODO: Keep it simple for now
+def extract_urls(line)
+ line.scan(%r{(?:https?|file)://[-a-zA-Z0-9@:%_+.~#?&/=]+[-a-zA-Z0-9@%_+.~#?&/=!]+}x)
+end
+
+lines = `tmux capture-pane -J -p -S -99999`
+urls = lines.each_line.map(&:strip).reject(&:empty?)
+ .flat_map { |l| extract_urls(l) }.reverse.uniq
+halt 'No URLs found' if urls.empty?
+
+header = 'Press CTRL-Y to copy URL to clipboard'
+max_size = `tmux display-message -p "\#{client_width} \#{client_height}"`.split.map(&:to_i)
+size = [[*urls, header].map(&:length).max + 7, urls.length + 5].zip(max_size).map(&:min).join(',')
+opts = ['--tmux', size, '--multi', '--no-margin', '--no-padding', '--wrap',
+ '--expect', 'ctrl-y',
+ '--header', header,
+ '--highlight-line', '--header-first', '--info', 'inline-right',
+ '--border-label', ' URLs '].map(&:shellescape).join(' ')
+selected = with("fzf #{opts}") do
+ puts urls
+end
+exit if selected.length < 2
+
+if selected.first == 'ctrl-y'
+ # https://superuser.com/questions/288320/whats-like-osxs-pbcopy-for-linux
+ copier = executable('reattach-to-user-namespace pbcopy',
+ 'pbcopy',
+ 'xsel --clipboard --input',
+ 'xclip -selection clipboard')
+ halt 'No command to control clipboard with' unless copier
+ with(copier) do
+ print selected.drop(1).join($RS).strip
+ end
+ halt 'Copied to clipboard'
+end
+
+opener = executable('open', 'xdg-open')
+opener = 'nohup xdg-open' if opener == 'xdg-open'
+halt 'No command to open URL with' unless opener
+selected.drop(1).each do |url|
+ system "#{opener} #{Shellwords.escape(url)} &> /dev/null"
+end
diff --git a/macos/MailMate.plist b/macos/MailMate.plist
index 0e06649b..44cc15c0 100644
--- a/macos/MailMate.plist
+++ b/macos/MailMate.plist
@@ -26,7 +26,10 @@
"r" = "reply:";
"s" = "toggleFlag:";
"u" = "undo:";
- "J" = ( "markAsNotJunk:", "moveToMailbox:" );
+ "J" = {
+ "e" = ( "goToMailbox:", "JUNK", "emptyMailbox:" );
+ "m" = ( "markAsNotJunk:", "moveToMailbox:" );
+ };
"T" = {
"h" = ( "toggleTag:", "hidden" );