Module: I3::Manpage
Instance Method Summary collapse
-
#display(name) ⇒ Object
Prints a manpage, all pretty and paged.
-
#groff? ⇒ Boolean
Returns true if groff is installed and in our path, false if not.
-
#groff_command ⇒ Object
The groff command complete with crazy arguments we need to run in order to turn our raw roff (manpage markup) into something readable on the terminal.
-
#manpage(name) ⇒ Object
Returns the terminal-formatted manpage, ready to be printed to the screen.
- #page_stdout ⇒ Object
-
#puts(*args) ⇒ Object
All calls to ‘puts` are paged, git-style.
-
#raw_manpage(name) ⇒ Object
Returns the raw manpage.
Instance Method Details
#display(name) ⇒ Object
Prints a manpage, all pretty and paged.
6 7 8 |
# File 'lib/i3-ipc/manpage.rb', line 6 def display(name) puts manpage(name) end |
#groff? ⇒ Boolean
Returns true if groff is installed and in our path, false if not.
42 43 44 |
# File 'lib/i3-ipc/manpage.rb', line 42 def groff? system("which groff > /dev/null") end |
#groff_command ⇒ Object
The groff command complete with crazy arguments we need to run in order to turn our raw roff (manpage markup) into something readable on the terminal.
49 50 51 |
# File 'lib/i3-ipc/manpage.rb', line 49 def groff_command "groff -Wall -mtty-char -mandoc -Tascii" end |
#manpage(name) ⇒ Object
Returns the terminal-formatted manpage, ready to be printed to the screen.
12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/i3-ipc/manpage.rb', line 12 def manpage(name) return "** Can't find groff(1)" unless groff? require 'open3' out = nil Open3.popen3(groff_command) do |stdin, stdout, _| stdin.puts raw_manpage(name) stdin.close out = stdout.read.strip end out end |
#page_stdout ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/i3-ipc/manpage.rb', line 60 def page_stdout return unless $stdout.tty? read, write = IO.pipe if Kernel.fork # Parent process, become pager $stdin.reopen(read) read.close write.close # Don't page if the input is short enough ENV['LESS'] = 'FSRX' # Wait until we have input before we start the pager Kernel.select [STDIN] pager = ENV['PAGER'] || 'less -isr' pager = 'cat' if pager.empty? exec pager rescue exec "/bin/sh", "-c", pager else # Child process $stdout.reopen(write) $stderr.reopen(write) if $stderr.tty? read.close write.close end end |
#puts(*args) ⇒ Object
All calls to ‘puts` are paged, git-style.
54 55 56 57 |
# File 'lib/i3-ipc/manpage.rb', line 54 def puts(*args) page_stdout super end |
#raw_manpage(name) ⇒ Object
Returns the raw manpage. If we’re not running in standalone mode, it’s a file sitting at the root under the ‘man` directory.
If we are running in standalone mode the manpage will be included after the __END__ of the file so we can grab it using DATA.
32 33 34 35 36 37 38 |
# File 'lib/i3-ipc/manpage.rb', line 32 def raw_manpage(name) if File.exists? file = File.dirname(__FILE__) + "/../../man/#{name}.1" File.read(file) else DATA.read end end |