wmiirc-rumai

git clone git://oldgit.suckless.org/wmiirc-rumai/
Log | Files | Refs | README | LICENSE

commit 38c2acc1ef76c806e8cf1d3af9d9f3982300bd14
parent a2b7c225c5b8d0a388f683934bb563bc5ffd2cc5
Author: Suraj N. Kurapati <sunaku@gmail.com>
Date:   Mon, 11 Sep 2006 02:37:29 -0700

[project @ 18b37d014090203c5ac504b077ce896159c341e3]

[project @ 58]
up  Wmii#find_client is now a class method
+   it accepts a view or area to search within

fix Area#setup_for_insertion! wasn't correctly moving the first client

Diffstat:
wm.rb | 67+++++++++++++++++++++++++++++++++++--------------------------------
1 file changed, 35 insertions(+), 32 deletions(-)

diff --git a/wm.rb b/wm.rb @@ -47,7 +47,7 @@ class Wmii < IxpNode # Returns the current set of tags. def tags - self['/tags'].split + self[:tags].split end # Returns the current set of views. @@ -79,24 +79,27 @@ class Wmii < IxpNode end end - # Returns the client which has the given ID or +nil+ if not found. The search is performed in the given view, if specified. - def find_client aClientId, aView = nil + # Returns the client which has the given ID or +nil+ if not found. The search is performed in the given places if specified. + def Wmii.find_client aClientId, aArea = nil, aView = nil aClientId = aClientId.to_i needle = Client.new("/client/#{aClientId}") if needle.exist? - haystack = - if aView && aView.exist? - [aView] - else - needle.tags.map {|t| View.new("/#{t}")} + areas = [] + + if aArea && aArea.exist? + areas << aArea + elsif aView && aView.exist? + areas.concat aView.areas + else + needle.tags.map {|t| View.new("/#{t}")}.each do |v| + areas.concat v.areas end + end - haystack.each do |v| - v.areas.each do |a| - if a.indices.detect {|i| i == aClientId} - return a[aClientId] - end + areas.each do |a| + if a.indices.detect {|i| i == aClientId} + return a[aClientId] end end end @@ -157,7 +160,7 @@ class Wmii < IxpNode selected_clients.each do |c| # resolve stale paths caused by destructive operations unless c.exist? - c = find_client(c.basename, curView) + c = find_client(c.basename, nil, curView) c || next # skip upon failure end @@ -327,10 +330,7 @@ class Wmii < IxpNode # Inserts the given clients at the bottom of this area. def push! *aClients - unless (list = clients).empty? - list.last.focus! - end - + clients.last.focus! if exist? insert! aClients end @@ -352,9 +352,7 @@ class Wmii < IxpNode aClients.flatten! return if aClients.empty? - unless (list = clients).empty? - list.first.focus! - end + clients.first.focus! if exist? setup_for_insertion! aClients.shift parent.sel.ctl = 'swap up' @@ -377,23 +375,27 @@ class Wmii < IxpNode maxIdx = parent.indices.last if dstIdx > maxIdx - aFirstClient.ctl = "sendto #{maxIdx}" - maxIdx = parent.indices.last # recalculate b/c sendto can be destructive + # move *near* final destination + aFirstClient.ctl = "sendto #{maxIdx}" - maxCol = parent[maxIdx] + # recalculate b/c sendto can be destructive + maxIdx = parent.indices.last + maxCol = parent[maxIdx] - if maxCol.indices.length > 1 - maxCol.sel.ctl = "sendto next" - dstIdx = maxIdx + 1 - else - dstIdx = maxIdx - end + aFirstClient = Wmii.find_client(aFirstClient.index, maxCol) + + # move *into* final destination + if maxCol.indices.length > 1 + aFirstClient.ctl = "sendto next" + dstIdx = maxIdx + 1 + else + dstIdx = maxIdx + end @path = "#{dirname}/#{dstIdx}" else aFirstClient.ctl = "sendto #{dstIdx}" - end end end @@ -464,7 +466,8 @@ class Wmii < IxpNode if clientList.length > aMaxClientsPerColumn # evict excess clients to next column - a.next.unshift! clientList[aMaxClientsPerColumn..-1] + emigrants = clientList[aMaxClientsPerColumn..-1] + a.next.unshift! emigrants elsif clientList.length < aMaxClientsPerColumn # import clients from next column