2016-09-03 7 views
0

私は素晴らしいWMを使用しています。クライアントの作成/削除後にlua関数を実行します。具体的には、タグの名前をタグ上にあるクライアントの名前に変更したいとします。AwesomeWMクライアントがコールバックを作成/削除しました

私はこれをタイマーで行いますが、これを行う最善の方法は、クライアントが作成/削除されたときに呼び出されるawesomeWMにコールバック関数を登録することです。

私のためにこれを行うには素晴らしいことを伝えるためにいくつかのフック/コールバックがありますか?

--------------------------------------------- UPDATE ----------------------------------------

私は、しかし、私は窓が作成され、タグに添付された後、変更が自分の関数を呼び出す正しいシグナルを見つけることができません。私は管理/非管理タグ/タグなし、tag.newなどでこれを試しましたが、誰も助けません。

アイデア?このに関するすべての助けを事前に

override_name_char = "<" 
function tag_name_from_client(c) 
    if string.match(c.name, "Mozilla Firefox") then 
    return "Firefox" 
    end 

    if string.match(c.name, "Sublime Text") then 
    return "Sublime" 
    end 

    if string.match(c.name, "/bin/bash") then 
    return "Shell" 
    end 

    return "" 
end 


function tag_name_from_tag(tag) 
    if tag.name:match(override_name_char) then 
     return tag.name 
    end 
    for _, c in pairs(tag:clients()) do 
    return " "..tostring(awful.tag.getidx(tag)).." "..tag_name_from_client(c) 
    end 
    return tostring(awful.tag.getidx(tag)) 
end 

function refresh_tag_name() 
    for s = 1, screen.count() do 
     for _,tag in pairs(awful.tag.gettags(s)) do 
     tag.name = tag_name_from_tag(tag) 
     end 
    end 
end 

client.connect_signal("tagged", refresh_tag_name) 
client.connect_signal("untagged", refresh_tag_name) 

--tag_timer = timer({timeout = 0.5}) 
--tag_timer:connect_signal("timeout", function() 
    --refresh_tag_name() 
--end) 
--tag_timer:start() 

ありがとう:ここ

はコードです。 v3.5.6のための可能な方法の

+0

[シグナル](https://awesomewm.org/wiki/Signals)と[ 'connect_signal'](https://でawesomewm .org/doc/api/modules/awesome.html#connect_signal)は、あなたが探しているものですが、Awesomeのドキュメントはかなりの疑問があります。 – Oka

答えて

0

一つ、manage信号である "新しいクライアントが作成された"

local naughty = require("naughty") 
client.connect_signal("manage", function (c) 
    --filter client by class name 
    if c.class:lower() == "gedit" then 
     -- do things on client start 
     naughty.notify({text = "Gedit launched!"}) 

     -- add exit signal for this client 
     c:connect_signal("unmanage", function() naughty.notify({text = "Gedit closed!"}) end) 
    end 
end) 
0
  • あなたrc.luaでこれを試してみてください。
  • "新しいクライアントが破棄されました"は、unmanage信号です。

ので、以下の(未テスト)のようなもの:

local function choose_name_for_tag(t) 
    for _, c in ipairs(t:clients() do 
    return "has client: " .. tostring(c.name or "unknown") 
    end 
    return "has no clients" 
end 

local function update_state() 
    for _, t in pairs(root.tags()) do 
    t.name = choose_name_for_tag(t) 
    end 
end 
client.connect_signal("manage", update_state) 
client.connect_signal("unmanage", update_state) 
tag.connect_signal("tagged", function(t) 
    t.name = choose_name_for_tag(t) 
end) 
tag.connect_signal("untagged", function(t) 
    t.name = choose_name_for_tag(t) 
end) 
+0

新しいウィンドウを作成するときにこれはキャプチャされません。私は新しいウィンドウ(Mod4 + enter)を作成し、それはタグの名前を変更するように見えません。私は自分の質問にコードを掲載しました – deller

+0

答えのコードは正しいはずです(私は自分の答えにコードを修正しました)。私が見ることができる唯一の問題は、あなたのコードがタグの最初のクライアントだけを見ていることです。同じタグに複数のクライアントがあり、特定のクライアントがタグの名前を決めることができますか?また、あなたの素晴らしいバージョンは何ですか?このコードは素晴らしい3.4では動作しません。 –

+0

新しいウィンドウを作成するときに解決策が機能しません(例:Mod4 + enter)。関数が実行されると、クライアントは作成されません。何か案は? – deller

関連する問題