WindowTitle {FvwmApplet-Battery}
WindowSize 32 32 # Taille
Font "xft:Comic Sans MS:style=Bold:size=10"
Init
Begin
Set $MainColorset=(GetScriptArgument 1)
If $MainColorset <> {} Then
Begin
ChangeColorset 0 $MainColorset
ChangeColorset 0 $MainColorset
End
Set $tmp = (GetOutput {exec /home/voider/.fvwm/scripts/battery} 1 -1)
ChangeTitle 1 $tmp
End
PeriodicTasks
Begin
If (RemainderOfDiv (GetTime) 30)==0 Then
Begin
Set $tmp = (GetOutput {exec /home/voider/.fvwm/scripts/battery} 1 -1)
ChangeTitle 1 $tmp
End
End
Widget 1
Property
Position 0 0
Size 32 32
Type ItemDraw
Flags NoReliefString
Title {}
Main
Case message of
SingleClic :
Begin
End
End
I swallowed it in in my panel and it works great but i cant get it be transparent and i can figure out how get get the % sign after it. Heres a picture of what it looks like.
Totally Awsome. Any suggetions on how to read new/read email from and mbox format. Ive seen a few scripts floating around but i cant get anyof them to work with fvwm.
I would like to get it to output new/total. Whats CPAN if i might ask? Is there any way to display information in the title bar of a window. I have a g3 ibook that will only do 1024x768 and im trying to get as much screen realestate as possible. I would like to totally get away from anytype of button bars or anything that i have to minize a window to see.
For a quick count of new/total mesages, you can do something like
perl -e '
my ($from, $status) = (0,0);
open IN, qq(/var/mail/$ENV{ USER })
or die qq(open mailbox failed $!);
while(<IN>) {
/^From / and $from++;
/^Status: / and $status++;
}
close IN;
my $total = $from;
my $new = $total = $status;
print "$new/$total\n";
'
This works on the basis that new messages don’t yet have a Status: field, but that all messages have a From field
Try this:
Exec xprop -id $[w.id] -set WM_NAME "foo"
Cool. Look forward to seeing that one
Did you see the FvwmMonitor module IO posted? That’s designed with the idea of reducing all your launchers and monitors to a single icon button. It’s also got the original version of that perl script in the sample config The same config sets up a POP3 mailbox monitor, a battery level display (which ios where we came in) and an xterm/console launcher - all from one button, all user defined from your config file. I like to make good use of my screen estate too…
Theres alot of neat stuff on the CPAN site. Ill be book marking that.
Exec xprop -id $[w.id] -set WM_NAME "foo"
Im not at my laptop now so i cant try this but im guessing this renames the window. What i was wondering if it was possible to have something like this
Where my battery and new mail is displayed in the title bar. The only problem would be inorder for it to refresh id have to open another window. I already have plans to use the extra 7 title buttons for things like change the volume and opening Terms and things like that. Id like to incorperate asmuch in to the title bar as possible. That way any buttonbar that i would need could be very small.
I actually did look breifly at the FvwmMonitor but haveing no programming knowledge (havent decieded whether to learn python or perl) it kinda confused me.
So using pixmap buttons is out as well, huh? You don’t leave a guy much to work with
How about multipixmap decors? You could use the LeftEnd and RightEnd pixmaps to display graphics indiciating the state of email & battery charge. You could use UpdateDecor to display state changes.
The trouble would be finding a way to convert text into graphics. I don’t know of an easy way to do that. Of course, if you can live without the digits, you can use different coloured envelopes (eg: grey=no mail, green = old mail, red = new mail) and a collection of battery gague images to display the info graphically.
There’s also the possibility of using different decors on different windows to give you more buttons and icons to play with.
Thanks. I guess I need a few more examples if it’s ever going to catch on.
You can use shell commands and scripts rather than perl to drive it, but I guess that doesn’t come across. Oh well, it’s all feedback
I actually like the idea of using pixmap for the battery and mail. Especially the battery, i could have it in intervals of 10%s. That way the decor wouldnt have to be updated so often.
If you could point me in the right direction on what i need to do that would be great. Ill start working on some pixmaps for mail and battery.
After playing around with using pixmaps i came to the conclusion that its just to much of a pain. With a thin title bar the pixmaps where so small that you couldnt really tell what level it was at. After rereading this post i decided to play around with the xprop command. When i did
xprop -id “window id #” -set WM_NAME /home/voider/bin/battery_stat
It set the title to 100%. Which was awsome and exactly what i wanted. Only downside is how do i execute this command for every window that opens and also it would be a real pain to have all my windows titled 100%. What i was thinking was writing a script that would
set the title to battery status
reset the title back to original
set the title to email status
reset the title back to original
repeat if possible
I could probably do this in bash but i can’t figure out how to have to script get the window id and the name of any new opened windows. The other option i was think which would be easier would be to have it just set for term windows. Since i always have altlest 1 Eterm open. Im still on sure how to get the id of every new term window that opens.
hi.
i have an alternative idea to solve your problem:
what about a FvwmScript Widget, or some FvwmButtons on top of your screen, which changes, lets say every 10 seconds. You’re loop just needs to adopt the new title, when focus changes. Additionally you’re windows remain title less. One could also do some window cycle buttons … and close button for the currently focsued window.
just some thoughts …
If you like, however i could provide some code for the window cycle and title name for the buttons
Use conditional commands to get the window id. either Current WindowId <func> or
All (Focussed) WindowId <func> will call func in the context of the current (or focussed) window. Inside func, the variable $[w.id] will contain the window id you need.
This would let you just set the current window. You could store the old window title in a environment variable and use it to restore the name by catching lose focus events with FvwmEvent.
Alternatively, catch gain and lost focus events to format the focussed window title bar thus:
window_title_string : mail new/total : battery 99%
then you don’t lose the title info and it’s easier to reset.
To update the header, use the Schedule command
[edit]
Heller, I’m interested in your scrolling buttons solution as well. I’ve been playing with that idea myself.
window_title_string : mail new/total : battery 99%
Is beautiful. Where can i fint in the man pages how to do this. Im guessing that Current WindowId gets the WindowId of what ever window opens. Like if i have a function FvwmEterm that opens an Eterm. If i use Current WindowId FvwmEterm it would give me the WindowId of that newly spawned Eterm. Or am i way off base here.
Fvwm commands don’t return things like window ids. On the other hand, you can get the window id of the window context from the environment variable $[w.id]. The trouble is that opening a window is not enough to change the context.
The way to get around this is with conditional commands. The conditional commands let you search for a window by a number of criteria and execute the commands that follow them in the context of the windows they found. So
Current Echo $[w.id]
should print the id of the currently focussed window. WindowId lets you set the context the window specified by id if id is known. ThisWindow (which is what I was thinking of when I wrote WindowId earlier) forces the windowid context. It shouldn’t be necessary in most cases, but in practice I often need to add it. You can get the details by searching for CONDITIONAL COMMANDS in the manual.
The other useful resource here is the FvwmEvent module. You can set this to execute fvwm commands when certain things happen. there’s a new window event which you can catch perform operations on that window, and you can also catch gain and lose focus events. Cofigure the PassId option and the window id gets added as a parameter your event actions
*FvwmEvent: Cmd
*FvwmEvent: PassId
*FvwmEvent: focus_change FuncToggleTitleStatus
Will call FuncToggleTitleStatus with the window id in $0. Then you can use something like:
[code]AddToFunc FuncToggleTitleStatus
I WindowId (Focused) Exec xprop -id $0 … # add status info to title
I TestRc (!Match) Exec xprop -id $0 … # remove status info from title
[/code]
to change your title bars
Problem 1 is i cant get the window name to update when i change focus and then change back. For instance i open an eterm and the title is
voider@ibook:~ 95% 0/5
I cd to /usr/src then i change the focus to mozilla and then back to the eterm. Instead of showing voider@ibook: /usr/src 95% 0/5 it show voider@ibook:~ blah blah blah.
Problem 2 i can’t really explain what happens so i took a screenshot.
This is the way the bar usaually looks.
And sometime if i change focus so fast i get this.
For some reason the battery status and the mailcheck get save as the original window name then when focus get set back an additional battery and mail status get tacked on the end. Man i hope this all makes sense.
Just wanted to let you know Nick Fortune I checked out your FvwmMonitor again. Aswome! If i ever get gentoo installed on my desktop again ill be using that little dodad.
I’d also look at using the ‘property_change’ event as well – especially as you’re (re)setting the title each time.
In both cases, what’s likely is that you have a race condition, and events are happening to quickly to be processed. Whether you like it or not, to your FvwmEvent configuration, try adding: