bcat 0.0.0 → 0.0.1

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.
Files changed (6) hide show
  1. data/README +13 -0
  2. data/bcat.gemspec +2 -1
  3. data/bin/bcat +22 -3
  4. data/lib/bcat.rb +18 -7
  5. data/man/bcat.1.ronn +13 -3
  6. metadata +4 -3
data/README ADDED
@@ -0,0 +1,13 @@
1
+ bcat reads from standard input and displays output in a web browser:
2
+
3
+ $ echo "hi mom" |bcat
4
+ $ echo "hi mom" |bcat -t 'Page Title'
5
+ $ echo "*hi mom*" |markdown |bcat -h
6
+
7
+ Browser output is displayed progressively as it's read from standard input,
8
+ making bcat especially useful with build tools and commands like tail(1) that
9
+ generate output over longer periods of time:
10
+
11
+ $ make all |bcat
12
+ $ rake test |bcat
13
+ $ tail -f /var/log/syslog |bcat
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'bcat'
3
- s.version = '0.0.0'
3
+ s.version = '0.0.1'
4
4
  s.date = '2010-06-19'
5
5
 
6
6
  s.summary = "browser cat"
@@ -13,6 +13,7 @@ Gem::Specification.new do |s|
13
13
 
14
14
  # = MANIFEST =
15
15
  s.files = %w[
16
+ README
16
17
  Rakefile
17
18
  bcat.gemspec
18
19
  bin/bcat
data/bin/bcat CHANGED
@@ -1,8 +1,27 @@
1
1
  #!/usr/bin/env ruby
2
- # Usage: bcat [<file>]...
3
- # Read standard input, or one or more <file>s, and write to browser.
2
+ #/ Usage: bcat [-h] [<file>]...
3
+ #/ Read standard input, or one or more <file>s, and write to browser.
4
+ #/
5
+ #/ Options
6
+ #/ -h, --html input is html encoded
7
+ #/ -t, --title=<text> use <text> as the page title
8
+ require 'optparse'
4
9
  require 'bcat'
5
10
 
11
+ options = {
12
+ :html => false,
13
+ :title => Dir.pwd,
14
+ :Host => 'localhost',
15
+ :Port => 8091
16
+ }
17
+
18
+ ARGV.options do |argv|
19
+ argv.on('-h', '--html') { options[:html] = true }
20
+ argv.on('-t', '--title=v') { |text| options[:title] = text }
21
+ argv.on_tail('--help') { exec "grep ^#/ <#{__FILE__} | cut -c4-" }
22
+ argv.parse!
23
+ end
24
+
6
25
  fds =
7
26
  ARGV.map do |file|
8
27
  if file == '-'
@@ -17,7 +36,7 @@ command = ENV['BCAT_COMMAND'] || 'open $BCAT_ARGS "$BCAT_URL"'
17
36
 
18
37
  pid = nil
19
38
  begin
20
- bcat = Bcat.new(fds)
39
+ bcat = Bcat.new(fds, options)
21
40
  bcat.serve! do |sock|
22
41
  pid =
23
42
  fork do
@@ -2,7 +2,7 @@ require 'rack'
2
2
  require 'bcat/kidgloves'
3
3
 
4
4
  class Bcat
5
- VERSION = '0.0.0'
5
+ VERSION = '0.0.1'
6
6
  include Rack::Utils
7
7
 
8
8
  def initialize(fds=[$stdin], config={})
@@ -20,26 +20,36 @@ class Bcat
20
20
 
21
21
  def head
22
22
  ["<html>",
23
- "<head><title>bcat</title></head>",
24
- "<body><pre>"].join
23
+ "<head><title>#{self[:title] || 'bcat'}</title></head>",
24
+ "<body>"].join
25
25
  end
26
26
 
27
27
  def foot
28
- "</pre></body></html>"
28
+ "</body></html>"
29
+ end
30
+
31
+ def escape_js(string)
32
+ string = string.gsub(/['\\]/) { |char| "\\#{char}" }
33
+ string.gsub!(/\n/, '\n')
34
+ string
29
35
  end
30
36
 
31
37
  def each
32
38
  yield "\n" * 1000
33
39
  yield "<!DOCTYPE html>\n"
34
40
  yield head
41
+ yield "<pre>" if !self[:html]
35
42
 
36
43
  begin
37
44
  @fds.each do |fd|
38
45
  begin
39
46
  while buf = fd.readpartial(4096)
40
- output = escape_html(buf)
41
- output = output.gsub(/\n/, "<br>")
42
- yield "<script>document.write('#{output}');</script>"
47
+ if !self[:html]
48
+ buf = escape_html(buf)
49
+ buf.gsub!(/\n/, "<br>")
50
+ end
51
+ buf = escape_js(buf)
52
+ yield "<script>document.write('#{buf}');</script>"
43
53
  end
44
54
  rescue EOFError
45
55
  ensure
@@ -48,6 +58,7 @@ class Bcat
48
58
  end
49
59
  end
50
60
 
61
+ yield "</pre>" if !self[:html]
51
62
  yield foot
52
63
  end
53
64
 
@@ -3,13 +3,23 @@ bcat(1) -- browser cat
3
3
 
4
4
  ## SYNOPSIS
5
5
 
6
- `bcat`<br>
7
- `bcat` <file>... [-]<br>
6
+ `bcat` [-ht] [<file>...]<br>
8
7
 
9
8
  ## DESCRIPTION
10
9
 
11
10
  The `bcat` utility reads from standard input, or one or more <file>s, and writes
12
- output to a web browser progressively. When <file> is '-'
11
+ output to a web browser progressively. A <file> may be '-', in which case
12
+ standard input is concatenated at the position specified.
13
+
14
+ * `-h`, `--html`:
15
+ Do not HTML encode input. By default, `bcat` assumes input is plain text
16
+ and entity encodes any `<` or `&` characters, converts raw end-of-line
17
+ characters (`\n`) to `<br>` tags, and wraps output in a `<pre>` block. The
18
+ `--html` option disables all of these conversions, causing the input text
19
+ to be written directly as HTML.
20
+ * `-t`, `--title`=<text>:
21
+ Use <text> as the page `<title>`. By default, the path to the current working
22
+ directory is used as the title.
13
23
 
14
24
  ## ENVIRONMENT
15
25
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcat
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 0
10
- version: 0.0.0
9
+ - 1
10
+ version: 0.0.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ryan Tomayko
@@ -41,6 +41,7 @@ extensions: []
41
41
  extra_rdoc_files:
42
42
  - COPYING
43
43
  files:
44
+ - README
44
45
  - Rakefile
45
46
  - bcat.gemspec
46
47
  - bin/bcat