Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

upgrade to Inochi 5.0.2; manual is now AsciiDoc

  • Loading branch information...
commit aba32c05a7a38c973fcc4705f25a4739ef617eb6 1 parent ae1f857
@sunaku authored
View
30 BEYOND
@@ -1,21 +1,15 @@
-%#----------------------------------------------------------------------------
-## SEE ALSO
-%#----------------------------------------------------------------------------
+== SEE ALSO
-irb(1),
-wmiir(1),
-wmii(1)
+irb(1), wmiir(1), wmii(1)
-%#----------------------------------------------------------------------------
-%# Markdown link references
-%#----------------------------------------------------------------------------
+[sect2]
+=== References
-[Inochi]: <%= Inochi::WEBSITE %>
-[libixp]: http://libs.suckless.org/libixp
-[p9p]: http://cm.bell-labs.com/magic/man2html/5/intro
-[RubyGems]: http://rubygems.org
-[Ruby]: http://ruby-lang.org
-[sunaku/wmiirc]: http://github.com/sunaku/wmiirc
-[sunaku/wmiirc/network]: http://github.com/sunaku/wmiirc/network
-[wmii]: http://wmii.suckless.org
-[XCB cookie]: http://www.x.org/releases/X11R7.5/doc/libxcb/tutorial/#requestsreplies
+[horizontal]
+[[[Inochi]]]:: <%= Inochi::WEBSITE %>
+[[[libixp]]]:: http://libs.suckless.org/libixp
+[[[p9p]]]:: http://cm.bell-labs.com/magic/man2html/5/intro
+[[[RubyGems]]]:: http://rubygems.org
+[[[Ruby]]]:: http://ruby-lang.org
+[[[wmii]]]:: http://wmii.suckless.org
+[[[XCB-cookies]]]:: http://www.x.org/releases/X11R7.5/doc/libxcb/tutorial/#requestsreplies
View
15 CREDITS
@@ -1,12 +1,8 @@
-%#----------------------------------------------------------------------------
-## AUTHORS
-%#----------------------------------------------------------------------------
+== AUTHORS
Suraj N. Kurapati
-%#----------------------------------------------------------------------------
-## CREDITS
-%#----------------------------------------------------------------------------
+=== Credits
Christoph Blank,
Kenneth De Winter,
@@ -16,9 +12,6 @@ Nathan Neff,
Sebastian Chmielewski,
Simon Hafner
-%#----------------------------------------------------------------------------
-## LICENSE
-%#----------------------------------------------------------------------------
+=== License
-%# See the file named "LICENSE".
-%< "LICENSE"
+%< 'LICENSE'
View
228 EXAMPLES
@@ -1,228 +0,0 @@
-%#----------------------------------------------------------------------------
-## EXAMPLES
-%#----------------------------------------------------------------------------
-
-Now that you know how to start the interactive shell (see **DESCRIPTION**
-above) let us walk through a series of examples that highlight the main
-features of Rumai. You can follow along by copying & pasting the presented
-commands into the interactive shell.
-
-%|open_terms = lambda do
- Launch a few terminals so that we have something to work with:
-
- colors = %w[ red green blue black orange brown gray navy gold ]
- colors.each {|c| system "xterm -bg #{c} -title #{c} -e sh -c read &" }
-
-%|close_terms = lambda do
- Close the terminals we launched earlier:
-
- terms = curr_view.clients.select {|c| colors.include? c.label.read }
- terms.each {|c| c.kill }
-
-%#----------------------------------------------------------------------------
-### Automated client arrangement
-%#----------------------------------------------------------------------------
-
-% open_terms.call
-
-Arrange all clients in a grid:
-
- curr_view.arrange_in_grid
-
-Arrange all clients in a diamond shape:
-
- curr_view.arrange_in_diamond
-
-Arrange all clients like LarsWM does:
-
- curr_view.arrange_as_larswm
-
-% close_terms.call
-
-%#----------------------------------------------------------------------------
-### Multiple client grouping
-%#----------------------------------------------------------------------------
-
-% open_terms.call
-
-Add the red, green, and blue terminals into the "grouping":
-
- terms = curr_view.clients.select do |c|
- %%w[red green blue].include? c.label.read
- end
- terms.each {|c| c.group }
-
-You should now see a new button labelled as "@" on the left-hand side of
-wmii's bar, indicating that there is now a new view labelled "@" in wmii.
-Let us inspect what clients this mysterious view contains:
-
- v = View.new "@"
- puts v.clients.map {|c| c.label.read }
-
-Aha! The mysterious view contains the red, green, and blue clients we
-recently "grouped". Thus, by adding a client to the "grouping", we are
-simply tagging the client with the "@" token.
-
-Now that we have put some clients into the "grouping", let us move all
-clients in the grouping to the floating area in the current view:
-
- grouping.each {|c| c.send "toggle" }
-
-Neat! Let us bring them back into the managed area:
-
- grouping.each {|c| c.send "toggle" }
-
-% close_terms.call
-
-In summary, you can select multiple clients (by adding them to the
-"grouping") and perform operations on them. This is useful when you want
-to do something with a group of clients but do not want to manually focus
-one, perform the action, focus the next one, and so on.
-
-Another important aspect is that selected clients stay selected until they
-are unselected. This allows you to continue performing tasks on the
-selection without having to reselect the same clients after every
-operation.
-
-%#----------------------------------------------------------------------------
-### Easy column manipulation
-%#----------------------------------------------------------------------------
-
-% open_terms.call
-
-You can insert a group of clients to the top, bottom, or after the
-currently focused client of _any_ column using Array-like methods.
-
-Give each client its own column (one client per column):
-
- curr_view.each_column {|c| c.length = 1 }
-
-Put (at most) three clients in every column:
-
- curr_view.each_column {|c| c.length = 3 }
-
-Move the red, green, and blue clients into the floating area:
-
- rgb = %w[red green blue]
- terms = curr_view.clients.select {|c| rgb.include? c.label.read }
- curr_view.areas[0].push terms
-
-Slurp all floating clients into the last column:
-
- list = curr_view.areas
- a, b = list.first, list.last
- b.concat a
-
-Set the last column's layout to stacking mode:
-
- b.layout = 'stack'
-
-Move the red, green, and blue clients to the top of the second column:
-
- curr_view.areas[2].unshift terms
-
-Move the red, green, and blue clients to the bottom of the third column:
-
- curr_view.areas[3].push terms
-
-% close_terms.call
-
-%#----------------------------------------------------------------------------
-### Easy client manipulation
-%#----------------------------------------------------------------------------
-
-% open_terms.call
-
-Obtain a reference to the red client:
-
- red = curr_view.clients.find {|c| c.label.read == "red" }
-
-Show the red client's current tags:
-
- red.tags
-
-Add the "foo" and "bar" tags to the red client:
-
- red.tag "foo", "bar"
-
-Remove the "bar" tag from the red client:
-
- red.untag "bar"
-
-Do complex operations on the red client's tags:
-
- red.with_tags { concat %w[a b c]; push 'z'; delete 'c' }
-
-Focus the next client after the red client:
-
- red.next.focus
- curr_client == red.next #=> true
-
-Notice that by focusing a client, we make it the current client.
-
-Focus the red client on a different view:
-
- orig = curr_view
- v = red.views.last
- red.focus v
-
-Return to the original view:
-
- orig.focus
-
-Send the red client to the last column:
-
- red.send curr_view.areas.last
-
-% close_terms.call
-
-%#----------------------------------------------------------------------------
-### Traversing the file system
-%#----------------------------------------------------------------------------
-
-Show the root node of wmii's IXP file system:
-
- fs
-
-Show the names of all files at the root level:
-
- fs.entries
-
-Show the parent of the root node:
-
- fs.parent
-
-Show the children of the root node:
-
- fs.children
-
-Navigate into to the `/lbar/` directory:
-
- n1 = fs.lbar
- n2 = fs['lbar']
- n1 == n2 #=> true
- left_bar = n1
-
-Notice that you can traverse the file system hierarchy by simply calling
-methods on node objects. Alternatively, you can traverse by specifying an
-arbitrary sub-path (relative path) using the `[]` operator on a node.
-
-Create a new temporary button:
-
- b = left_bar.rumai_example # path of new button
- b.exist? #=> false
- b.create
- b.exist? #=> true
-
-You should now see an empty button on the left-hand side of the wmii bar.
-
-Color the button black-on-white and label it as "hello world":
-
- content = "#000000 #ffffff #000000 hello world"
- b.write content
- b.read == content #=> true
-
-Remove the temporary button:
-
- b.remove
- b.exist? #=> false
View
91 HACKING
@@ -1,56 +1,53 @@
-%#----------------------------------------------------------------------------
-## HACKING
-%#----------------------------------------------------------------------------
+== HACKING
-This section is meant for people who want to develop Rumai's source code.
-
-%#----------------------------------------------------------------------------
-### Prerequisites
-%#----------------------------------------------------------------------------
+=== Prerequisites
Install Ruby libraries necessary for development:
- gem install rumai --development
+------------------------------------------------------------------------------
+gem install rumai --development
+------------------------------------------------------------------------------
-%#----------------------------------------------------------------------------
-### Infrastructure
-%#----------------------------------------------------------------------------
+=== Infrastructure
-[Inochi] serves as the project infrastructure for Rumai. It handles tasks
-such as building this help manual and API documentation, and packaging,
-announcing, and publishing new releases. See its help manual and list of
-tasks to get started:
+<<Inochi>> serves as the project infrastructure for Rumai. It
+handles tasks such as building this help manual and API documentation, and
+packaging, announcing, and publishing new releases. See its help manual and
+list of tasks to get started:
- inochi --help # display help manual
- inochi --tasks # list available tasks
+------------------------------------------------------------------------------
+inochi --help # display help manual
+inochi --tasks # list available tasks
+------------------------------------------------------------------------------
-%#----------------------------------------------------------------------------
-### $LOAD_PATH setup
-%#----------------------------------------------------------------------------
+=== $LOAD_PATH setup
Ensure that the `lib/` directory is listed in Ruby's `$LOAD_PATH` before you
use any libraries therein or run any executables in the `bin/` directory.
This can be achieved by passing an option to Ruby:
- ruby -Ilib bin/rumai
- irb -Ilib -r rumai
+------------------------------------------------------------------------------
+ruby -Ilib bin/rumai
+irb -Ilib -r rumai
+------------------------------------------------------------------------------
Or by setting the `$RUBYLIB` environment variable:
- export RUBYLIB=lib # bash, ksh, zsh
- setenv RUBYLIB lib # csh
- set -x RUBYLIB lib # fish
+------------------------------------------------------------------------------
+export RUBYLIB=lib # bash, ksh, zsh
+setenv RUBYLIB lib # csh
+set -x RUBYLIB lib # fish
- ruby bin/rumai
- irb -r rumai
+ruby bin/rumai
+irb -r rumai
+------------------------------------------------------------------------------
-Or by running Ruby through the [ruby-wrapper](
-http://github.com/chneukirchen/rup/blob/master/ruby-wrapper ) tool.
+Or by running Ruby through the
+http://github.com/chneukirchen/rup/blob/master/ruby-wrapper[ruby-wrapper]
+tool.
-%#----------------------------------------------------------------------------
-### RubyGems setup
-%#----------------------------------------------------------------------------
+=== RubyGems setup
If you use Ruby 1.8 or older, then ensure that RubyGems is activated before
you use any libraries in the `lib/` directory or run any executables in the
@@ -58,31 +55,33 @@ you use any libraries in the `lib/` directory or run any executables in the
This can be achieved by passing an option to Ruby:
- ruby -rubygems bin/rumai
- irb -rubygems -r rumai
+------------------------------------------------------------------------------
+ruby -rubygems bin/rumai
+irb -rubygems -r rumai
+------------------------------------------------------------------------------
Or by setting the `$RUBYOPT` environment variable:
- export RUBYOPT=-rubygems # bash, ksh, zsh
- setenv RUBYOPT -rubygems # csh
- set -x RUBYOPT -rubygems # fish
+------------------------------------------------------------------------------
+export RUBYOPT=-rubygems # bash, ksh, zsh
+setenv RUBYOPT -rubygems # csh
+set -x RUBYOPT -rubygems # fish
+------------------------------------------------------------------------------
-%#----------------------------------------------------------------------------
-### Running tests
-%#----------------------------------------------------------------------------
+=== Running tests
Simply execute the included test runner, which sets up Ruby's `$LOAD_PATH` for
testing, loads the `test/helper.rb` file, and then evaluates all
`test/**/*_test.rb` files:
- ruby test/runner
+------------------------------------------------------------------------------
+ruby test/runner
+------------------------------------------------------------------------------
Its exit status will indicate whether all tests have passed. It may also
print additional pass/fail information depending on the testing library used
in the `test/helper.rb` file.
-%#----------------------------------------------------------------------------
-### Contributing
-%#----------------------------------------------------------------------------
+=== Contributing
-Fork this project on GitHub (see **Resources** above) and send a pull request.
+<%= @code_repo_url %>[Fork this project on GitHub] and send a pull request.
View
364 HISTORY
@@ -1,347 +1,305 @@
-%#----------------------------------------------------------------------------
-## HISTORY
-%#----------------------------------------------------------------------------
+== HISTORY
-This section contains release notes of current and past releases.
-
-%#----------------------------------------------------------------------------
-### Version 3.3.0 (2010-07-16)
-%#----------------------------------------------------------------------------
+=== Version 3.3.0 (2010-07-16)
This release adds support for growing and nudging clients, adds an
abstraction for status bar applets, and beautifies the source code.
-New features:
+.New features
+
+* Add `Rumai::Barlet` class for easier status bar applets. It exposes the
+ new, independent `colors` and `label` attributes introduced into the bar
+ file format by wmii-hg2743. It is also backwards-compatible with older
+ wmii versions where the aforementioned attributes were conjoined.
- * Add `Rumai::Barlet` class for easier status bar applets. It exposes the
- new, independent `colors` and `label` attributes introduced into the bar
- file format by wmii-hg2743. It is also backwards-compatible with older
- wmii versions where the aforementioned attributes were conjoined.
+* Add `Rumai::Client#grow` and `Rumai::Client#nudge` methods
+ http://github.com/sunaku/rumai/issues/6[requested by Nathan Neff].
+ See "The /tag/ Hierarchy" in the wmii manpage for usage information.
- * Add `Rumai::Client#grow` and `Rumai::Client#nudge` methods [requested](
- http://github.com/sunaku/rumai/issues/6 ) by Nathan Neff. See "The
- /tag/ Hierarchy" in the wmii manpage for usage information.
+.Bug fixes
-Housekeeping:
+* Add workaround for the
+ http://code.google.com/p/wmii/issues/detail?id=206[wmii-hg2734 color tuple
+ bug] in the test suite.
- * Add workaround for [wmii-hg2734 color tuple bug](
- http://code.google.com/p/wmii/issues/detail?id=206 ) in the test suite.
+.Housekeeping
- * Found real names for some anonymous contributors.
+* Found real names for some anonymous contributors.
- * Clean up the source code formatting and organization.
+* Clean up the source code formatting and organization.
-%#----------------------------------------------------------------------------
-### Version 3.2.4 (2010-06-06)
-%#----------------------------------------------------------------------------
+=== Version 3.2.4 (2010-06-06)
This release fixes an IXP transport layer bug under Ruby 1.8.7.
-Bug fixes:
+.Bug fixes
* `IO#ungetc` does not accept a one-character string in Ruby 1.8.7.
+ Thanks to Sebastian Chmielewski for reporting
+ http://github.com/sunaku/rumai/issues/3[this issue].
- Thanks to Sebastian Chmielewski for reporting [this issue](
- http://github.com/sunaku/rumai/issues/3 ).
-
-%#----------------------------------------------------------------------------
-### Version 3.2.3 (2010-04-28)
-%#----------------------------------------------------------------------------
+=== Version 3.2.3 (2010-04-28)
This release adds a UNIX manual page and requires wmii 3.9 or newer.
-Bug fixes:
+.Bug fixes
-* `Rumai::Area#unshift` needs wmii 3.9 or newer.
- The help manual has been corrected accordingly.
+* `Rumai::Area#unshift` needs wmii 3.9 or newer. The help manual has been
+ corrected accordingly. Thanks to Mattia Gheda for reporting
+ http://github.com/sunaku/wmiirc/issues/8[this issue].
- Thanks to Mattia Gheda for reporting [this issue](
- http://github.com/sunaku/wmiirc/issues/8 ).
-
-Housekeeping:
+.Housekeeping
* Upgrade to Inochi 3.0.0. Run `rumai --help` to see the UNIX manual page!
* Move IRB session creation code from rumai(1) into `rumai/irb` sub-library.
-%#----------------------------------------------------------------------------
-### Version 3.2.2 (2010-04-01)
-%#----------------------------------------------------------------------------
+=== Version 3.2.2 (2010-04-01)
This release fixes some warnings that appeared during installation and
performs some minor housekeeping.
-Bug fixes:
-
- * Warnings of the following form appeared during gem installation:
-
- Unrecognized directive '...' in lib/rumai/inochi.yaml
+.Bug fixes
- Thanks to Mattia Gheda for reporting this.
+* Warnings of the following form appeared during gem installation:
++
+ Unrecognized directive '...' in lib/rumai/inochi.yaml
++
+Thanks to Mattia Gheda for reporting this.
-Housekeeping:
+.Housekeeping
- * Upgrade to Inochi 2.0.0-rc2 for managing this project.
+* Upgrade to Inochi 2.0.0-rc2 for managing this project.
-%#----------------------------------------------------------------------------
-### Version 3.2.1 (2010-03-22)
-%#----------------------------------------------------------------------------
+=== Version 3.2.1 (2010-03-22)
This release improves multi-threading support in Rumai's pure-Ruby
-implementation of the [IXP file-system interface][libixp].
+implementation of the <<libixp, IXP file-system interface>>.
-Thank you:
+.Thank you
- * Kenneth De Winter reported the issue of status bar applets not refreshing
- according to their prescribed schedule (this is particularly noticable
- in the clock applet) and verified my fix for the problem.
+* Kenneth De Winter reported the issue of status bar applets not refreshing
+ according to their prescribed schedule (this is particularly noticable
+ in the clock applet) and verified my fix for the problem.
-Bug fixes:
+.Bug fixes
- * Perform a blocking I/O read to recieve a 9P2000 message in
- `Rumai::IXP::Agent#recv` only if recieve buffer is empty. This gives
- other threads a chance to check the recieve buffer for their response.
- instead of being blocked by us as we greedily hold on to the 9P2000
- message stream until our expected response arrives.
+* Perform a blocking I/O read to recieve a 9P2000 message in
+ `Rumai::IXP::Agent#recv` only if recieve buffer is empty. This gives
+ other threads a chance to check the recieve buffer for their response.
+ instead of being blocked by us as we greedily hold on to the 9P2000
+ message stream until our expected response arrives.
-Housekeeping:
+.Housekeeping
- * Upgrade to Inochi 2.0.0-rc1 and Dfect 2.0.0.
+* Upgrade to Inochi 2.0.0-rc1 and Dfect 2.0.0.
-%#----------------------------------------------------------------------------
-### Version 3.2.0 (2009-11-17)
-%#----------------------------------------------------------------------------
+=== Version 3.2.0 (2009-11-17)
This release adds a new automated view arrangement, simplifies the IXP
transport layer, and cleans up the code and API documentation.
-New features:
+.New features
- * Add `Rumai::View#arrange_in_stacks` automated view arrangement.
+* Add `Rumai::View#arrange_in_stacks` automated view arrangement.
- * Convert `:stack` and `:max` arguments into wmii 3.9 syntax in
- `Rumai::Area#layout=`.
+* Convert `:stack` and `:max` arguments into wmii 3.9 syntax in
+ `Rumai::Area#layout=`.
-Bug fixes:
+.Bug fixes
- * Rewrote IXP transport layer (`Rumai::IXP::Agent`) to *not* use a
- background thread, according to [the XCB cookie approach][XCB cookie].
+* Rewrote IXP transport layer (`Rumai::IXP::Agent`) to _not_ use a
+ background thread, according to <<XCB-cookies, the XCB cookie approach>>.
-Housekeeping:
+.Housekeeping
- * Clean up some code and API docs.
+* Clean up some code and API docs.
- * Reduce amount of string concatenation in `Struct#to_9p`.
+* Reduce amount of string concatenation in `Struct#to_9p`.
-%#----------------------------------------------------------------------------
-### Version 3.1.1 (2009-11-16)
-%#----------------------------------------------------------------------------
+=== Version 3.1.1 (2009-11-16)
This release fixes bugs in automated view arrangements and updates the user
manual.
-Thank you:
+.Bug fixes
- * Nathan Neff reported the client ordering bug in automated view
- arrangements.
+* The relative order of clients was not being preserved during view
+ arrangements. Thanks to Nathan Neff for reporting this.
-Bug fixes:
+* Focus on the current view was lost after automated view arrangement was
+ applied if the current view was not the first view on which the initially
+ focused (before the automated arrangement was applied) client appeared.
- * The relative order of clients was not being preserved during view
- arrangements.
-
- * Focus on the current view was lost after automated view arrangement was
- applied if the current view was not the first view on which the initially
- focused (before the automated arrangement was applied) client appeared.
-
-%#----------------------------------------------------------------------------
-### Version 3.1.0 (2009-10-02)
-%#----------------------------------------------------------------------------
+=== Version 3.1.0 (2009-10-02)
This release adds new methods, fixes some bugs, and revises the manual.
-New features:
+.New features
- * Add `Client#float` methods to manipulate floating status.
+* Add `Client#float` methods to manipulate floating status.
- * Add `Client#manage` methods to manipulate managed status.
+* Add `Client#manage` methods to manipulate managed status.
- * The `Client#tags=` method now accepts '~' and '!' tag prefixes.
+* The `Client#tags=` method now accepts '~' and '!' tag prefixes.
-Bug fixes:
+.Bug fixes
- * There is no `View#move_focus` method, only `View#select`.
+* There is no `View#move_focus` method, only `View#select`.
- * Assertion failure in test suite because all files in `/rbar`
- (inside wmii's IXP filesystem) contain an automatic color header when
- read.
+* Assertion failure in test suite because all files in `/rbar`
+ (inside wmii's IXP filesystem) contain an automatic color header when
+ read.
-Housekeeping:
+.Housekeeping
- * Use simpler Copyright reminder at the top of every file.
+* Use simpler Copyright reminder at the top of every file.
- * Open source is for fun, so [be
- nice](http://loiclemeur.com/english/2009/03/never-criticize-your-competitors.html):
- speak of "related works" instead of "competitors".
+* Open source is for fun, so speak of "related works", not "competitors".
-%#----------------------------------------------------------------------------
-### Version 3.0.0 (2009-05-11)
-%#----------------------------------------------------------------------------
+=== Version 3.0.0 (2009-05-11)
This release revises method names, adds new methods, and fixes a bug.
-Incompatible changes:
-
- * Rename `#toggle_` methods to use `!` suffix in their names.
+.Incompatible changes
- * Rename `#float` methods to `#floating`.
+* Rename `#toggle_` methods to use `!` suffix in their names.
- * Rename `View#floater` method to `View#floating_area`.
+* Rename `#float` methods to `#floating`.
-New features:
+* Rename `View#floater` method to `View#floating_area`.
- * Add `Client#stick` methods to manipulate sticky status.
+.New features
- * Add `Client#fullscreen` methods to manipulate fullscreen status.
+* Add `Client#stick` methods to manipulate sticky status.
- * Add `Client#slay` method which is a forceful version of `#kill`.
+* Add `Client#fullscreen` methods to manipulate fullscreen status.
- * Add `View#select` method to move focus relatively inside a view.
+* Add `Client#slay` method which is a forceful version of `#kill`.
- * Add `Area::floating` method for symmetry with `Area::curr`.
+* Add `View#select` method to move focus relatively inside a view.
- * Add `View#managed_area` aliases for `View#column` methods.
+* Add `Area::floating` method for symmetry with `Area::curr`.
-Bug fixes:
+* Add `View#managed_area` aliases for `View#column` methods.
- * Fix error when unzooming clients from temporary view.
+.Bug fixes
- * Fix code that launches temporary terminals in the Tutorial.
+* Fix error when unzooming clients from temporary view.
- Use the `/bin/sh` version of the **read** command for portability.
+* Fix code that launches temporary terminals in the Tutorial.
++
+Use the `/bin/sh` version of the read(1) command for portability.
-Housekeeping:
+.Housekeeping
- * Use `Client#send` instead of `#swap` in automated arrangements because
- it causes less traffic on /event/.
+* Use `Client#send` instead of `#swap` in automated arrangements because
+ it causes less traffic on /event/.
- * Add old release notes from blog to user manual.
+* Add old release notes from blog to user manual.
-%#----------------------------------------------------------------------------
-### Version 2.1.0 (2009-05-09)
-%#----------------------------------------------------------------------------
+=== Version 2.1.0 (2009-05-09)
This release improves client arrangement, fixes several bugs, and cleans up
the code.
-Thank you:
+.Thank you
- * Simon Hafner reported several bugs.
- * Michael Andrus verified bug fixes.
+* Simon Hafner reported several bugs.
+* Michael Andrus verified bug fixes.
-New features:
+.New features
- * Focus is now restored on the initially focused client after applying
- automated client arrangements.
+* Focus is now restored on the initially focused client after applying
+ automated client arrangements.
- * The push(), insert(), and unshift() instance methods of the
- `Rumai::Area` class now preserve the order of inserted clients.
+* The `push()`, `insert()`, and `unshift()` instance methods of the
+ `Rumai::Area` class now preserve the order of inserted clients.
- * The `Rumai::View#arrange_in_grid()` method now accepts 1 as a parameter.
- This invocation causes every column to contain at most 1 client.
+* The `Rumai::View#arrange_in_grid()` method now accepts 1 as a parameter.
+ This invocation causes every column to contain at most 1 client.
-Bug fixes:
+.Bug fixes
- * Fix error caused by focusing the top/bottom client in the destination
- area before sending new clients into that area.
+* Fix error caused by focusing the top/bottom client in the destination
+ area before sending new clients into that area.
- * Fix error when importing clients into an empty area.
+* Fix error when importing clients into an empty area.
-Housekeeping:
+.Housekeeping
- * Use snake_case instead of camelCase for variable names.
+* Use snake_case instead of camelCase for variable names.
- * Add copyright notice at the top of every file.
+* Add copyright notice at the top of every file.
- * Plenty of code formatting and beautification.
+* Plenty of code formatting and beautification.
-%#----------------------------------------------------------------------------
-### Version 2.0.2 (2009-02-26)
-%#----------------------------------------------------------------------------
+=== Version 2.0.2 (2009-02-26)
This release fixes a connection bug.
-Thank you:
+.Bug fixes
- * Simon Hafner reported and helped debug the `$DISPLAY` bug.
+* wmii omits the fractional portion of `$DISPLAY` in its socket file path.
+ Rumai was trying to connect with the entire `$DISPLAY` value (including
+ the fractional portion) and thus could not find wmii's socket file.
++
+Thanks to Simon Hafner for reporting this bug.
-Bug fixes:
+=== Version 2.0.1 (2009-01-25)
- * wmii omits the fractional portion of `$DISPLAY` in its socket file path.
- Rumai was trying to connect with the entire `$DISPLAY` value (including
- the fractional portion) and thus could not find wmii's socket file.
-
-%#----------------------------------------------------------------------------
-### Version 2.0.1 (2009-01-25)
-%#----------------------------------------------------------------------------
-
-This release simplifies project administrivia using [<%= Inochi::PROJECT
-%>](<%= Inochi::WEBSITE %>), improves the unit tests, and revises the user
-manual.
+This release simplifies project administrivia using <<Inochi>>, improves the
+unit tests, and revises the user manual.
-Bug fixes:
+.Bug fixes
- * The rumai/ixp/message library's unit test failed if
- `/rbar/status` did not already exist in wmii.
+* The `rumai/ixp/message` library's unit test failed if
+ `/rbar/status` did not already exist in wmii.
-Housekeeping:
+.Housekeeping
- * Store IXP socket address in `Rumai::IXP_SOCK_ADDR`.
+* Store IXP socket address in `Rumai::IXP_SOCK_ADDR`.
- * Added missing test cases for (TR)create and (TR)remove messages in the
- unit test for the rumai/ixp/message library.
+* Added missing test cases for (TR)create and (TR)remove messages in the
+ unit test for the `rumai/ixp/message` library.
-%#----------------------------------------------------------------------------
-### Version 2.0.0 (2008-02-04)
-%#----------------------------------------------------------------------------
+=== Version 2.0.0 (2008-02-04)
This release adds support for wmii 3.6, improves the performance of the IXP
library, and fixes some bugs.
-Thank you:
+.Thank you
- * Christoph Blank tested Rumai 1.0.0 under wmii 3.6 and reported bugs.
+* Christoph Blank tested Rumai 1.0.0 under wmii 3.6 and reported bugs.
-Incompatible changes:
+.Incompatible changes
- * wmii version 3.6 or newer is now required.
+* wmii version 3.6 or newer is now required.
- * The `Rumai::IXP::Agent::FidStream#read_partial` method has been replaced
- by `Rumai::IXP::Agent::FidStream#read(true)` for efficiency.
+* The `Rumai::IXP::Agent::FidStream#read_partial` method has been replaced
+ by `Rumai::IXP::Agent::FidStream#read(true)` for efficiency.
- * The `Rumai::IXP::Agent::FidStream#write` method no longer writes to
- the beginning of the stream. Instead, it writes to the current position
- in the stream.
+* The `Rumai::IXP::Agent::FidStream#write` method no longer writes to
+ the beginning of the stream. Instead, it writes to the current position
+ in the stream.
- * The `Rumai::View#floating_area` method has been renamed to
- `Rumai::View#floater` for brevity.
+* The `Rumai::View#floating_area` method has been renamed to
+ `Rumai::View#floater` for brevity.
-New features:
+.New features
- * Added several more methods (such as rewind, pos=, eof?, and so on) from
- Ruby's IO class to the `Rumai::IXP::Agent::FidStream` class.
+* Added several more methods (such as `rewind`, `pos=`, `eof?`, and so on)
+ from Ruby's IO class to the `Rumai::IXP::Agent::FidStream` class.
- * Added the `Rumai::Client#kill` method to simplify client termination.
+* Added the `Rumai::Client#kill` method to simplify client termination.
-Bug fixes:
+.Bug fixes
- * Fixed a race condition in `Rumai::Agent#talk` which would cause Rumai to
- hang when multiple threads used it.
+* Fixed a race condition in `Rumai::Agent#talk` which would cause Rumai to
+ hang when multiple threads used it.
-%#----------------------------------------------------------------------------
-### Version 1.0.0 (2008-01-26)
-%#----------------------------------------------------------------------------
+=== Version 1.0.0 (2008-01-26)
This is the first release of Rumai, the evolution of
-[wmii-irb](http://article.gmane.org/gmane.comp.window-managers.wmii/1704),
-which lets you manipulate the [wmii] window manager through [Ruby]. Enjoy!
+http://article.gmane.org/gmane.comp.window-managers.wmii/1704[wmii-irb], which
+lets you manipulate the <<wmii>> window manager through <<Ruby>>. Enjoy!
View
40 INSTALL
@@ -1,33 +1,27 @@
-%# #%
-%# You can read this document in its full glory by #%
-%# opening ./doc/index.html in your favorite Web browser. #%
-%# #%
+== INSTALL
-%#----------------------------------------------------------------------------
-%| section "Prerequisites"
-%#----------------------------------------------------------------------------
+=== Prerequisites
- * [Ruby](http://ruby-lang.org) 1.8.6 or newer.
+* <<Ruby>> 1.8.6 or newer.
- * [RubyGems](http://rubygems.org) 1.3.6 or newer.
+* <<RubyGems>> 1.3.6 or newer.
- * [wmii](http://wmii.suckless.org) 3.9 or newer.
+* <<wmii>> 3.9 or newer.
-%#----------------------------------------------------------------------------
-%| section "Installing"
-%#----------------------------------------------------------------------------
+=== Installing
- %|command! "gem install rumai"
+------------------------------------------------------------------------------
+gem install rumai
+------------------------------------------------------------------------------
-%#----------------------------------------------------------------------------
-%| section "Upgrading"
-%#----------------------------------------------------------------------------
+=== Upgrading
- %|command! "gem update rumai"
+------------------------------------------------------------------------------
+gem update rumai
+------------------------------------------------------------------------------
-%#----------------------------------------------------------------------------
-%| section "Uninstalling"
-%#----------------------------------------------------------------------------
-
- %|command! "gem uninstall rumai"
+=== Removing
+------------------------------------------------------------------------------
+gem uninstall rumai
+------------------------------------------------------------------------------
View
42 MANUAL
@@ -1,34 +1,8 @@
-<%
- proj_home_url = Rumai::WEBSITE
- api_docs_url = File.join(proj_home_url, 'api/')
- ann_feed_url = File.join(proj_home_url, 'ann.xml')
-
- code_repo_scm = '[Git](http://git-scm.com)'
- code_repo_url = 'http://github.com/sunaku/rumai'
- bug_track_url = File.join(code_repo_url, 'issues')
-
- ##
- # Puts the given content inside <pre> tags in a Markdown-safe way.
- #
- def preformatted content
- if content =~ /\S/
- content.gsub(/^/, ' ' * 4)
- else
- "<pre>#{content}</pre>"
- end
- end
-%>
-
-%+ "README"
-
-%+ "USAGE"
-
-%+ "EXAMPLES"
-
-%+ "HACKING"
-
-%+ "HISTORY"
-
-%+ "CREDITS"
-
-%+ "BEYOND"
+%+ 'SYNOPSIS'
+%+ 'README'
+%+ 'INSTALL'
+%+ 'USAGE'
+%+ 'HACKING'
+%+ 'HISTORY'
+%+ 'CREDITS'
+%+ 'BEYOND'
View
66 README
@@ -1,60 +1,34 @@
-Rumai is a pure [Ruby] interface to the [wmii] window manager. Its name is a
-portmanteau of "*Ru*by" and "w*mi*i" (which I pronounce as "vim eye").
+== DESCRIPTION
-%#----------------------------------------------------------------------------
-### Features
-%#----------------------------------------------------------------------------
+Rumai is a pure <<Ruby>> interface to the <<wmii>> window manager. Its name
+is a portmanteau of "**Ru**by" and "w**mi**i", which I pronounce as "vim eye".
+
+=== Features
* Provides an interactive shell for live experimentation.
* Arranges clients, columns, views, and tags dynamically.
-* Talks directly to wmii's [IXP filesystem interface][libixp].
-
-* Includes a pure Ruby client for the [9P2000 protocol][p9p].
-
-* Powers [my personal][sunaku/wmiirc] wmiirc and
- [many others][sunaku/wmiirc/network] like it.
-
-%#----------------------------------------------------------------------------
-### Resources
-%#----------------------------------------------------------------------------
-
-* Issue tracker (report bugs, request features, get help):
- <<%= bug_track_url %>>
-
-* Source code (browse online or obtain with <%= code_repo_scm %>):
- <<%= code_repo_url %>>
-
-* API documentation:
- <<%= api_docs_url %>>
-
-* Announcements feed:
- <<%= ann_feed_url %>>
-
-* Official website:
- <<%= proj_home_url %>>
-
-%#----------------------------------------------------------------------------
-### Setup
-%#----------------------------------------------------------------------------
-
-Prerequisites:
-
- * [Ruby] 1.8.6 or newer.
+* Talks directly to wmii's <<libixp, IXP filesystem interface>>.
- * [RubyGems] 1.3.6 or newer.
+* Includes a pure Ruby client for the <<p9p, 9P2000 protocol>>.
- * [wmii] 3.9 or newer.
+* Powers http://github.com/sunaku/wmiirc[my personal] wmiirc and
+ http://github.com/sunaku/wmiirc/network[many others] like it.
-Installing:
+=== Resources
- gem install rumai
+Project website::
+<%= @proj_home_url = Rumai::WEBSITE %>
-Upgrading:
+Announcements feed::
+<%= @ann_feed_url = File.join(@proj_home_url, 'ann.xml') %>
- gem update rumai
+API documentation::
+<%= @api_docs_url = File.join(@proj_home_url, 'api/') %>
-Removing:
+Source code (browse online, download, or checkout)::
+<%= @code_repo_url = 'http://github.com/sunaku/rumai' %>
- gem uninstall rumai
+Issue tracker (report bugs, request features, get help)::
+<%= @bug_track_url = File.join(@code_repo_url, 'issues') %>
View
31 SYNOPSIS
@@ -0,0 +1,31 @@
+== SYNOPSIS
+
+*rumai* ['OPTIONS'] ['IRB_OPTIONS']
+
+=== Command
+
+Starts an interactive Ruby shell (IRB) session by passing the given
+'IRB_OPTIONS' to irb(1) and placing you at a command prompt like this:
+
+------------------------------------------------------------------------------
+irb(Rumai):001:0>
+------------------------------------------------------------------------------
+
+The *irb(Rumai)* token in the command prompt indicates that your commands will
+be evaluated _inside_ the `Rumai` module. As a result, you can omit the
+"Rumai" prefix from your commands.
+
+For example, to get the currently selected client, you can type `curr_client`
+instead of `Rumai.curr_client` at the prompt. Both commands achieve the same
+effect.
+
+The next thing to notice is that *TAB completion* is enabled. So you can type
+part of a command and press the TAB key to see a list of possible completions.
+
+=== Options
+
+*-h*, *--help*::
+ Display this manual and exit.
+
+*-v*, *--version*::
+ Print version number and exit.
View
330 USAGE
@@ -1,35 +1,315 @@
-%#----------------------------------------------------------------------------
-## SYNOPSIS
-%#----------------------------------------------------------------------------
+== USAGE
-`rumai` [<OPTIONS>] [<IRB_OPTIONS>]
+Now that you know how to start the interactive shell (see **DESCRIPTION**
+above) let us walk through a series of examples that highlight the main
+features of Rumai. You can follow along by copying & pasting the presented
+commands into the interactive shell.
-%#----------------------------------------------------------------------------
-## DESCRIPTION
-%#----------------------------------------------------------------------------
+%|open_terms = lambda do
+ Launch a few terminals so that we have something to work with:
-Starts an interactive Ruby shell (IRB) session by passing the given
-<IRB_OPTIONS> to irb(1). This puts you at a command prompt as follows:
+ [source,ruby]
+ ----------------------------------------------------------------------------
+ colors = %w[ red green blue black orange brown gray navy gold ]
+ colors.each {|c| system "xterm -bg #{c} -title #{c} -e sh -c read &" }
+ ----------------------------------------------------------------------------
- irb(Rumai):001:0>
+%|close_terms = lambda do
+ Close the terminals we launched earlier:
-The `irb(Rumai)` token in the command prompt indicates that commands will be
-evaluated *inside* the `Rumai` module. As a result, you can omit the "Rumai"
-prefix from your commands if you wish.
+ [source,ruby]
+ ----------------------------------------------------------------------------
+ terms = curr_view.clients.select {|c| colors.include? c.label.read }
+ terms.each {|c| c.kill }
+ ----------------------------------------------------------------------------
-For example, to get the currently selected client, you can type `curr_client`
-instead of `Rumai.curr_client` at the prompt. Both commands achieve the same
-effect.
+=== Automated client arrangement
-The next thing to notice is that *TAB completion* is enabled. So you can type
-part of a command and press the TAB key to see a list of possible completions.
+% open_terms.call
-%#----------------------------------------------------------------------------
-## OPTIONS
-%#----------------------------------------------------------------------------
+Arrange all clients in a grid:
-* `-h`, `--help`:
- Display this manual and exit.
+[source,ruby]
+------------------------------------------------------------------------------
+curr_view.arrange_in_grid
+------------------------------------------------------------------------------
-* `-v`, `--version`:
- Print version number and exit.
+Arrange all clients in a diamond shape:
+
+[source,ruby]
+------------------------------------------------------------------------------
+curr_view.arrange_in_diamond
+------------------------------------------------------------------------------
+
+Arrange all clients like LarsWM does:
+
+[source,ruby]
+------------------------------------------------------------------------------
+curr_view.arrange_as_larswm
+------------------------------------------------------------------------------
+
+% close_terms.call
+
+=== Multiple client grouping
+
+% open_terms.call
+
+Add the red, green, and blue terminals into the "grouping":
+
+[source,ruby]
+------------------------------------------------------------------------------
+terms = curr_view.clients.select do |c|
+ %%w[red green blue].include? c.label.read
+end
+terms.each {|c| c.group }
+------------------------------------------------------------------------------
+
+You should now see a new button labelled as "@" on the left-hand side of
+wmii's bar, indicating that there is now a new view labelled "@" in wmii.
+Let us inspect what clients this mysterious view contains:
+
+[source,ruby]
+------------------------------------------------------------------------------
+v = View.new "@"
+puts v.clients.map {|c| c.label.read }
+------------------------------------------------------------------------------
+
+Aha! The mysterious view contains the red, green, and blue clients we
+recently "grouped". Thus, by adding a client to the "grouping", we are
+simply tagging the client with the "@" token.
+
+Now that we have put some clients into the "grouping", let us move all
+clients in the grouping to the floating area in the current view:
+
+[source,ruby]
+------------------------------------------------------------------------------
+grouping.each {|c| c.send "toggle" }
+------------------------------------------------------------------------------
+
+Neat! Let us bring them back into the managed area:
+
+[source,ruby]
+------------------------------------------------------------------------------
+grouping.each {|c| c.send "toggle" }
+------------------------------------------------------------------------------
+
+% close_terms.call
+
+In summary, you can select multiple clients (by adding them to the
+"grouping") and perform operations on them. This is useful when you want
+to do something with a group of clients but do not want to manually focus
+one, perform the action, focus the next one, and so on.
+
+Another important aspect is that selected clients stay selected until they
+are unselected. This allows you to continue performing tasks on the
+selection without having to reselect the same clients after every
+operation.
+
+=== Easy column manipulation
+
+% open_terms.call
+
+You can insert a group of clients to the top, bottom, or after the
+currently focused client of _any_ column using Array-like methods.
+
+Give each client its own column (one client per column):
+
+[source,ruby]
+------------------------------------------------------------------------------
+curr_view.each_column {|c| c.length = 1 }
+------------------------------------------------------------------------------
+
+Put (at most) three clients in every column:
+
+[source,ruby]
+------------------------------------------------------------------------------
+curr_view.each_column {|c| c.length = 3 }
+------------------------------------------------------------------------------
+
+Move the red, green, and blue clients into the floating area:
+
+[source,ruby]
+------------------------------------------------------------------------------
+rgb = %w[red green blue]
+terms = curr_view.clients.select {|c| rgb.include? c.label.read }
+curr_view.areas[0].push terms
+------------------------------------------------------------------------------
+
+Slurp all floating clients into the last column:
+
+[source,ruby]
+------------------------------------------------------------------------------
+list = curr_view.areas
+a, b = list.first, list.last
+b.concat a
+------------------------------------------------------------------------------
+
+Set the last column's layout to stacking mode:
+
+[source,ruby]
+------------------------------------------------------------------------------
+b.layout = 'stack'
+------------------------------------------------------------------------------
+
+Move the red, green, and blue clients to the top of the second column:
+
+[source,ruby]
+------------------------------------------------------------------------------
+curr_view.areas[2].unshift terms
+------------------------------------------------------------------------------
+
+Move the red, green, and blue clients to the bottom of the third column:
+
+[source,ruby]
+------------------------------------------------------------------------------
+curr_view.areas[3].push terms
+------------------------------------------------------------------------------
+
+% close_terms.call
+
+=== Easy client manipulation
+
+% open_terms.call
+
+Obtain a reference to the red client:
+
+[source,ruby]
+------------------------------------------------------------------------------
+red = curr_view.clients.find {|c| c.label.read == "red" }
+------------------------------------------------------------------------------
+
+Show the red client's current tags:
+
+[source,ruby]
+------------------------------------------------------------------------------
+red.tags
+------------------------------------------------------------------------------
+
+Add the "foo" and "bar" tags to the red client:
+
+[source,ruby]
+------------------------------------------------------------------------------
+red.tag "foo", "bar"
+------------------------------------------------------------------------------
+
+Remove the "bar" tag from the red client:
+
+[source,ruby]
+------------------------------------------------------------------------------
+red.untag "bar"
+------------------------------------------------------------------------------
+
+Do complex operations on the red client's tags:
+
+[source,ruby]
+------------------------------------------------------------------------------
+red.with_tags { concat %w[a b c]; push 'z'; delete 'c' }
+------------------------------------------------------------------------------
+
+Focus the next client after the red client:
+
+[source,ruby]
+------------------------------------------------------------------------------
+red.next.focus
+curr_client == red.next #=> true
+------------------------------------------------------------------------------
+
+Notice that by focusing a client, we make it the current client.
+
+Focus the red client on a different view:
+
+[source,ruby]
+------------------------------------------------------------------------------
+orig = curr_view
+v = red.views.last
+red.focus v
+------------------------------------------------------------------------------
+
+Return to the original view:
+
+[source,ruby]
+------------------------------------------------------------------------------
+orig.focus
+------------------------------------------------------------------------------
+
+Send the red client to the last column:
+
+[source,ruby]
+------------------------------------------------------------------------------
+red.send curr_view.areas.last
+------------------------------------------------------------------------------
+
+% close_terms.call
+
+=== Traversing the file system
+
+Show the root node of wmii's IXP file system:
+
+[source,ruby]
+------------------------------------------------------------------------------
+fs
+------------------------------------------------------------------------------
+
+Show the names of all files at the root level:
+
+[source,ruby]
+------------------------------------------------------------------------------
+fs.entries
+------------------------------------------------------------------------------
+
+Show the parent of the root node:
+
+[source,ruby]
+------------------------------------------------------------------------------
+fs.parent
+------------------------------------------------------------------------------
+
+Show the children of the root node:
+
+[source,ruby]
+------------------------------------------------------------------------------
+fs.children
+------------------------------------------------------------------------------
+
+Navigate into to the `/lbar/` directory:
+
+[source,ruby]
+------------------------------------------------------------------------------
+n1 = fs.lbar
+n2 = fs['lbar']
+n1 == n2 #=> true
+left_bar = n1
+------------------------------------------------------------------------------
+
+Notice that you can traverse the file system hierarchy by simply calling
+methods on node objects. Alternatively, you can traverse by specifying an
+arbitrary sub-path (relative path) using the `[]` operator on a node.
+
+Create a new temporary button:
+
+[source,ruby]
+------------------------------------------------------------------------------
+b = left_bar.rumai_example # path of new button
+b.exist? #=> false
+b.create
+b.exist? #=> true
+------------------------------------------------------------------------------
+
+You should now see an empty button on the left-hand side of the wmii bar.
+
+Color the button black-on-white and label it as "hello world":
+
+[source,ruby]
+------------------------------------------------------------------------------
+content = "#000000 #ffffff #000000 hello world"
+b.write content
+b.read == content #=> true
+------------------------------------------------------------------------------
+
+Remove the temporary button:
+
+[source,ruby]
+------------------------------------------------------------------------------
+b.remove
+b.exist? #=> false
+------------------------------------------------------------------------------
View
12 bin/rumai
@@ -3,16 +3,8 @@
require 'rumai'
if ARGV.delete('-h') or ARGV.delete('--help')
- # try to display UNIX version of help manual
- man_path = File.join(Rumai::INSTDIR, 'man')
- unless system 'man', '-M', man_path, '-a', 'rumai'
- # try to display HTML version of help manual
- man_html = man_path + '.html'
- unless %w[$BROWSER open start].any? {|b| system "#{b} #{man_html}" }
- # no luck; direct user to project website
- puts "See #{Rumai::WEBSITE}"
- end
- end
+ system 'man', '-M', File.join(Rumai::INSTDIR, 'man'), 'rumai' or
+ warn "Could not display the help manual.\nSee #{Rumai::WEBSITE} instead."
exit
elsif ARGV.delete('-v') or ARGV.delete('--version')
puts Rumai::VERSION
View
8 inochi.opts → inochi.conf
@@ -1,4 +1,12 @@
##
+# Attributes to pass to AsciiDoc when rendering the HTML manual page. See
+# "Backend Attributes" in the AsciiDoc manual for a list of all attributes:
+#
+# http://www.methods.co.nz/asciidoc/chunked/aph.html
+#
+:man_asciidoc_attributes:
+
+##
# Location where `inochi pub:web` will upload files. This value
# can use any local/remote/protocol syntax supported by rsync(1).
#
View
14 lib/rumai/inochi.rb
@@ -44,14 +44,14 @@ def self.inspect
#
# RUNTIME = {
# # this project needs exactly version 1.2.3 of the "an_example" gem
- # "an_example" => [ "1.2.3" ],
+ # 'an_example' => [ '1.2.3' ],
#
# # this project needs at least version 1.2 (but not
# # version 1.2.4 or newer) of the "another_example" gem
- # "another_example" => [ ">= 1.2" , "< 1.2.4" ],
+ # 'another_example' => [ '>= 1.2' , '< 1.2.4' ],
#
# # this project needs any version of the "yet_another_example" gem
- # "yet_another_example" => [],
+ # 'yet_another_example' => [],
# }
#
RUNTIME = {}
@@ -63,23 +63,23 @@ def self.inspect
#
# DEVTIME = {
# # this project needs exactly version 1.2.3 of the "an_example" gem
- # "an_example" => [ "1.2.3" ],
+ # 'an_example' => [ '1.2.3' ],
#
# # this project needs at least version 1.2 (but not
# # version 1.2.4 or newer) of the "another_example" gem
- # "another_example" => [ ">= 1.2" , "< 1.2.4" ],
+ # 'another_example' => [ '>= 1.2' , '< 1.2.4' ],
#
# # this project needs any version of the "yet_another_example" gem
# "yet_another_example" => [],
# }
#
DEVTIME = {
- 'inochi' => [ '>= 4.0.0', '< 5' ],
+ 'inochi' => [ '>= 5.0.2', '< 6' ],
'detest' => [ '>= 3.1.0', '< 4' ], # for unit testing
}
# establish gem version dependencies
- if respond_to? :gem
+ if respond_to? :gem, true
[RUNTIME, DEVTIME].each do |deps|
deps.each do |gem_name, gem_version|
begin
Please sign in to comment.
Something went wrong with that request. Please try again.