i3-ipc 0.1.4 → 0.2.0

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.
@@ -58,10 +58,10 @@ There are 3 arguments passed to the block:
58
58
  To send data to the socket, you need to use `em.send_data`.
59
59
  * `type` is the received message type.
60
60
  This could be one of
61
- * MESSAGE\_REPLY\_COMMAND
62
- * MESSAGE\_REPLY\_GET\_WORKSPACES
63
- * MESSAGE\_REPLY\_SUBSCRIBE
64
- * MESSAGE\_REPLY\_GET\_OUTPUTS
61
+ * MESSAGE\_TYPE\_COMMAND
62
+ * MESSAGE\_TYPE\_GET\_WORKSPACES
63
+ * MESSAGE\_TYPE\_SUBSCRIBE
64
+ * MESSAGE\_TYPE\_GET\_OUTPUTS
65
65
  * EVENT\_WORKSPACE
66
66
  * `data` is the received data, already parsed.
67
67
 
data/Rakefile CHANGED
@@ -1,23 +1,24 @@
1
- begin
2
- require 'mg'
3
- MG.new("i3-ipc.gemspec")
4
-
5
- desc "Build a gem."
6
- task :gem => :package
7
-
8
- desc "Push a new version to Gemcutter and publish docs."
9
- task :publish => [:test, :gemcutter] do
10
- require File.dirname(__FILE__) + '/lib/i3-ipc/version'
11
-
12
- sh "git tag v#{I3::Version}"
13
- sh "git push origin master --tags"
14
- sh "git clean -fd"
15
- exec "rake pages"
16
- end
17
- rescue LoadError
18
- warn "mg not available."
19
- warn "Install it with: gem i mg"
20
- end
1
+ #begin
2
+ #require 'mg'
3
+ #MG.new("i3-ipc.gemspec")
4
+
5
+ #desc "Build a gem."
6
+ #task :gem => :package
7
+
8
+ #desc "Push a new version to Gemcutter and publish docs."
9
+ #task :publish => [:test, :gemcutter] do
10
+ #require_relative 'lib/i3-ipc/version'
11
+
12
+ #sh "git tag v#{I3::Version}"
13
+ #sh "git push origin master --tags"
14
+ #sh "git clean -fd"
15
+ #exec "rake pages"
16
+ #end
17
+ #rescue LoadError => e
18
+ #raise unless e.message =~ /-- mg$/
19
+ #warn "mg not available."
20
+ #warn "Install it with: gem i mg"
21
+ #end
21
22
 
22
23
  desc "Build standalone script"
23
24
  task :build => [ "build:standalone", "build:man" ]
@@ -27,6 +28,11 @@ task :man => "build:man" do
27
28
  exec "man man/i3-ipc.1"
28
29
  end
29
30
 
31
+ file "i3-ipc" => FileList.new("lib/i3-ipc.rb", "lib/i3-ipc/*.rb", "man/i3-ipc.1") do |task|
32
+ require_relative 'lib/i3-ipc/standalone'
33
+ I3::Standalone.save(task.name)
34
+ end
35
+
30
36
  namespace :build do
31
37
  desc "Build i3-ipc manual"
32
38
  task :man do
@@ -34,15 +40,7 @@ namespace :build do
34
40
  end
35
41
 
36
42
  desc "Build standalone script"
37
- task :standalone => :load_i3_ipc do
38
- require 'i3-ipc/standalone'
39
- I3::Standalone.save('i3-ipc')
40
- end
41
- end
42
-
43
- task :load_i3_ipc do
44
- $LOAD_PATH.unshift 'lib'
45
- require 'i3-ipc'
43
+ task :standalone => "i3-ipc"
46
44
  end
47
45
 
48
46
  Rake::TaskManager.class_eval do
@@ -1,83 +1,112 @@
1
1
  require 'socket'
2
- require 'json'
3
- require 'i3-ipc/runner'
4
- require 'i3-ipc/subscription'
5
- require 'i3-ipc/manpage'
6
- require 'i3-ipc/version'
2
+ require 'yajl/json_gem'
3
+ require_relative 'i3-ipc/runner'
4
+ require_relative 'i3-ipc/subscription'
5
+ require_relative 'i3-ipc/manpage'
6
+ require_relative 'i3-ipc/version'
7
7
 
8
8
  module I3
9
9
  class IPC
10
10
  MAGIC_STRING = "i3-ipc"
11
- SOCKET_PATH = File.expand_path("~/.i3/ipc.sock")
12
11
 
13
- MESSAGE_TYPE_COMMAND = 0
14
- MESSAGE_TYPE_GET_WORKSPACES = 1
12
+ COMMANDS = [
13
+ # Send a command to i3.
14
+ #
15
+ # The payload is a command for i3
16
+ # (like the commands you can bind to keys in the configuration file)
17
+ # and will be executed directly after receiving it.
18
+ #
19
+ # Returns { "success" => true } for now.
20
+ # i3 does send this reply without checks.
21
+ [0, :command, :required],
22
+
23
+ # Gets the current workspaces.
24
+ # The reply will be the list of workspaces
25
+ # (see the reply section of i3 docu)
26
+ [1, :get_workspaces, :none],
27
+
28
+ # Gets the current outputs.
29
+ # The reply will be a JSON-encoded list of outputs
30
+ # (see the reply section of i3 docu).
31
+ [3, :get_outputs, :none],
32
+
33
+ # Gets the layout tree.
34
+ # i3 uses a tree as data structure which includes every container.
35
+ # The reply will be the JSON-encoded tree
36
+ # (see the reply section of i3 docu)
37
+ [4, :get_tree, :none],
38
+
39
+ # Gets a list of marks (identifiers for containers to easily jump
40
+ # to them later).
41
+ # The reply will be a JSON-encoded list of window marks.
42
+ # (see the reply section of i3 docu)
43
+ [5, :get_marks, :none],
44
+
45
+ # Gets the configuration (as JSON map) of the workspace bar with
46
+ # the given ID.
47
+ # If no ID is provided, an array with all configured bar IDs is returned instead.
48
+ [6, :get_bar_config, :optional],
49
+ ]
50
+ # Needed because subscribe is handled in submodule.
15
51
  MESSAGE_TYPE_SUBSCRIBE = 2
16
- MESSAGE_TYPE_GET_OUTPUTS = 3
17
-
18
- MESSAGE_REPLY_COMMAND = 0
19
- MESSAGE_REPLY_GET_WORKSPACES = 1
20
- MESSAGE_REPLY_SUBSCRIBE = 2
21
- MESSAGE_REPLY_GET_OUTPUTS = 3
22
52
 
23
53
  EVENT_MASK = (1 << 31)
24
54
  EVENT_WORKSPACE = (EVENT_MASK | 0)
25
55
 
56
+ def self.message_type_subscribe
57
+ MESSAGE_TYPE_SUBSCRIBE
58
+ end
59
+
60
+ meta = class<<self; self; end
61
+ COMMANDS.each do |(id, cmd, arg)|
62
+ meta.instance_eval {
63
+ define_method "message_type_#{cmd.downcase}" do
64
+ id
65
+ end
66
+ }
67
+ if arg == :none
68
+ define_method cmd do
69
+ write format(id)
70
+ handle_response id
71
+ end
72
+ elsif arg == :optional || arg == :required
73
+ define_method cmd do |arg|
74
+ write format(id, arg)
75
+ handle_response id
76
+ end
77
+ end
78
+ end
79
+
26
80
  class WrongMagicCode < RuntimeError; end # :nodoc:
27
81
  class WrongType < RuntimeError; end # :nodoc:
28
82
 
83
+ # Get socket path via i3 itself.
84
+ def self.socket_path
85
+ @@socket_path ||= `i3 --get-socketpath`.chomp
86
+ end
87
+
29
88
  # connects to the given i3 ipc interface
30
89
  # @param socket_path String the path to i3's socket
31
90
  # @param force_connect Boolean connects to the socket if true
32
- def initialize(socket_path=SOCKET_PATH, force_connect=false)
33
- @socket_path = socket_path
91
+ def initialize(socket=nil, force_connect=false)
92
+ @@socket_path = socket if socket
34
93
  connect if connect
35
94
  end
36
95
 
37
96
  # shortcut
38
- def self.subscribe(list, socket_path=SOCKET_PATH, &blk)
39
- Subscription.subscribe(list, socket_path, &blk)
97
+ def self.subscribe(list, socket_path=nil, &blk)
98
+ Subscription.subscribe(list, socket_path || self.socket_path, &blk)
40
99
  end
41
100
 
42
- # send a command to i3
101
+ # Reads the reply from the socket
102
+ # and parses the returned json into a ruby object.
43
103
  #
44
- # the payload is a command for i3
45
- # (like the commands you can bind to keys in the configuration file)
46
- # and will be executed directly after receiving it.
104
+ # Throws WrongMagicCode when magic word is wrong.
105
+ # Throws WrongType if returned type does not match expected.
47
106
  #
48
- # returns { "success" => true } for now.
49
- # i3 does send this reply without checks
50
- def command(payload)
51
- write format(MESSAGE_TYPE_COMMAND, payload)
52
- handle_response MESSAGE_TYPE_COMMAND
53
- end
54
-
55
- # gets the current workspaces.
56
- # the reply will be the list of workspaces
57
- # (see the reply section of i3 docu)
58
- def get_workspaces
59
- write format(MESSAGE_TYPE_GET_WORKSPACES)
60
- handle_response MESSAGE_TYPE_GET_WORKSPACES
61
- end
62
-
63
- # Gets the current outputs.
64
- # The reply will be a JSON-encoded list
65
- # of outputs
66
- # (see the reply section of i3 docu).
67
- def get_outputs
68
- write format(MESSAGE_TYPE_GET_OUTPUTS)
69
- handle_response MESSAGE_TYPE_GET_OUTPUTS
70
- end
71
-
72
- # reads the reply from the socket
73
- # and parse the returned json into a ruby object
74
- #
75
- # throws WrongMagicCode when magic word is wrong
76
- # throws WrongType if returned type does not match expected
77
- #
78
- # this is a bit duplicated code
79
- # but I don't know a way to read the full send reply
80
- # without knowing its length
107
+ # This is a bit duplicated code
108
+ # but I don't know a way to read the full send reply
109
+ # without knowing its length
81
110
  def handle_response(type)
82
111
  # reads 14 bytes
83
112
  # length of "i3-ipc" + 4 bytes length + 4 bytes type
@@ -91,8 +120,8 @@ module I3
91
120
  ::JSON.parse(answer)
92
121
  end
93
122
 
94
- # format the message
95
- # a typical message looks like
123
+ # Format the message.
124
+ # A typical message looks like
96
125
  # "i3-ipc" <message length> <message type> <payload>
97
126
  def self.format(type, payload=nil)
98
127
  size = payload ? payload.to_s.bytes.count : 0
@@ -105,9 +134,9 @@ module I3
105
134
  self.class.format(type, payload)
106
135
  end
107
136
 
108
- # parse a full ipc response
109
- # similar to handle_response,
110
- # but parses full reply as received by EventMachine
137
+ # Parse a full ipc response.
138
+ # Similar to handle_response,
139
+ # but parses full reply as received by EventMachine.
111
140
  #
112
141
  # returns an Array containing the
113
142
  # reply type and the parsed data
@@ -126,8 +155,8 @@ module I3
126
155
  self.class.parse_response(response)
127
156
  end
128
157
 
129
- # writes message to the socket
130
- # if socket is not connected, it connects first
158
+ # Writes message to the socket.
159
+ # If socket is not connected, it connects first.
131
160
  def write(msg)
132
161
  connect if @socket.nil? || closed?
133
162
  @last_write_length = @socket.write msg
@@ -137,20 +166,19 @@ module I3
137
166
  @socket.read(len)
138
167
  end
139
168
 
140
- # connects to the given socket
169
+ # Connects to the given socket.
141
170
  def connect
142
- @socket = UNIXSocket.new(@socket_path)
171
+ @socket = UNIXSocket.new(self.class.socket_path)
143
172
  end
144
173
 
145
- # closes the socket connection
174
+ # Closes the socket connection.
146
175
  def close
147
176
  @socket.close
148
177
  end
149
178
 
150
- # alias for @socket.closed? for easy access
179
+ # Alias for @socket.closed? for easy access
151
180
  def closed?
152
181
  @socket.closed?
153
182
  end
154
183
  end
155
184
  end
156
-
@@ -6,7 +6,8 @@ module I3
6
6
  extend self
7
7
  OUTPUT = $stdout
8
8
 
9
- def format_output(object, output)
9
+ def format_output(object, output, quiet)
10
+ return if quiet
10
11
  if output == :pretty_print
11
12
  PP.pp(object, OUTPUT)
12
13
  elsif output == :json
@@ -21,16 +22,16 @@ module I3
21
22
  trap('SIGINT') { EM.stop; puts }
22
23
  I3::IPC.subscribe([:workspace], path) do |em, type, data|
23
24
  case type
24
- when I3::IPC::MESSAGE_REPLY_GET_WORKSPACES
25
- format_output data, output
25
+ when I3::IPC.message_type_get_workspaces
26
+ format_output data, output, false
26
27
  when I3::IPC::EVENT_WORKSPACE
27
- em.send_data I3::IPC.format(I3::IPC::MESSAGE_TYPE_GET_WORKSPACES)
28
+ em.send_data I3::IPC.format(I3::IPC.message_type_get_workspaces)
28
29
  end
29
30
  end
30
31
  end
31
32
 
32
33
  def execute(*args)
33
- socket_file = File.expand_path('~/.i3/ipc.sock')
34
+ socket_file = nil
34
35
  type = 0
35
36
  quiet = false
36
37
  output = :default
@@ -38,12 +39,12 @@ module I3
38
39
  opts = OptionParser.new do |opts|
39
40
  opts.banner = "Usage: i3-ipc [options] [message]"
40
41
 
41
- s_desc = 'Set socket file, defaults to ~/.i3/ipc.sock'
42
+ s_desc = 'Set socket file, defaults to `i3 --get-socketpath` output'
42
43
  opts.on('-s SOCKET', '--socket SOCKET', s_desc) do |s|
43
44
  socket_file = File.expand_path(s)
44
45
  end
45
46
 
46
- t_desc = 'Set type, 0 = command, 1 = workspace list, 2 = subscribe to workspace event, 3 = output list, default: 0'
47
+ t_desc = 'Set type, 0 = command, 1 = workspace list, 2 = subscribe to workspace event, 3 = output list, 4 = tree list, default: 0'
47
48
  opts.on('-tTYPE', '--type TYPE', Integer, t_desc) do |t|
48
49
  type = t
49
50
  end
@@ -72,24 +73,28 @@ module I3
72
73
 
73
74
  opts.parse!(args)
74
75
 
75
- s = I3::IPC.new(socket_file)
76
+ socket_file ||= I3::IPC.socket_path
76
77
 
77
- case type
78
- when 0
79
- if args.empty?
80
- abort "error: message type needs a message"
81
- end
82
-
83
- payload = args.shift
84
- OUTPUT.puts s.command(payload).inspect unless quiet
85
- when I3::IPC::MESSAGE_TYPE_GET_WORKSPACES
86
- format_output s.get_workspaces, output
87
- when I3::IPC::MESSAGE_REPLY_SUBSCRIBE
78
+ if type == I3::IPC.message_type_subscribe
88
79
  subscribe socket_file, output
89
- when I3::IPC::MESSAGE_TYPE_GET_OUTPUTS
90
- format_output s.get_outputs, output
91
80
  else
92
- abort "error: type #{type} not yet implemented"
81
+ i3 = I3::IPC.new(socket_file)
82
+ arg = I3::IPC::COMMANDS.find {|t| t.first == type}
83
+ if arg
84
+ if arg.last == :none
85
+ format_output i3.send(arg[1]), output, quiet
86
+ elsif arg.last == :required
87
+ payload = args.shift
88
+ if payload.nil?
89
+ abort "error: payload needed."
90
+ else
91
+ format_output i3.send(arg[1], payload), output, quiet
92
+ end
93
+ elsif arg.last == :optional
94
+ payload = args.shift
95
+ format_output i3.send(arg[1], payload), output, quiet
96
+ end
97
+ end
93
98
  end
94
99
  end
95
100
  end
@@ -46,7 +46,7 @@ preamble
46
46
 
47
47
  File.readlines(file).each do |line|
48
48
  next if line =~ /^\s*#/
49
- next if line =~ /^require 'i3-ipc/
49
+ next if line =~ /^require(_relative)? 'i3-ipc/
50
50
  standalone << line
51
51
  end
52
52
  end
@@ -5,7 +5,7 @@ module I3
5
5
  extend self
6
6
 
7
7
  class SubscriptionConnection < EM::Connection
8
- def self.connect(subscription_list, socket_path=I3::IPC::SOCKET_PATH, &blk)
8
+ def self.connect(subscription_list, socket_path=nil, &blk)
9
9
  new_klass = Class.new(self)
10
10
  new_klass.send(:define_method, :initialize) do
11
11
  @subscription_list = subscription_list
@@ -16,7 +16,7 @@ module I3
16
16
 
17
17
  # send subscription to i3
18
18
  def post_init
19
- send_data I3::IPC.format(I3::IPC::MESSAGE_TYPE_SUBSCRIBE,
19
+ send_data I3::IPC.format(I3::IPC.message_type_subscribe,
20
20
  @subscription_list.to_json)
21
21
  end
22
22
 
@@ -26,7 +26,8 @@ module I3
26
26
  end
27
27
  end
28
28
 
29
- def subscribe(subscription_list, socket_path=I3::IPC::SOCKET_PATH, &blk)
29
+ def subscribe(subscription_list, socket_path=nil, &blk)
30
+ socket_path ||= I3::IPC.socket_path
30
31
  EM.run do
31
32
  SubscriptionConnection.connect(subscription_list,
32
33
  socket_path, &blk)
@@ -1,3 +1,3 @@
1
1
  module I3
2
- Version = '0.1.4'
2
+ Version = '0.2.0'
3
3
  end
@@ -1,67 +1,61 @@
1
- .\" generated with Ronn/v0.5
2
- .\" http://github.com/rtomayko/ronn/
1
+ .\" generated with Ronn/v0.7.3
2
+ .\" http://github.com/rtomayko/ronn/tree/0.7.3
3
3
  .
4
- .TH "I3\-IPC" "1" "April 2010" "badboy" "i3-ipc Manual"
4
+ .TH "I3\-IPC" "1" "August 2012" "badboy" "i3-ipc Manual"
5
5
  .
6
6
  .SH "NAME"
7
- \fBi3\-ipc\fR \-\- inter\-process communication with i3
7
+ \fBi3\-ipc\fR \- inter\-process communication with i3
8
8
  .
9
9
  .SH "SYNOPSIS"
10
10
  \fBi3\-ipc\fR [\fB\-s\fR] [\fB\-t type\fR] [\fB\-p\fR] [\fB\-j\fR] [\fB\-q\fR] [\fBmessage\fR]
11
11
  .
12
12
  .SH "DESCRIPTION"
13
- \fBi3\-ipc\fR can be used to communicate with i3, the improved tiling window manager, through the provided ipc socket. Useful for scripting the window manager.
13
+ \fBi3\-ipc\fR can be used to communicate with i3, the improved tiling window manager, through the provided ipc socket\. Useful for scripting the window manager\.
14
14
  .
15
15
  .P
16
16
  Currently implemented message types of i3 are the following:
17
17
  .
18
18
  .TP
19
19
  \fB0 (COMMAND)\fR
20
- The payload of the message is a command for i3
21
- (like the commands you can bind to keys in the configuration file)
22
- The command will be executed directly after receiving it.
23
- The reply will be always {"succes":true} for now.
20
+ The payload of the message is a command for i3 (like the commands you can bind to keys in the configuration file) The command will be executed directly after receiving it\. The reply will be always {"succes":true} for now\.
24
21
  .
25
22
  .TP
26
23
  \fB1 (GET_WORKSPACES)\fR
27
- Gets the current workspaces.
28
- The reply will be a JSON\-encoded list of workspaces.
24
+ Gets the current workspaces\. The reply will be a JSON\-encoded list of workspaces\.
29
25
  .
30
26
  .TP
31
27
  \fB2 (SUBSCRIBE)\fR
32
- Subscribes your connection to the \fBworkspace\fR event.
28
+ Subscribes your connection to the \fBworkspace\fR event\.
33
29
  .
34
30
  .TP
35
31
  \fB3 (GET_OUTPUTS)\fR
36
- Gets the current outputs.
37
- The reply will be a JSON\-encoded list of outputs.
32
+ Gets the current outputs\. The reply will be a JSON\-encoded list of outputs\.
38
33
  .
39
34
  .SH "OPTIONS"
40
- \fBi3\-ipc\fR's default mode of operation is to send the command (type 0) specified on the command line.
35
+ \fBi3\-ipc\fR\'s default mode of operation is to send the command (type 0) specified on the command line\.
41
36
  .
42
37
  .P
43
38
  These options can be used to change this behavior:
44
39
  .
45
40
  .TP
46
41
  \fB\-s\fR, \fB\-\-socket\fR
47
- Set the socket file, defaults to ~/.i3/ipc.sock
42
+ Set the socket file, defaults to ~/\.i3/ipc\.sock
48
43
  .
49
44
  .TP
50
45
  \fB\-t\fR, \fB\-\-type\fR
51
- Set the type. Passing a type of 0 is the default and will send the specified command, type 1 gets the current workspace list,
52
- type 2 subscribes to the workspace stream, type 3 gets the current output list.
46
+ Set the type\. Passing a type of 0 is the default and will send the specified command, type 1 gets the current workspace list, type 2 subscribes to the workspace stream, type 3 gets the current output list\.
53
47
  .
54
48
  .TP
55
49
  \fB\-p\fR, \fB\-\-pretty\-print\fR
56
- This will pretty print the received reply. Useful for the workspace list.
50
+ This will pretty print the received reply\. Useful for the workspace list\.
57
51
  .
58
52
  .TP
59
53
  \fB\-j\fR, \fB\-\-json\fR
60
- This will print the received reply as raw json\-encoded data. Useful to pass to another script.
54
+ This will print the received reply as raw json\-encoded data\. Useful to pass to another script\.
61
55
  .
62
56
  .TP
63
57
  \fB\-q\fR, \fB\-\-quiet\fR
64
- Turn off the output. Useful for command mode.
58
+ Turn off the output\. Useful for command mode\.
65
59
  .
66
60
  .TP
67
61
  \fBmessage\fR
@@ -72,11 +66,11 @@ You may additionally ask for help:
72
66
  .
73
67
  .TP
74
68
  \fB\-h\fR, \fB\-\-help\fR
75
- Print help.
69
+ Print help\.
76
70
  .
77
71
  .TP
78
72
  \fB\-m\fR, \fB\-\-man\fR
79
- Display this man page.
73
+ Display this man page\.
80
74
  .
81
75
  .SH "EXAMPLES"
82
76
  .
@@ -90,10 +84,10 @@ $ i3\-ipc "exec xterm"
90
84
  .fi
91
85
  .
92
86
  .SH "BUGS"
93
- \fIhttp://github.com/badboy/i3\-ipc/issues\fR
87
+ \fIhttp://github\.com/badboy/i3\-ipc/issues\fR
94
88
  .
95
89
  .SH "AUTHOR"
96
- Jan\-Erik Rediger:: badboy@archlinux.us
90
+ Jan\-Erik Rediger:: badboy@archlinux\.us
97
91
  .
98
92
  .SH "SEE ALSO"
99
- i3(1), i3\-msg(1), \fIhttp://i3.zekjur.net/\fR, \fIhttp://github.com/badboy/i3\-ipc\fR
93
+ i3(1), i3\-msg(1), \fIhttp://i3\.zekjur\.net/\fR, \fIhttp://github\.com/badboy/i3\-ipc\fR
@@ -2,74 +2,83 @@
2
2
  <html>
3
3
  <head>
4
4
  <meta http-equiv='content-type' value='text/html;charset=utf8'>
5
- <meta name='generator' value='Ronn/v0.5'>
6
- <title>i3-ipc(1) -- inter-process communication with i3</title>
7
- <style type='text/css'>
8
- body {margin:0}
9
- #man, #man code, #man pre, #man tt, #man kbd, #man samp {
10
- font-family:consolas,monospace;
11
- font-size:16px;
12
- line-height:1.3;
13
- color:#343331;
14
- background:#fff; }
15
- #man { max-width:89ex; text-align:justify; margin:0 25px 25px 25px }
16
- #man h1, #man h2, #man h3 { color:#232221;clear:left }
17
- #man h1 { font-size:28px; margin:15px 0 30px 0; text-align:center }
18
- #man h2 { font-size:18px; margin-bottom:0; margin-top:10px; line-height:1.3; }
19
- #man h3 { font-size:16px; margin:0 0 0 4ex; }
20
- #man p, #man ul, #man ol, #man dl, #man pre { margin:0 0 18px 0; }
21
- #man pre {
22
- color:#333231;
23
- background:#edeceb;
24
- padding:5px 7px;
25
- margin:0px 0 20px 0;
26
- border-left:2ex solid #ddd}
27
- #man pre + h2, #man pre + h3 {
28
- margin-top:22px;
29
- }
30
- #man h2 + pre, #man h3 + pre {
31
- margin-top:5px;
32
- }
33
- #man > p, #man > ul, #man > ol, #man > dl, #man > pre { margin-left:8ex; }
34
- #man dt { margin:0; clear:left }
35
- #man dt.flush { float:left; width:8ex }
36
- #man dd { margin:0 0 0 9ex }
37
- #man code, #man strong, #man b { font-weight:bold; color:#131211; }
38
- #man pre code { font-weight:normal; color:#232221; background:inherit }
39
- #man em, var, u {
40
- font-style:normal; color:#333231; border-bottom:1px solid #999; }
41
- #man h1.man-title { display:none; }
42
- #man ol.man, #man ol.man li { margin:2px 0 10px 0; padding:0;
43
- float:left; width:33%; list-style-type:none;
44
- text-transform:uppercase; font-size:18px; color:#999;
45
- letter-spacing:1px;}
46
- #man ol.man { width:100%; }
47
- #man ol.man li.tl { text-align:left }
48
- #man ol.man li.tc { text-align:center;letter-spacing:4px }
49
- #man ol.man li.tr { text-align:right }
50
- #man ol.man a { color:#999 }
51
- #man ol.man a:hover { color:#333231 }
5
+ <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
6
+ <title>i3-ipc(1) - inter-process communication with i3</title>
7
+ <style type='text/css' media='all'>
8
+ /* style: man */
9
+ body#manpage {margin:0}
10
+ .mp {max-width:100ex;padding:0 9ex 1ex 4ex}
11
+ .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
12
+ .mp h2 {margin:10px 0 0 0}
13
+ .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
14
+ .mp h3 {margin:0 0 0 4ex}
15
+ .mp dt {margin:0;clear:left}
16
+ .mp dt.flush {float:left;width:8ex}
17
+ .mp dd {margin:0 0 0 9ex}
18
+ .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
19
+ .mp pre {margin-bottom:20px}
20
+ .mp pre+h2,.mp pre+h3 {margin-top:22px}
21
+ .mp h2+pre,.mp h3+pre {margin-top:5px}
22
+ .mp img {display:block;margin:auto}
23
+ .mp h1.man-title {display:none}
24
+ .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
25
+ .mp h2 {font-size:16px;line-height:1.25}
26
+ .mp h1 {font-size:20px;line-height:2}
27
+ .mp {text-align:justify;background:#fff}
28
+ .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
29
+ .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
30
+ .mp u {text-decoration:underline}
31
+ .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
32
+ .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
33
+ .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
34
+ .mp b.man-ref {font-weight:normal;color:#434241}
35
+ .mp pre {padding:0 4ex}
36
+ .mp pre code {font-weight:normal;color:#434241}
37
+ .mp h2+pre,h3+pre {padding-left:0}
38
+ ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
39
+ ol.man-decor {width:100%}
40
+ ol.man-decor li.tl {text-align:left}
41
+ ol.man-decor li.tc {text-align:center;letter-spacing:4px}
42
+ ol.man-decor li.tr {text-align:right;float:right}
52
43
  </style>
53
44
  </head>
54
- <body>
55
- <div id='man'>
56
-
57
- <h1 class='man-title'>i3-ipc(1)</h1>
58
-
59
- <ol class='head man'>
60
- <li class='tl'>i3-ipc(1)</li>
61
- <li class='tc'>i3-ipc Manual</li>
62
- <li class='tr'>i3-ipc(1)</li>
63
- </ol>
64
-
65
- <h2 id='NAME'>NAME</h2>
66
- <p><code>i3-ipc</code> -- inter-process communication with i3</p>
67
-
68
- <h2>SYNOPSIS</h2>
45
+ <!--
46
+ The following styles are deprecated and will be removed at some point:
47
+ div#man, div#man ol.man, div#man ol.head, div#man ol.man.
48
+
49
+ The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
50
+ .man-navigation should be used instead.
51
+ -->
52
+ <body id='manpage'>
53
+ <div class='mp' id='man'>
54
+
55
+ <div class='man-navigation' style='display:none'>
56
+ <a href="#NAME">NAME</a>
57
+ <a href="#SYNOPSIS">SYNOPSIS</a>
58
+ <a href="#DESCRIPTION">DESCRIPTION</a>
59
+ <a href="#OPTIONS">OPTIONS</a>
60
+ <a href="#EXAMPLES">EXAMPLES</a>
61
+ <a href="#BUGS">BUGS</a>
62
+ <a href="#AUTHOR">AUTHOR</a>
63
+ <a href="#SEE-ALSO">SEE ALSO</a>
64
+ </div>
65
+
66
+ <ol class='man-decor man-head man head'>
67
+ <li class='tl'>i3-ipc(1)</li>
68
+ <li class='tc'>i3-ipc Manual</li>
69
+ <li class='tr'>i3-ipc(1)</li>
70
+ </ol>
71
+
72
+ <h2 id="NAME">NAME</h2>
73
+ <p class="man-name">
74
+ <code>i3-ipc</code> - <span class="man-whatis">inter-process communication with i3</span>
75
+ </p>
76
+
77
+ <h2 id="SYNOPSIS">SYNOPSIS</h2>
69
78
 
70
79
  <p><code>i3-ipc</code> [<code>-s</code>] [<code>-t type</code>] [<code>-p</code>] [<code>-j</code>] [<code>-q</code>] [<code>message</code>]</p>
71
80
 
72
- <h2>DESCRIPTION</h2>
81
+ <h2 id="DESCRIPTION">DESCRIPTION</h2>
73
82
 
74
83
  <p><code>i3-ipc</code> can be used to communicate with i3, the improved tiling window manager, through the provided ipc socket. Useful for scripting the window manager.</p>
75
84
 
@@ -88,7 +97,7 @@
88
97
  </dl>
89
98
 
90
99
 
91
- <h2>OPTIONS</h2>
100
+ <h2 id="OPTIONS">OPTIONS</h2>
92
101
 
93
102
  <p><code>i3-ipc</code>'s default mode of operation is to send the command (type 0) specified on the command line.</p>
94
103
 
@@ -113,7 +122,7 @@ type 2 subscribes to the workspace stream, type 3 gets the current output list.<
113
122
  </dl>
114
123
 
115
124
 
116
- <h2>EXAMPLES</h2>
125
+ <h2 id="EXAMPLES">EXAMPLES</h2>
117
126
 
118
127
  <pre><code>$ i3-ipc -t 1
119
128
  $ i3-ipc -t 2 -p
@@ -121,25 +130,25 @@ $ i3-ipc -t 3 -j
121
130
  $ i3-ipc "exec xterm"
122
131
  </code></pre>
123
132
 
124
- <h2>BUGS</h2>
133
+ <h2 id="BUGS">BUGS</h2>
125
134
 
126
- <p><a href="http://github.com/badboy/i3-ipc/issues">http://github.com/badboy/i3-ipc/issues</a></p>
135
+ <p><a href="http://github.com/badboy/i3-ipc/issues" data-bare-link="true">http://github.com/badboy/i3-ipc/issues</a></p>
127
136
 
128
- <h2>AUTHOR</h2>
137
+ <h2 id="AUTHOR">AUTHOR</h2>
129
138
 
130
139
  <p>Jan-Erik Rediger:: badboy@archlinux.us</p>
131
140
 
132
- <h2>SEE ALSO</h2>
141
+ <h2 id="SEE-ALSO">SEE ALSO</h2>
133
142
 
134
- <p>i3(1), i3-msg(1), <a href="http://i3.zekjur.net/">http://i3.zekjur.net/</a>, <a href="http://github.com/badboy/i3-ipc">http://github.com/badboy/i3-ipc</a></p>
143
+ <p><span class="man-ref">i3<span class="s">(1)</span></span>, <span class="man-ref">i3-msg<span class="s">(1)</span></span>, <a href="http://i3.zekjur.net/" data-bare-link="true">http://i3.zekjur.net/</a>, <a href="http://github.com/badboy/i3-ipc" data-bare-link="true">http://github.com/badboy/i3-ipc</a></p>
135
144
 
136
145
 
137
- <ol class='foot man'>
138
- <li class='tl'>badboy</li>
139
- <li class='tc'>April 2010</li>
140
- <li class='tr'>i3-ipc(1)</li>
141
- </ol>
146
+ <ol class='man-decor man-foot man foot'>
147
+ <li class='tl'>badboy</li>
148
+ <li class='tc'>August 2012</li>
149
+ <li class='tr'>i3-ipc(1)</li>
150
+ </ol>
142
151
 
143
- </div>
152
+ </div>
144
153
  </body>
145
154
  </html>
metadata CHANGED
@@ -1,115 +1,141 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: i3-ipc
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 1
8
- - 4
9
- version: 0.1.4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Jan-Erik Rediger
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2010-04-16 00:00:00 +02:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-03-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: eventmachine
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.12.10
22
+ type: :runtime
22
23
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 0
29
- - 12
30
- - 10
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
31
29
  version: 0.12.10
30
+ - !ruby/object:Gem::Dependency
31
+ name: yajl-ruby
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.1.0
32
38
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: shoulda
36
39
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 2
43
- - 10
44
- - 3
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.1.0
46
+ - !ruby/object:Gem::Dependency
47
+ name: shoulda
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
45
53
  version: 2.10.3
46
54
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 2.10.3
62
+ - !ruby/object:Gem::Dependency
49
63
  name: mocha
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.9.8
70
+ type: :development
50
71
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
- - 9
58
- - 8
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
59
77
  version: 0.9.8
78
+ - !ruby/object:Gem::Dependency
79
+ name: ronn
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 0.7.3
60
86
  type: :development
61
- version_requirements: *id003
62
- description: " uses the ipc socket of i3 to send commands or get information directly from the window manager. Useful for scripting the window manager.'\n"
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.7.3
94
+ description: ! ' uses the ipc socket of i3 to send commands or get information directly
95
+ from the window manager. Useful for scripting the window manager.''
96
+
97
+ '
63
98
  email: badboy@archlinux.us
64
- executables:
99
+ executables:
65
100
  - i3-ipc
66
101
  extensions: []
67
-
68
102
  extra_rdoc_files: []
69
-
70
- files:
103
+ files:
71
104
  - README.markdown
72
105
  - Rakefile
73
106
  - LICENSE
74
- - lib/i3-ipc/subscription.rb
75
- - lib/i3-ipc/manpage.rb
107
+ - lib/i3-ipc.rb
76
108
  - lib/i3-ipc/standalone.rb
77
- - lib/i3-ipc/version.rb
109
+ - lib/i3-ipc/subscription.rb
78
110
  - lib/i3-ipc/runner.rb
79
- - lib/i3-ipc.rb
111
+ - lib/i3-ipc/version.rb
112
+ - lib/i3-ipc/manpage.rb
80
113
  - bin/i3-ipc
81
114
  - man/i3-ipc.1.html
82
- - man/i3-ipc.1
83
115
  - man/i3-ipc.1.ronn
84
- has_rdoc: true
116
+ - man/i3-ipc.1
85
117
  homepage: http://github.com/badboy/i3-ipc
86
118
  licenses: []
87
-
88
119
  post_install_message:
89
120
  rdoc_options: []
90
-
91
- require_paths:
121
+ require_paths:
92
122
  - lib
93
- required_ruby_version: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- segments:
98
- - 0
99
- version: "0"
100
- required_rubygems_version: !ruby/object:Gem::Requirement
101
- requirements:
102
- - - ">="
103
- - !ruby/object:Gem::Version
104
- segments:
105
- - 0
106
- version: "0"
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
107
135
  requirements: []
108
-
109
136
  rubyforge_project:
110
- rubygems_version: 1.3.6
137
+ rubygems_version: 1.8.25
111
138
  signing_key:
112
139
  specification_version: 3
113
140
  summary: inter-process communication with i3, the improved tiling window manager.
114
141
  test_files: []
115
-