Shoutbox

Scripting API Wishlist - Printable Version

-Shoutbox (https://shoutbox.menthix.net)
+-- Forum: MsgHelp Archive (/forumdisplay.php?fid=58)
+--- Forum: Messenger Plus! for Live Messenger (/forumdisplay.php?fid=4)
+---- Forum: Scripting (/forumdisplay.php?fid=39)
+----- Thread: Scripting API Wishlist (/showthread.php?tid=65660)

Scripting API Wishlist by saralk on 08-31-2006 at 06:31 PM

Post here any things you want implemented in the scripting API.

I will update this post to include all suggestions made.

Enhancements to existing features

Not currently possible with scripts

  • Debug window to include filename as well as line number
  • Pointers for functions (for API Callbacks) (2 people want this)
  • Options dialogue accessable from the scripts menu
  • Version number, about dialogue, homepage address all accessable from the scripts dialogue
  • Prototype method to add functions to objects. (hard to explain, so I provided a link) (2 people want this)
  • Enumerate timers (so we can retreive/check which timers are currently running)
  • A function to see how many milliseconds there are left on a timer
  • Being able to have received messages longer than they originally are
  • Being able to format received messages
  • Aborting scripts in case of an infinate loop

Currently possible, but the method used could be improved
  • OnEvent_ChatWndReceiveMessage to include all types of messages (i.e. file transfer, nudges)
  • Getting the font and font colour of contacts.
  • Sortable listview columns (2 people want this)
  • Making scripts to be able to actually use the TranslationId property in the Window element.
  • The e-mail of the user to be added as a param to Origin in ChatWndReceiveMessage Patchou has said this is impossible

New features

Not currently possible
  • The ability to perform action messages seen by both users, or just the local user. (3 People want this)
  • Add to chat log, i.e. the ability to add an item to a conversation chat log (2 people want this)
  • The ability to change a contact's name in the contact list only.
  • Changing the size and opacity of buttons
  • Update system (the ability to automatically download the new plsc file, uninstall the current version, and install the new version)
  • Being able to stop and restart scripts
  • OnEvent_EmailReceived (2 People want this)
  • Greater control over file transfers
  • OnProcessEvent_Terminate

Currently possible, but the method used could be improved
  • A function to work out contacts MSN ID's
  • The ability to set a personal message natively
  • The ability to add your own submenu's in the right click context menu in the contactlist (in the "msgplus extras" menu) both for contacts as for groups.
  • A function to calculate the user hashes in the registry (2 people want this)

P.S. if you like an idea already suggested, say so in the thread, and i'll add a counter, so popular ideas can be seen.

When you suggest an idea, please tell me which category, and sub category to put it in.
RE: Scripting API Wishlist by Dempsey on 08-31-2006 at 06:34 PM

  • Debug Window to include filename as well as line number

RE: Scripting API Wishlist by Matti on 08-31-2006 at 06:35 PM

  • Making scripts to be able to actually use the TranslationId property in the Window element.
  • An explanation why I can't anchor childwindow elements to the parent window so they resize with it?
  • ... (can be updated)

RE: Scripting API Wishlist by saralk on 08-31-2006 at 06:37 PM

quote:
Originally posted by Mattike
An explanation why I can't anchor childwindow elements to the parent window so they resize with it?

thats not so much a feature request, so I am not adding it to the list, you can ask it in a different thread though.

RE: Scripting API Wishlist by absorbation on 08-31-2006 at 06:56 PM

Getting the font and font color of the contact you are talking to would help a lot.


RE: Scripting API Wishlist by pollolibredegrasa on 08-31-2006 at 07:06 PM

I think this has been requested before, but I'm not sure if its possible.

  • A StripEmoticons function

Basically allowing emoticons to be removed from messages sent to the chat window but keeping their shortcut codes (like in the /noicon command)
RE: Scripting API Wishlist by Jesus on 08-31-2006 at 07:21 PM

the messages in the scripting system already have the shortcuts instead of the emoticons in them. just add "/noicon " before the message and voila


RE: RE: Scripting API Wishlist by pollolibredegrasa on 08-31-2006 at 07:31 PM

quote:
Originally posted by Jesus
the messages in the scripting system already have the shortcuts instead of the emoticons in them. just add "/noicon " before the message and voila


But that adds characters to the message and the due to limitations the length of text sent to the chat window cannot exceed it's original length... Or am I missing something here?
RE: Scripting API Wishlist by alexp2_ad on 08-31-2006 at 09:45 PM

Can you add:

Convo Window function to perform an action message sent to both users (The messages with ----------- above and below them), like in the Add-ins API.

Convo Window function to perform an action message seen only by the current user.


Don't know how possible those are, but they'd be very handy.


RE: Scripting API Wishlist by saralk on 08-31-2006 at 09:48 PM

quote:
Originally posted by alexp2_ad
Can you add:

Convo Window function to perform an action message sent to both users (The messages with ----------- above and below them), like in the Add-ins API.

Convo Window function to perform an action message seen only by the current user.


Don't know how possible those are, but they'd be very handy.

can you rephrase that, i'm not quite sure what you mean
RE: Scripting API Wishlist by cloudhunter on 08-31-2006 at 09:50 PM

Well when you send a nudge, it has this:

_____________________________
You have just sent a nudge!
_____________________________

An action message is that, but with any you want ;)

Incidently this feature will be in Stuffplug 3.


RE: Scripting API Wishlist by matty on 08-31-2006 at 09:51 PM

quote:
Originally posted by saralk
can you rephrase that, i'm not quite sure what you mean
He means messages in the convo that only you can see. For Instant the Delivery Failure Notification or file transfer complete etc
RE: Scripting API Wishlist by -dt- on 08-31-2006 at 10:37 PM

A method to get a pointer for functions (so that we can use API callbacks)

oh and a way to display text into the conversation that wont get sent (useful for debugging/ notifying the user)


RE: RE: RE: Scripting API Wishlist by Jesus on 08-31-2006 at 10:46 PM

quote:
Originally posted by fatfreechicken

But that adds characters to the message and the due to limitations the length of text sent to the chat window cannot exceed it's original length... Or am I missing something here?

D'oh, my bad :$
RE: RE: RE: Scripting API Wishlist by CookieRevised on 08-31-2006 at 10:50 PM

quote:
Originally posted by fatfreechicken
quote:
Originally posted by Jesus
the messages in the scripting system already have the shortcuts instead of the emoticons in them. just add "/noicon " before the message and voila

But that adds characters to the message and the due to limitations the length of text sent to the chat window cannot exceed it's original length... Or am I missing something here?
The function you ask for will do exactly the same; it also will add those special characters since that is how Plus! reconizes a message which needs the emoticon images to be stripped.

-------------------------------------

* My main request is to first fix existing stuff, before adding new stuff...
eg: "WriteString() doesn't handle BSTR's as BSTR's"  (Link to Beta Testing forum removed - Mnjul)

* A function to calculate the contact's MSN ID (is very easy to make your own function for this, but since the MyUserId method also exists...)

* A function to calculate the used hashes for contacts in the registry from a given email, so we can access stuff like contact information etc

* Add the ability to set your status to a personalised status (also retrieve them). Again can be done with your own function, but is pain in the behind (especially considering the possible reset time)
RE: Scripting API Wishlist by Mothuim on 08-31-2006 at 11:16 PM

Three words, "sortable listview columns"


RE: Scripting API Wishlist by saralk on 09-01-2006 at 09:17 AM

quote:
Originally posted by CookieRevised
* My main request is to first fix existing stuff, before adding new stuff...
eg: "CookieRevised's reply to [BUG] WriteString() doesn't handle BSTR's as BSTR's"

Since bugs would take priority over features, I wont include them in here, Patchou would probably fix all the existing bugs before he adds any new features.
RE: Scripting API Wishlist by CookieRevised on 09-01-2006 at 11:43 AM

quote:
Originally posted by saralk
Since bugs would take priority over features, I wont include them in here, Patchou would probably fix all the existing bugs before he adds any new features.
very true (...and hopefully!).

But the thread/post is not only about bugs, but mainly and also about adding new "proprer" features (instead of adding "quick-fix" functions which don't do what they are supposed to/why people requested them). I guess it's a mingling between the two...
RE: Scripting API Wishlist by Pure_BY on 09-01-2006 at 02:44 PM

* The ability to perform action messages seen by both users, or just the local user. (2 People want this)
* A function to calculate the user hashes in the registry
* Add to chat log, i.e. the ability to add an item to a conversation chat log

These would be very nice, I suppose. Also, as requested here -- http://shoutbox.menthix.net/showthread.php?tid=65...d=722675#pid722675 — the ability to properly change contact's nicknames in contact list would be nice (for example, to display their status behind the nick, or another features, I am sure there will be many many different nice things possible to do with scripts if nicknames in contact list / conversations (separate from each other) would be editable).


RE: Scripting API Wishlist by Shondoit on 09-02-2006 at 09:06 AM

quote:
A method to get a pointer for functions (so that we can use API callbacks)
Add me with that

Also the ability to Get/Set the local personal status, and of the contact

And I would really like that the Origin of ChatWndReceiveMessage would e changed to the Email, or add it as an extra param...
RE: RE: Scripting API Wishlist by Jedimark on 09-02-2006 at 09:21 AM

quote:
Originally posted by Mothuim
Three words, "sortable listview columns"

Yes!
(Sort numerically and alphabetically)

Also the ability to change column header text in a List View!
RE: Scripting API Wishlist by Poom on 09-02-2006 at 09:39 AM

I am not a coder myself, but I think Scripts miss a lot of features they should have. Scripts are like Extensions in Firefox, IMO. They are neat little tools to add functions to Messenger quickly and easily. Yet, they lack several things Firefox Extensions have and I find that very important. Well, they are...

1. Versions
This is very important. I find it very annoying that I can't track whether this bug in a script is fixed or not. Is my script outdated, etc. I think this is crucial.

2. Options Dialogue
Well, scripts can have an option dialogue, but I think it'd be more useful if there's an options button in the scripts preferences menu. It is more organized that way, rather than clicking options in the contact list only.

3. Homepage of a script
People can check for news of the script, etc.

4. About Dialogue
We can actually know what they do with this, in case we forget.

5. Script Menus are in a compact menu
In the plus' icon's dropdown menu, both the one in conversation windows and the one in contact list, scripts menus (options, etc) are just in a stack of pile. This makes the dropdown menu very long if you have a lot of script. Making it a compact menu would be lovely.


RE: Scripting API Wishlist by Shondoit on 09-02-2006 at 12:02 PM

Multiline support for the RichStaticControl !!


RE: Scripting API Wishlist by markee on 09-02-2006 at 12:12 PM

Setting the size of the text in RichStaticControl


RE: Scripting API Wishlist by Ezra on 09-02-2006 at 04:40 PM

Add prototype support for msgplus objects so we can add methods and variables to msgplus objects.


RE: Scripting API Wishlist by Shondoit on 09-02-2006 at 09:10 PM

quote:
Add prototype support for msgplus objects so we can add methods and variables to msgplus objects
Me too...

And also: dynamicly change the size and visibility of controls...
RE: Scripting API Wishlist by deAd on 09-02-2006 at 10:38 PM

That's easy with Interop functions, one line each :) but that's a bit besides the point :$


RE: Scripting API Wishlist by NiteMare on 09-02-2006 at 11:11 PM

i'd like the ability to disable logs for a specific event, if its possable, althought i doubt it is


RE: Scripting API Wishlist by Shondoit on 09-02-2006 at 11:16 PM

quote:
Originally posted by deAd
That's easy with Interop functions, one line each :) but that's a bit besides the point :$
Yes it is...But it would be a lot easier, and more logical to do it with normal scripting, imho
RE: Scripting API Wishlist by phalanxii on 09-03-2006 at 03:43 AM

quote:
Originally posted by NiteMare
i'd like the ability to disable logs for a specific event, if its possable, althought i doubt it is

Yes, I would like something like this as well. Perhaps events like:
code:
OnEvent_EventLogEventAdded(
    [string] Origin,
    [string] Description,
    [enum] Icon
);
and
code:
OnEvent_ChatLogEventAdded(
    [string] Origin,
    [string] Description
);
The events could work like OnEvent_ChatWndSendMessage, requiring a return value of Description (so that if it's empty, the event is not added).
RE: Scripting API Wishlist by wlmcrap on 09-03-2006 at 04:37 AM

E-Mail Count.


RE: Scripting API Wishlist by CookieRevised on 09-03-2006 at 02:15 PM

As the list grows, I think there must a distinction be made between stuff which is already possible by scripting and things which aren't possible with scripting.

--------------

Another suggested not possible with scripting and which would be highly used if available: The ability to add your own submenu's in the right click context menu in the contactlist (in the "msgplus extras" menu) both for contacts as for groups. And the click events would obviously also return the groupname or contactemail.

(for the groups, you can't do much with the groupname yet, but I think it should be returned nevertheless or to be taken in account for later use :D)


RE: Scripting API Wishlist by Buzz44 on 09-03-2006 at 02:27 PM

Agreed.

The "sortable listview column" idea can be done already just by using a sorting algorithm and making in into a function. I would have the parameter as; sLVControlID, bDescending, iColumnID, ofcourse thats coming from a multilingual background ;), so I'm guessing you would have to keep to your preferred variable naming syntax for consistency.


RE: Scripting API Wishlist by saralk on 09-03-2006 at 06:04 PM

quote:
Originally posted by CookieRevised
As the list grows, I think there must a distinction be made between stuff which is already possible by scripting and things which aren't possible with scripting.

I was about to do the same thing, done it now. I think I have got everything in the right category, if I haven't tell me. It should now be a bit easier for Patchou to priorotise the development of new features.

It would be handy if from now on you told me which group to put your new features in.
RE: Scripting API Wishlist by CookieRevised on 09-03-2006 at 07:10 PM

some corrections on the categories:

# Sortable listview columns (2 people want this)
# Making scripts to be able to actually use the TranslationId property in the Window element.

both are also not impossible todo with scripting.

----------

# Version number, about dialogue, homepage address all accessable from the scripts dialogue

All this is the responsebility of the scripter himself tbh. If the scripter does not provide an about dialog with the info in it, doesn't provide a version number inside the ScriptInfo and script code, etc, Plus! wouldn't be able todo anything about it.

What might be new is a config button in the scripts preference dialog of Plus!, just like in Plus!3, but all the other stuff is really the responsebility of the programmer.

----------

# A function to calculate the user hashes in the registry (2 people want this)

this is possible, if the method is getting documented that is.


RE: Scripting API Wishlist by saralk on 09-03-2006 at 07:38 PM

quote:
Originally posted by CookieRevised
# Version number, about dialogue, homepage address all accessable from the scripts dialogue

All this is the responsebility of the scripter himself tbh. If the scripter does not provide an about dialog with the info in it, doesn't provide a version number inside the ScriptInfo and script code, etc, Plus! wouldn't be able todo anything about it.

What might be new is a config button in the scripts preference dialog of Plus!, just like in Plus!3, but all the other stuff is really the responsebility of the programmer.

Even if the developer sets the details, then there is no standardised way to view this apart from during installation.
RE: Scripting API Wishlist by CookieRevised on 09-06-2006 at 03:07 AM

my recent wish (totally not possible atm): enumerate timers...

at the moment there is no way to retrieve/ check what times are running. If there was a way to determine this, developpers can more easly (and more elagant) check for important things like timers which are still running when another user signs in (common mistake to make in scripts which use timers).

example of workaround (which I actually turned into a 'feature', see disclaimer) and more notes about this in my script nudge flood protection.


EDIT: and while at it, a function to see how many time (in ms) there is left for a specific timer.

;)


RE: Scripting API Wishlist by markee on 09-06-2006 at 03:27 AM

quote:
Originally posted by CookieRevised
my recent wish (totally not possible atm): enumerate timers...

at the moment there is no way to retrieve/ check what times are running. If there was a way to determine this, developpers can more easly (and more elagant) check for important things like timers which are still running when another user signs in (common mistake to make in scripts which use timers).

example of workaround (which I actually turned into a 'feature', see disclaimer) and more notes about this in my script nudge flood protection.


EDIT: and while at it, a function to see how many time (in ms) there is left for a specific timer.

;)

If you want to be creative using global variables you can check the first one about if a timer is currently in use (though there will be a very small amount of time either side where it will still say that it is being used), though it would be good for us to be able to check rather than have to rely on extra variables.  Though the second one would become very useful i think.

I would also like the ability to have received messages longer than the original would be nice (though this might be set by messenger, I should do some research....).  Or even being able to edit the text that appears to make it into a set colour, font, bolding, italic, etc. as this is the main reason behind me wanting to be able to lengthen messages.
RE: Scripting API Wishlist by matty on 09-06-2006 at 03:29 AM

quote:
Originally posted by saralk
The e-mail of the user to be added as a param to Origin in ChatWndReceiveMessage
The following response from Patchou is taken from the Beta Testing section:
quote:
Originally posted by Patchou
So you honestly think I would send you the name of the contact if I could send you his email? :)

Messenger Plus! itself has no idea what the email of the contact is when a message is received in a chat. That's because messages are analysed when inserted in the edit box, not when received in the protocol stream (and there's a lot of other advantages to that).

So there's no way I can help you on this. What I can tell you though is that Messenger Plus! has always worked this way for some features, by guessing, and nobody ever complained about it. Changes that somebody is talking to multiple contacts in the same window who have the exact same names are very poor.

quote:
Originally posted by saralk
Getting the font and font colour of contacts.
Why? What is the point of adding a feature that has only 1 purpose? Which is to set the font style and colour to imitate your contact. No one has created a chat logging system (that I am aware of).
quote:
Originally posted by saralk
Options dialogue accessable from the scripts menu
Again why? This is up to the Programmer of the script to add in the menus.
RE: RE: Scripting API Wishlist by markee on 09-06-2006 at 03:37 AM

quote:
Originally posted by Matty
quote:
Originally posted by saralk
Getting the font and font colour of contacts.
Why? What is the point of adding a feature that has only 1 purpose? Which is to set the font style and colour to imitate your contact. No one has created a chat logging system (that I am aware of).

I wrote one last night (markee's reply to serious problem) but there is no point with MP!L and it's chat logging system.  We are basically limited to what is already included in the chat logging system anyway (unless you wish to go into packet sniffing or recording other events).  The only reason I made that basic chat logger is because of a bug in MP!L that allows you to turn of chat-logging even if changing preferences are disabled.
RE: Scripting API Wishlist by NiteMare on 09-06-2006 at 04:14 AM

quote:
Originally posted by phalanxii
Yes, I would like something like this as well. Perhaps events like:
code:
OnEvent_EventLogEventAdded(
    [string] Origin,
    [string] Description,
    [enum] Icon
);
and
code:
OnEvent_ChatLogEventAdded(
    [string] Origin,
    [string] Description
);
The events could work like OnEvent_ChatWndSendMessage, requiring a return value of Description (so that if it's empty, the event is not added).
no you mis understood
i wan thte ability to have an event NOT loged, such as for my count down script, i would like the logs not to show teh DOZENS of log entrys it will make
RE: RE: Scripting API Wishlist by CookieRevised on 09-06-2006 at 06:22 AM

quote:
Originally posted by markee
quote:
Originally posted by CookieRevised
my recent wish (totally not possible atm): enumerate timers...

at the moment there is no way to retrieve/ check what times are running. If there was a way to determine this, developpers can more easly (and more elagant) check for important things like timers which are still running when another user signs in (common mistake to make in scripts which use timers).

example of workaround (which I actually turned into a 'feature', see disclaimer) and more notes about this in my script nudge flood protection.


EDIT: and while at it, a function to see how many time (in ms) there is left for a specific timer.

;)
If you want to be creative using global variables you can check the first one about if a timer is currently in use (though there will be a very small amount of time either side where it will still say that it is being used), though it would be good for us to be able to check rather than have to rely on extra variables.  Though the second one would become very useful i think.
can you explain what you're on about here as I don't understand it..... What I suggested is a function to enumerate timers, dunno what this has todo with "being creative with global variables"...

EDIT (after markee's reply):
Yeah, I posted it right before I went to work (am at work now). While I was driving at work I was wondering about what you've said, I realized it then. And that is actually exactly what I did in that flood protect script too: using a global array (but also using that array to count wasn't the 'feature' I was talking about though). Stupid me.
RE: RE: RE: Scripting API Wishlist by markee on 09-06-2006 at 06:46 AM

quote:
Originally posted by CookieRevised
quote:
Originally posted by markee
quote:
Originally posted by CookieRevised
my recent wish (totally not possible atm): enumerate timers...

at the moment there is no way to retrieve/ check what times are running. If there was a way to determine this, developpers can more easly (and more elagant) check for important things like timers which are still running when another user signs in (common mistake to make in scripts which use timers).

example of workaround (which I actually turned into a 'feature', see disclaimer) and more notes about this in my script nudge flood protection.


EDIT: and while at it, a function to see how many time (in ms) there is left for a specific timer.

;)
If you want to be creative using global variables you can check the first one about if a timer is currently in use (though there will be a very small amount of time either side where it will still say that it is being used), though it would be good for us to be able to check rather than have to rely on extra variables.  Though the second one would become very useful i think.
can you explain what you're on about here as I don't understand it..... What I suggested is a function to enumerate timers, dunno what this has todo with "being creative with global variables"...

I was talking about setting a global variable just before you start a timer and then change it back to the original value once the timer has been fired.  This way you can check on your timers.  Sorry, I should have explained it better before.  I know this isn't exactly the cleanest and nicest way of going about it but it is a work around that you can do while you wait for this implitation (though I'm sure you could have worked it out yourself before-hand).  If you would like me to give you n example just PM me rather than going too far offtopic in this thread.
RE: Scripting API Wishlist by saralk on 09-06-2006 at 08:46 AM

quote:
Originally posted by Matty
quote:
Originally posted by saralk
Getting the font and font colour of contacts.
Why? What is the point of adding a feature that has only 1 purpose? Which is to set the font style and colour to imitate your contact. No one has created a chat logging system (that I am aware of).

There could be many other uses for this, once people have the ability to do something, they could have ideas that aren't apparant yet.

quote:
quote:
Originally posted by saralk
Options dialogue accessable from the scripts menu
Again why? This is up to the Programmer of the script to add in the menus.

Currently there is no standardised way to do it, by having an Options button in the scripts dialogue, akin to what was there with Plugins, all users will know exactly where to find the options dialogue, without hunting around for it in menus.
RE: RE: Scripting API Wishlist by markee on 09-06-2006 at 09:00 AM

quote:
quote:
Originally posted by saralk
Options dialogue accessable from the scripts menu
Again why? This is up to the Programmer of the script to add in the menus.

Currently there is no standardised way to do it, by having an Options button in the scripts dialogue, akin to what was there with Plugins, all users will know exactly where to find the options dialogue, without hunting around for it in menus.


This sounds quite like what Firefox has with it's extensions and it is very useful. It also has it expand on selection to add more information like a description and version numbers which also helps.  I already know these features have been said before but I think giving people an example is alway useful.
RE: Scripting API Wishlist by saralk on 09-07-2006 at 06:12 PM

My own suggestion: some way of aborting scripts if it goes into an infinate loop.


RE: RE: Scripting API Wishlist by alexp2_ad on 09-07-2006 at 06:16 PM

quote:
Originally posted by NiteMare
quote:
Originally posted by phalanxii
Yes, I would like something like this as well. Perhaps events like:
code:
OnEvent_EventLogEventAdded(
    [string] Origin,
    [string] Description,
    [enum] Icon
);
and
code:
OnEvent_ChatLogEventAdded(
    [string] Origin,
    [string] Description
);
The events could work like OnEvent_ChatWndSendMessage, requiring a return value of Description (so that if it's empty, the event is not added).
no you mis understood
i wan thte ability to have an event NOT loged, such as for my count down script, i would like the logs not to show teh DOZENS of log entrys it will make

I think the person meant if there is an event for it then you can return an empty string and not have it logged, like with sending messages, to not have a message sent you return an empty string... so these events could work the same way.
RE: Scripting API Wishlist by Shondoit on 09-10-2006 at 01:11 PM

An update feature...
I have an auto update in one of my scripts which downloads the new .plsc, and automaticaly executes it. But this does not update the currently running script (I believe the script is loaded in the memory?)
Or perhaps the ability to restart the script... (something like Script.Restart()). talking 'bout that.. maybe stopping the script too, when your script detects some critical error, that it gives a message to contact the author and automaticaly stops itself (Script.Stop())

And also, I would like a way to get the quickname of contacts... WLM has the option the give a contact a custom name, different then theirs... I really would like a way to get that name

But mainly that update feature, or the ability to restart the script...


RE: Scripting API Wishlist by NanaFreak on 10-16-2006 at 07:11 AM

ok dont get up me for reviving this old thread but i have a good idea

i hate how you have to go to you contacts list to get the debug window up.

my idea is put it into the scripting window and have it automaticly go to the script that you are working on


********

another idea is when adding a comment into a script ( /* comment */ ) it should turn an orange colour like this /* comment */ so that it is easier to read them


RE: RE: Scripting API Wishlist by CookieRevised on 10-16-2006 at 06:46 PM

quote:
Originally posted by NanaFreak
ok dont get up me for reviving this old thread but i have a good idea
excellent, although this thread is about improvements to the scripting API, the programming language itself... not for improvements/ideas to Plus!'s interface.

anyways...

quote:
Originally posted by NanaFreak
i hate how you have to go to you contacts list to get the debug window up.

my idea is put it into the scripting window and have it automaticly go to the script that you are working on
Automatically going to the script your working on isn't such a good idea. There are many occasions for example when I'm working on a specific script, but are monitoring another script, etc...

A menu entry in the already existing options menu to click to quickly show the debug output of the script you're working on seems like a good idea though (especially when you have almost a hundred scripts running like me). But it should not be automatically.

quote:
Originally posted by NanaFreak
another idea is when adding a comment into a script ( /* comment */ ) it should turn an orange colour like this /* comment */ so that it is easier to read them
reported before; multi line comments are not colored...

But it should turn into the color used for comments (by default green) IMHO.
RE: RE: Scripting API Wishlist by Jesus on 10-25-2006 at 09:24 PM

quote:
Originally posted by NanaFreak
so that it is easier to read them

the debug window's background color is theme specific ;)

I would like an OnEvent_EmailReceived to be added to the scripting system
RE: Scripting API Wishlist by NanaFreak on 10-25-2006 at 09:27 PM

quote:
Originally posted by Jesus
the debug window's background color is theme specific ;)
i wasnt talking about the debug window there... i was talking about in the scripting window where you write the /* */
RE: RE: Scripting API Wishlist by Jesus on 10-25-2006 at 09:29 PM

quote:
Originally posted by NanaFreak
i wasnt talking about the debug window there... i was talking about in the scripting window where you write the /* */

doh, I'm a bit sleepy :P
that background color is theme specific too ;)

Oh yeah, more about the OnEvent_EmailReceived suggestion, it should detect the pop3 emails too :D
something like this is what I have in mind

OnEvent_EmailReceived(
    [string] Email,
    [number] Amount,
);
RE: Scripting API Wishlist by Plan-1130 on 10-25-2006 at 10:28 PM

I'd realy like to have more control over the file transfers, like Messenger.FileTransfers returns a FileTrans object which can be iterated to retrieve a FileTran object with methods like FileTran.Stop, and Properties like FileTran.FileName, FileTran.FileSize, FileTran.Speed, FileTran.Direction (return enumerator, 0 = inbound, 1 = outbound).

Also, if a message is received, the raw package seems to include the email too, so maybe it's not that impossible to include the email as a parameter in the OnEvent_ChatWndReceiveMessage, I intercepted 2 interesting packages with Xniff:


« (283) MSG email@gmail.com his%20name 89  MIME-Version: 1.0  Content-Type: text/x-msmsgscontrol  TypingUser: email@gmail.com
   
« (325) MSG email@gmail.com his%20name 130  MIME-Version: 1.0  Content-Type: text/plain; charset=UTF-8  X-MMS-IM-Format: FN=MS%20Shell%20Dlg; EF=; CO=0; CS=0; PF=0    heya :P


As you can see (i changed the emailadress a bit of course) the email address is sent, followed by the name that is going to be displayed (if you change this, you got that chat-only-name feature, i guess) and at the end somewhere is the actual message.
Also the first message shows an incoming "<user> is typing." message, which you can block if outbound, so nobody can see that you are typing (a script request for this has been made actually)

Maybe it's an idea to include the raw package as a parameter in OnEvent_ChatWndReceiveMessage and OnEvent_ChatWndSendMessage, and/or make 2 events like OnEvent_ReceiveRawPackage and OnEvent_SendRawPackage (triggered before actual sending, so you can edit it), so that you can have just that little bit of extra control over the raw packages.


RE: RE: Scripting API Wishlist by Jesus on 10-25-2006 at 10:56 PM

quote:
Originally posted by Plan-1130
so maybe it's not that impossible to include the email as a parameter in the OnEvent_ReceivedMessage

If you were replying to my suggestion here, but I meant an OnEvent_EmailReceived event, fired when you receive a new email message.
If you meant the OnEvent_ChatWndReceiveMessage, an Email parameter would be cool, but if it was possible to determine which contact the message came from (this is currently impossible for MP!L) I'd rather have a Contact object added as a parameter.
RE: Scripting API Wishlist by CookieRevised on 10-26-2006 at 12:13 AM

Plan-1130, Plus! doesn't use packet sniffing. It uses as little as possible the protocol.


RE: Scripting API Wishlist by deAd on 10-26-2006 at 12:53 AM

quote:
Originally posted by CookieRevised
Plan-1130, Plus! doesn't use packet sniffing. It uses as little as possible the protocol.
Then how does it generate the OnEvent_SigninReady() event?
quote:
Originally posted by scripting docs
This event is generated some time (generally within 10 seconds) after the current user signs in the Messenger service. Messenger Plus! waits until no more "ILN - initially online" message is received from the server.

RE: Scripting API Wishlist by CookieRevised on 10-26-2006 at 01:10 AM

quote:
It uses as little as possible the protocol.

RE: Scripting API Wishlist by Plan-1130 on 10-26-2006 at 02:48 PM

quote:
Originally posted by Jesus
If you were replying to my suggestion here, but I meant an OnEvent_EmailReceived event, fired when you receive a new email message.
If you meant the OnEvent_ChatWndReceiveMessage, an Email parameter would be cool, but if it was possible to determine which contact the message came from (this is currently impossible for MP!L) I'd rather have a Contact object added as a parameter.
I meant the OnEvent_ChatWndReceiveMessage, I'm sorry, post updated, and i agree with the Contact object instead of Email
quote:
Originally posted by CookieRevised
It uses as little as possible the protocol.
But why not change that a little, as far as i know it's legal (unlike the hiding of the advertisements feature MP once had), and it would be so incredibly cool to script.
And i think it's not that hard for Patchou because he wrote MessengerPlus! Live already. It might take some time to write, but it would be soo much worth it. A new world will be opened for scripters and Patchou himself.
A new breed of scripts will arise!

RE: RE: Scripting API Wishlist by Jesus on 10-27-2006 at 01:01 AM

quote:
Originally posted by Plan-1130
if a message is received, the raw package seems to include the email too, so maybe it's not that impossible to include the email as a parameter in the OnEvent_ChatWndReceiveMessage, I intercepted 2 interesting packages with Xniff:


« (283) MSG email@gmail.com his%20name 89  MIME-Version: 1.0  Content-Type: text/x-msmsgscontrol  TypingUser: email@gmail.com
   
« (325) MSG email@gmail.com his%20name 130  MIME-Version: 1.0  Content-Type: text/plain; charset=UTF-8  X-MMS-IM-Format: FN=MS%20Shell%20Dlg; EF=; CO=0; CS=0; PF=0    heya :P


I just tried to get the email in OnEvent_ChatWndReceiveMessage by using Pai's Xniff to save the email address that comes with every text message in the protocol to a variable, which could be retrieved from within the event code. Unfortunately, Xniff only detects the incoming protocol message after OnEvent_ChatWndReceiveMessage is fired :( so it's quite useless, unless you want to know who sent you the message before the last one :P
RE: Scripting API Wishlist by Plan-1130 on 10-27-2006 at 03:16 AM

That is why i requested MsgPlus to include the raw package, the email, or the contact as a parameter... Or even an OnEvent_ReceiveRawPackage and OnEvent_SendRawPackage...
If those last 2 could be added, it would be so cool. I'd love to learn a bit more about the raw packages, it would give so much control if you know it all.
I'd even beg Cookie for helping me with Regular Expressions, i truly still don't get the syntax, and raw packages are almost impossible to split using .split() method.

If this won't be added for some reason, and someone has the time, and feels like it, and knows how to, and is willing to etc. We could try to make a dll that intercepts raw packages. Not a packet sniffer, but an intercepter, one that holds them, processes them and passes them through, and maybe can send them too.
Not that I know how to do it, but I'd die to learn how to do it. :)

NEW IDEA: Maybe it's a good thing to change the Timer feature so that it calles a function you define, other that calling OnEvent_Timer with the id as a parameter.
Ex:

code:
function OnEvent_ChatWndReceiveMessage(ChatWnd, Origin, Message, MessageKind)
{
MsgPlus.AddTimer("DelayedFunction(\"first parameter\",ChatWnd)", 1500);
}

function DelayedFunction(Text, Window)
{
Window.SendMessage(Text);
}

would, well, delay sending a message to that window.
I think it's a lot safer than to save the Chat Window in a global variable and that it would solve quite a few safety issues.
RE: Scripting API Wishlist by CookieRevised on 11-01-2006 at 09:42 AM

quote:
Originally posted by Patchou
So you honestly think I would send you the name of the contact if I could send you his email? :)

Messenger Plus! itself has no idea what the email of the contact is when a message is received in a chat. That's because messages are analysed when inserted in the edit box, not when received in the protocol stream (and there's a lot of other advantages to that).

So there's no way I can help you on this. What I can tell you though is that Messenger Plus! has always worked this way for some features, by guessing, and nobody ever complained about it. Changes that somebody is talking to multiple contacts in the same window who have the exact same names are very poor.

----------------------

As for the change in how the timers work. There is no difference (including no 'safety issues') between the one you prupose and the current one.
RE: Scripting API Wishlist by Plan-1130 on 11-01-2006 at 07:29 PM

well I guess you're right when you say it's nothing safer, but what I would like to do is send parameters too, including objects.
Ah, maybe just forget that thing...

quote:
Originally posted by Patchou
So you honestly think I would send you the name of the contact if I could send you his email? (Smilie)

Messenger Plus! itself has no idea what the email of the contact is when a message is received in a chat. That's because messages are analysed when inserted in the edit box, not when received in the protocol stream (and there's a lot of other advantages to that).

So there's no way I can help you on this. What I can tell you though is that Messenger Plus! has always worked this way for some features, by guessing, and nobody ever complained about it. Changes that somebody is talking to multiple contacts in the same window who have the exact same names are very poor.
But the chances someone has a Chat-Only name is getting bigger and bigger (can be done with the protocol, as i showed), and it's good to change things every so often, it's called evolution, imagine yourself being just 1 cell, instead of being millions like you are now...
As for the no-complains-yet, once has to be the first time, and I wouldn't call this a complaint, more like a wish (as this is a wish-list, and I never got the lamborghini I asked from Santa) :)
And why not use both the protocol and the edit box of the window, you'd have the advantages of both, except when it comes to speed maybe, but I don't think many people will care, as they have to have a good computer because WLM uses a lot of resources itself anyway.
If you'd use both the protocol and the edit box you can compare the names etc. It's up to a genius like Patchou to figure out how to do that the best and safest way.

I'm sorry if I sound like a know-all, or maybe even offending, it's just the protocol gives so much more information, and I would really like to get that information. If Messenger Plus! Live can intercept, and alter the protocol it would be almighty, it would cause a new breed of Scripts to evolve.
RE: Scripting API Wishlist by CookieRevised on 11-01-2006 at 11:42 PM

I understand what you're saying, but one of the reasons the protocol is used as little as possible is security (Plus! has been blamed to cause a whole range of connection problems before, even when it didn't used anything from the protocol and didn't interfeared with the protocol at all). And there are probably many more reasons why it is done as it is done now.

If things where so easy (and to show it isn't that easy to make a always working, no interfearing, reliable sniffer and stuff look at the few sniffers around which don't always work), it would have been done that way...

I'm not disputing the fact that more things could be done when the protocol is used, but only noting that there are reasons why something isn't done (yet).

------------

quote:
Originally posted by Plan-1130
well I guess you're right when you say it's nothing safer, but what I would like to do is send parameters too, including objects.
Besides using global variables (which I'm also not very fond of), there are other tricks you can use to still send parameters to the timers by using the timer's id itself.

Smart programming quite often also reduces the need for parameters to be passed (can't always be reduced to nothing, but quite often it can be reduced a great deal).

Nevertheless, it would indeed be nice that there could be optional parameters being passed to the timer event. But again this is far from easy to implement as the timer scheme being used is almost strait the one from Windows itself. Making it that Plus! itself quite probably must use global variables itself to pull it off. In other words, there would be no advantage (memory wise) to it also.
RE: Scripting API Wishlist by NanaFreak on 12-14-2006 at 03:36 AM

when markee and i were trying to set control text of a Text Element it wouldnt work... so then we looking into the scripting docs and we found out that you cant set the control text of it. we know a way of making it work (by hard coding it) but we really wanted to be able to use:

code:
WndId.SetControlText(ControlId, Stuff to put);
to do it... maybe in a future release?
RE: RE: Scripting API Wishlist by deAd on 12-14-2006 at 04:12 AM

quote:
Originally posted by NanaFreak
when markee and i were trying to set control text of a Text Element it wouldnt work... so then we looking into the scripting docs and we found out that you cant set the control text of it. we know a way of making it work (by hard coding it) but we really wanted to be able to use:
code:
WndId.SetControlText(ControlId, Stuff to put);
to do it... maybe in a future release?

You can't change any element's properties after the window is created. If you want to change the text at runtime make it a StaticControl.
RE: Scripting API Wishlist by NanaFreak on 12-14-2006 at 04:17 AM

quote:
Originally posted by deAd
You can't change any element's properties after the window is created. If you want to change the text at runtime make it a StaticControl.
but you cant add a StaticControl or any other controls into a RadioControl... the only thing that you can add is an element
RE: Scripting API Wishlist by markee on 12-14-2006 at 04:24 AM

NanaFreak didn't give enough information, it was a custom look of a Radio Control so you can only use an Element hence why we are having the problem with the TextElement.  I wish we could change it to a StaticControl or to be able to send text to a TextElement.


RE: RE: Scripting API Wishlist by deAd on 12-14-2006 at 04:36 AM

quote:
Originally posted by markee
NanaFreak didn't give enough information, it was a custom look of a Radio Control so you can only use an Element hence why we are having the problem with the TextElement.  I wish we could change it to a StaticControl or to be able to send text to a TextElement.

Now I see your point. This is a dirty solution, but it'll work:
(1) Make a CustomLook RadioButton with no text
(2) Place a StaticControl next to it on the window
(3) Change the text of the StaticControl.
RE: Scripting API Wishlist by NanaFreak on 12-14-2006 at 04:40 AM

quote:
Originally posted by deAd
Now I see your point. This is a dirty solution, but it'll work:
(1) Make a CustomLook RadioButton with no text
(2) Place a StaticControl next to it on the window
(3) Change the text of the StaticControl.
thanks for the idea but it wont work because when you click on the Radio Control the text goes from normal to bold

we were think of making multiple xml's for each language to fix it but then we thought it would be too much work for the translators / us and also when getting a new language it would be difficult
RE: RE: Scripting API Wishlist by deAd on 12-14-2006 at 04:41 AM

quote:
Originally posted by NanaFreak
quote:
Originally posted by deAd
Now I see your point. This is a dirty solution, but it'll work:
(1) Make a CustomLook RadioButton with no text
(2) Place a StaticControl next to it on the window
(3) Change the text of the StaticControl.
thanks for the idea but it wont work because when you click on the Radio Control the text goes from normal to bold

we were think of making multiple xml's for each language to fix it but then we thought it would be too much work for the translators / us and also when getting a new language it would be difficult

It'd work, you'd just have to use Windows Messages to set the text style.

EDIT: It wouldn't be too bad if you just removed the bolding altogether. Default controls do not go bold when you select them, and it's like that for a reason -- I personally think that's a bit too flashy and draws too much attention to that control.
RE: Scripting API Wishlist by markee on 12-14-2006 at 05:11 AM

We've discussed it and are going to use your dirty method and use 2 static controls for each radio control to be able to get the text size and bolding (for one of them) without hard coding it.  Though this would be much better if we had this ability rather than doing this dirty method, maybe we'll be lucky and get this functionality soon....


RE: Scripting API Wishlist by Choli on 01-17-2007 at 08:19 PM

quote:
Originally posted by saralk
Pointers for functions (for API Callbacks) (2 people want this)
quote:
Originally posted by saralk
Sortable listview columns (2 people want this)
count one person more in those suggestions :P
quote:
Originally posted by saralk
Changing the size and opacity of buttons
of which buttons? the ones of the interface? can't you call SetLayeredWindowAttributes using the Handle of the button?
RE: Scripting API Wishlist by Rolando on 01-17-2007 at 08:29 PM

You've
The e-mail of the user to be added as a param to Origin in ChatWndReceiveMessage

listed twice. one with .... and one normal on the same list.

I would like greater control over file transfer (Y)


RE: Scripting API Wishlist by matty on 01-17-2007 at 08:32 PM

Usable TreeViewControl!

quote:
Originally posted by saralk
Pointers for functions (for API Callbacks) (2 people want this)

Patchou told me this isn't possible, however you never know.
RE: Scripting API Wishlist by Jesus on 01-22-2007 at 02:49 PM

This has been mentioned before, but I would like to be able to detect action messages, nudges and that kind of stuff in OnEvent_ChatWndReceiveMessage (or maybe a seperate event)



Oh yeah, why isn't this thread sticky??


RE: Scripting API Wishlist by tryxter on 01-22-2007 at 02:57 PM

  • Sortable listview columns
  • Update system (the ability to automatically download the new plsc file, uninstall the current version, and install the new version)
  • Being able to stop and restart scripts

RE: Scripting API Wishlist by Choli on 01-22-2007 at 04:09 PM

quote:
Originally posted by Matty
quote:
Originally posted by saralk
Pointers for functions (for API Callbacks) (2 people want this)

Patchou told me this isn't possible, however you never know.
I'm sure it is possible. Timers use callbacks, and Plus' API has timers. So why can't Plus use pointers to functions? Of course it'll be a bit more complex, but it can be done.

I think i'll make a detailed suggestion of how Plus should implement that and send it to Patchou :P

----

One thing more to add to the scripting engine: The ability to call functions which return void. Currently, functions called with Interop.Call must return something. I'd like to call functions such OutputDebugString or Sleep which return nothing (void).
RE: Scripting API Wishlist by vikke on 01-22-2007 at 04:58 PM

quote:
One thing more to add to the scripting engine: The ability to call functions which return void. Currently, functions called with Interop.Call must return something. I'd like to call functions such OutputDebugString or Sleep which return nothing (void).
Do you want a DLL doing that for you? :)
RE: Scripting API Wishlist by Choli on 01-22-2007 at 05:34 PM

no, thanks :P I could do that DLL, but currently I don't need to call any of those APIs in my scripts. However, other people may need to call them, or I may want to call them in the future, that's why i suggested it to be included in Plus.

Anyway, if you have that DLL, you can upload it (if you want) therefore people can take benefit from it :)


RE: RE: Scripting API Wishlist by CookieRevised on 01-27-2007 at 04:29 PM

quote:
Originally posted by tryxter
Update system (the ability to automatically download the new plsc file, uninstall the current version, and install the new version)
No need for that tbh. Simply reinstall the new version, being it manually or being it with the previous script itself that doesn't matter. As a matter of fact, many scripts already do this...

quote:
Originally posted by tryxter
Being able to stop and restart scripts
as for restarting, see "CookieRevised's reply to Restart script through code".

quote:
Originally posted by Choli
One thing more to add to the scripting engine: The ability to call functions which return void. Currently, functions called with Interop.Call must return something. I'd like to call functions such OutputDebugString or Sleep which return nothing (void).
Already possible since there is no difference actually (PS: they return 0). And if you don't want to waste a variable which would contain nothing anyways, then call the function as a procedure... Works perfectly here.

eg:
// Do something here and suspend execution of Messenger for 5 seconds
Interop.Call("Kernel32", "Sleep", 5000);
// Print a debug Message
Interop.Call("Kernel32", "OutputDebugStringW", "Hello World");
// Continue whatever you were doing

[Image: attachment.php?pid=782889]
http://www.microsoft.com/technet/sysinternals/Mis...ous/DebugView.mspx

RE: Scripting API Wishlist by Jesus on 01-27-2007 at 06:22 PM

I would like a function to grey out certain controls (eg. CheckBoxes) in PlusWnd objects

edit: and maybe even to make them (in)visible too...

Or a more VB-alike way of controlling the controls in a pluswnd, so that you can access and edit any property a control has through scripting.

Example: PlusWnd.ControlId.Property = value;


RE: RE: Scripting API Wishlist by vikke on 01-27-2007 at 06:29 PM

quote:
Originally posted by Eljay
quote:
Originally posted by Jesus
I would like a function to grey out certain controls (eg. CheckBoxes) in PlusWnd objects

If you mean to disable them, this should do the trick:
code:
Interop.Call("user32", "EnableWindow", PlusWnd.GetControlHandle("YourControl"), 0);

Actually it would be:
Enable:
code:
Interop.Call("user32", "EnableWindow", PlusWnd.GetControlHandle("YourControl"), true);
Disable:
code:
Interop.Call("user32", "EnableWindow", PlusWnd.GetControlHandle("YourControl"), false);
Because it's a BOOL over at MSDN :)
RE: Scripting API Wishlist by Eljay on 01-27-2007 at 06:31 PM

quote:
Originally posted by vikke
Actually it would be:
Enable:
code:
Interop.Call("user32", "EnableWindow", PlusWnd.GetControlHandle("YourControl"), true);
Disable:
code:
Interop.Call("user32", "EnableWindow", PlusWnd.GetControlHandle("YourControl"), false);
Because it's a BOOL over at MSDN :)

quote:
Originally posted by windef.h
#define FALSE    0
#define TRUE    1

:P
RE: Scripting API Wishlist by Jesus on 01-27-2007 at 06:39 PM

lol I hadn't thought about Interop.Call yet, gonna try that now. Thanks for the tip.

Anyway I still want the VB-like way of editing properties :P like in the edit in my previous post...


RE: Scripting API Wishlist by Eljay on 01-27-2007 at 06:46 PM

quote:
Originally posted by Jesus
lol I hadn't thought about Interop.Call yet, gonna try that now. Thanks for the tip.

Anyway I still want the VB-like way of editing properties :P like in the edit in my previous post...

I guess I could make a script/library that allowed for that sort of thing, but it would be complex (especially as we can't extend the Plus default objects (in this case PlusWnd)).
RE: RE: Scripting API Wishlist by Jesus on 01-27-2007 at 07:06 PM

quote:
Originally posted by Eljay
I guess I could make a script/library that allowed for that sort of thing, but it would be complex (especially as we can't extend the Plus default objects (in this case PlusWnd)).

would that make it just complex or impossible (for now)?

this is the thread for scripting API suggestions, so we could add "the possibility to extend Plus! default objects" to the list too (if it isn't already on the list, that is)
RE: Scripting API Wishlist by Eljay on 01-27-2007 at 09:48 PM

quote:
Originally posted by Jesus
would that make it just complex or impossible (for now)?

this is the thread for scripting API suggestions, so we could add "the possibility to extend Plus! default objects" to the list too (if it isn't already on the list, that is)

I think it's already on the list, it doesn't make it impossible to do, it just means it would need to be done differently. Although it's already hard enough to do because I would have to parse the XML myself to get the ControlId of each control and afaik they are not available anywhere else.
RE: RE: Scripting API Wishlist by vikke on 01-27-2007 at 09:54 PM

quote:
Originally posted by Eljay
quote:
Originally posted by vikke
Actually it would be:
Enable:
code:
Interop.Call("user32", "EnableWindow", PlusWnd.GetControlHandle("YourControl"), true);
Disable:
code:
Interop.Call("user32", "EnableWindow", PlusWnd.GetControlHandle("YourControl"), false);
Because it's a BOOL over at MSDN :)

quote:
Originally posted by windef.h
#define FALSE    0
#define TRUE    1

:P

I know your code was working :) but it should be a bool :P
RE: Scripting API Wishlist by Eljay on 01-27-2007 at 10:06 PM

quote:
Originally posted by vikke
I know your code was working :) but it should be a bool :P

Actually it doesn't make a difference. :P

quote:
Originally posted by Script Docs > Interop.Call

If the parameter is a boolean, a number is sent: 1 for true, 0 for false.

RE: Scripting API Wishlist by Matti on 04-10-2007 at 05:46 PM

I just got a nice idea for a feature! What do you think about creating a Plus! window based on an actual string instead of creating it based on a file name? That way, we could first load the XML in the script, make some changes and then create the window, like this:

code:
var txt = new ActiveXObject("Scripting.FileSystemObject").GetFile(MsgPlus.ScriptFilesPath + "\\Windows.xml").OpenAsTextStream(1, -1).ReadAll();
txt = txt.replace("helol", "hello");
var PlusWnd = MsgPlus.CreateWndFromString(txt, "WndPref");
Or, another thing: creating a window based on a XML DOM node object, like:
code:
var node = xml.selectSingleNode("//Window[@Id='WndPref']");
var PlusWnd = MsgPlus.CreateWndFromNode(node);
Both of these examples could save CPU usage because you don't need to re-save the file since you just send it right to the Plus! Scripting API, and it lets developers make some routine changes to the XML before creating the window, making translating windows a lot easier and faster. Well, what do you think? :)
RE: Scripting API Wishlist by CookieRevised on 04-10-2007 at 06:38 PM

It could have its uses I guess (although I don't know any which could be shorter than the normal method). eg: Not for translating as that could be done a lot easier and shorter by simply altering the controls' caption.


RE: Scripting API Wishlist by Eljay on 04-10-2007 at 06:55 PM

quote:
Originally posted by CookieRevised
It could have its uses I guess (although I don't know any which could be shorter than the normal method). eg: Not for translating as that could be done a lot easier and shorter by simply altering the controls' caption.

The problem is you can only translate controls in this way, elements cant be translated. So a better suggestion would be some sort of PlusWnd.SetElementText() method to make translation easier.
RE: Scripting API Wishlist by Ashylay on 04-10-2007 at 07:01 PM

The ability to preview your PSM in colour?

eg with your name when you add colour you can see it but your psm displays the colour codes.


RE: Scripting API Wishlist by Choli on 04-10-2007 at 07:01 PM

I agree with Mattike. And the great thing is not only to translate controls or reduce CPU... the great thing is that you can create a window with dynamic controls, ie: when developing the script, the developer may not know how many buttons his window should show. But in run time, the script can create a XML code that includes as many buttons as they're needed and then show the window.


RE: Scripting API Wishlist by Felu on 04-10-2007 at 11:52 PM

quote:
Originally posted by Ashylay
The ability to preview your PSM in colour?

eg with your name when you add colour you can see it but your psm displays the colour codes.
1. This is not related to scripts.
2. PSM is displayed in color, if you add yourself to your own contact list.
3. The PSM space below the nice cannot show the PSM colored as Patchou still hasn't found a way on how to do it :P.
RE: Scripting API Wishlist by Dempsey on 04-11-2007 at 07:24 AM

quote:
Originally posted by Felu
[
3. The PSM space below the nice cannot show the PSM colored as Patchou still hasn't found a way on how to do it :P.
I don't think that's the case, I'm sure I remember him saying it's not done on purpose for some reason or another.  Or I may be lying, I can't remember.
RE: RE: Scripting API Wishlist by Matti on 04-11-2007 at 08:21 AM

quote:
Originally posted by Eljay
The problem is you can only translate controls in this way, elements cant be translated. So a better suggestion would be some sort of PlusWnd.SetElementText() method to make translation easier.

And you can't translate MenuButtonControl menu's, <Help> tags (luckily there's the _ToolTip class which I use for that), and translating the Caption using SetWindowTextW has the disadvantage that it forces Plus! to add a Plus! styled TitleBar to the window, even if the XML doesn't specify one. And I guess that Plus! has to load the file contents in a string itself too, so why can't we just send the string straight to the API?
RE: Scripting API Wishlist by markee on 01-16-2008 at 05:22 AM

Time for some bumping.  Anyway, I found something that I'd like.  The ability to cancel the closing of a Plus Window.  Something like returning false to the OnWindowidEvent_Destroyed function would suffice I think.  This way I could just hide the window for a moment even if the user has tried to close the window through the task bar or the X in the corner or something.


RE: Scripting API Wishlist by matty on 01-16-2008 at 05:59 PM

I would really like to have an OnProcessEvent_Terminate.

Why would this be beneficial to scripts? Simple. When dealing with system wide hooks, like hot keys. If the Windows Live Messenger process is terminated unexpectedly then you have all this cleanup to perform but no way of actually doing so. The benefit of this event would allow scripters to properly cleanup after themselves as if they would when OnEvent_Uninitialize is called.

Better yet instead of having a new event when the Windows Live Messenger process is terminated instead of just exiting why not allow the scripts to cleanup and call their Uninitialize event. This would make the most sense.


RE: RE: Scripting API Wishlist by vikke on 01-16-2008 at 07:00 PM

quote:
Originally posted by matty
I would really like to have an OnProcessEvent_Terminate.

Why would this be beneficial to scripts? Simple. When dealing with system wide hooks, like hot keys. If the Windows Live Messenger process is terminated unexpectedly then you have all this cleanup to perform but no way of actually doing so. The benefit of this event would allow scripters to properly cleanup after themselves as if they would when OnEvent_Uninitialize is called.

Better yet instead of having a new event when the Windows Live Messenger process is terminated instead of just exiting why not allow the scripts to cleanup and call their Uninitialize event. This would make the most sense.
Everything in the Messenger process will be terminated directly, including Messenger Plus! and it's scripts running. There's no way to get that event triggered. Just think about the security holes it would cause, not being able to terminate a process.
RE: Scripting API Wishlist by MeEtc on 01-16-2008 at 07:15 PM

quote:
Originally posted by markee
Time for some bumping.  Anyway, I found something that I'd like.  The ability to cancel the closing of a Plus Window.  Something like returning false to the OnWindowidEvent_Destroyed function would suffice I think.  This way I could just hide the window for a moment even if the user has tried to close the window through the task bar or the X in the corner or something.
This is already possible, using OnWindowidEvent_Cancel
quote:
Originally posted by Scripting docs
Return Value
A boolean value used by Messenger Plus! to ignore the request. If the function returns true, the cancel request is ignored, if it returns false (default the event is not handled), the window is destroyed.

RE: Scripting API Wishlist by Spunky on 01-16-2008 at 08:15 PM

I'd like an OnEvent_Import() as the initialize argument is also true when the script is enbaled =/


RE: Scripting API Wishlist by saralk on 01-16-2008 at 09:22 PM

Ok, wow i forgot about this thread, i'll update the front page.

Also, if someone could tell me if any of the requests have been added?


RE: Scripting API Wishlist by markee on 01-17-2008 at 01:32 PM

quote:
Originally posted by MeEtc
quote:
Originally posted by markee
Time for some bumping.  Anyway, I found something that I'd like.  The ability to cancel the closing of a Plus Window.  Something like returning false to the OnWindowidEvent_Destroyed function would suffice I think.  This way I could just hide the window for a moment even if the user has tried to close the window through the task bar or the X in the corner or something.
This is already possible, using OnWindowidEvent_Cancel
quote:
Originally posted by Scripting docs
Return Value
A boolean value used by Messenger Plus! to ignore the request. If the function returns true, the cancel request is ignored, if it returns false (default the event is not handled), the window is destroyed.

And this is why we need a single page with every event, method and property, with a brief description and the minimum version number for each (in both a-z listing, a-z in their types and in their versions).  This would also make it easy to notice updates when a new version comes out.  I know it isn't an API request as such but it would make it easier.  And why did we need 2 functions for this feature as well? ExitCode === 2 tells us that it was one of these other methods of closing the window doesn't it?  Maybe Patchou just wanted to jerk us scripters about :sad:
RE: Scripting API Wishlist by markee on 04-05-2008 at 01:15 PM

I propose a new function for creating windows with a string and not just an .xml file.  This wouldmake translations easier and would mean that you wouldn't have those problems with unicode formatting, etc.  You could also have it more dynamic, like what as wanted in Adding labels to a window via script.


RE: Scripting API Wishlist by Matti on 04-05-2008 at 01:29 PM

quote:
Originally posted by markee
I propose a new function for creating windows with a string and not just an .xml file.  This wouldmake translations easier and would mean that you wouldn't have those problems with unicode formatting, etc.  You could also have it more dynamic, like what as wanted in Adding labels to a window via script.
I already proposed this on the previous page, and I still think that it'd be helpful if we could do something likely. Whether it's a string, an XML Node, I don't care. But we really need a way to get control over the XML before we open the window. There are just too many things we can't change in runtime yet, and thus we need to use crappy workarounds.

To give an example... in Countdown Live 2.0, I wanted to use a MenuButtonControl for the "Extra", "Insert tag" and "Insert countdown" buttons. Because I couldn't modify those in runtime, I was forced to dig into the Win32 API again and write a workaround by using "regular" pop-up menus. These menus are positioned underneath the button and pop up when the button is clicked. Of course, this works great, but it would be lots easier if I could have just used some kind of method like PlusWnd::MenuButton_SetMenu(Control, MenuXML) or something. Just a method to change the window XML before loading will do also! :P
RE: Scripting API Wishlist by markee on 11-10-2008 at 02:32 PM

It has been a while since this thread was bumped and I didn't feel like making my own, new thread, so here goes.

I first wrote about this idea in markee's reply to Compatibility with Messenger 2009 Beta but it wasn't acknowledged.  I seriously think that it can't be too much effort for script developers to now have control over the colour of toasts and adding their own images to where the DP normally sits.  It would be very nice to have this ability so that toasts were easier to recognise if they were coming from a particular script.  Admittedly, I would love the ability to use my own plus window (even if we had to use the exact same dimensions), but I guess that would be asking a bit much when there are many other more valid features to be added first that are all scattered throughout this thread.


RE: Scripting API Wishlist by SmokingCookie on 11-12-2008 at 04:52 PM

Commands like (!VER) sent to scripts before being parsed by Plus!?


RE: Scripting API Wishlist by matty on 11-12-2008 at 06:15 PM

quote:
Originally posted by SmokingCookie
Commands like (!VER) sent to scripts before being parsed by Plus!?
Already is the case... however the problem I noticed is that either custom emoticons and or normal emoticons don't show because you intercept the message then return it and they disappear if I am not mistaken. I will have to do some more testing with this.
RE: Scripting API Wishlist by SmokingCookie on 11-12-2008 at 07:26 PM

JScript code:
function OnEvent_ChatWndSendMessage(objChatWnd,strMessage) {
    Debug.Trace(strMessage);
    var Pattern = new RegExp("(!VER)","gim");
    if(strMessage.search(Pattern) > -1 && strMessage.search(Pattern) < strMessage.length) {
        strMessage = strMessage.replace(Pattern,"(!VER)\n" + Script.Name + ": " + Script.Version);
    }
    return strMessage;
}


quote:
Originally posted by Debugger
Windows Vista Home Premium Service Pack 1 (6.0.6001)
Windows Live Messenger 8.5.1018
Messenger Plus! Live 4.79.0.342
Messenger-skin: Windows Aero Messenger 2.0.2.

I don't think so..
RE: Scripting API Wishlist by matty on 11-12-2008 at 07:35 PM

My bad you have to use this:

JScript code:
function OnEvent_ChatWndSendMessage(objChatWnd,strMessage) {
    Debug.Trace(tmpmsg);
}


RE: Scripting API Wishlist by Spunky on 11-24-2008 at 11:02 AM

I think scripts should be able to access information on the debug window (from the running script and others) as it would make it a lot easier for novice users to send bug reports.

"Click the option 'Copy Debug' and paste it here"


RE: Scripting API Wishlist by matty on 11-24-2008 at 04:43 PM

This was a personal request to Patchou in which I text messaged him and requested it and it is being considered for Script Developers.

The request was the ability to step through the script to see exactly which line is causing the error. I had an issue with a script where the line was something like

JScript code:
a(b(), c());

functions B and C worked fine when not being called as parameters for A. However when called as parameters for A I recieved function expected. Which made no sense because it did exist. Also I had commented out all code for that function and left 1 Debug.Print line and the issue still occured. I had to revert to a previous version of the file and go from there. As you can see it caused a lot of headache (thankfully is fixed but to this day I am unsure what caused it)

Hence the request for the ability to step through the code when debugging :).
RE: Scripting API Wishlist by Matti on 11-24-2008 at 05:51 PM

Well, let me focus on some issues I have with scripting.

First of all, I already reported it on the BETA testing forums (see [FixMe] Scripts: Colorization with Mosaic) but apparently no-one had a look at it yet:

quote:
An ImageElement with a Mosaic set to something like ResizeToFit doesn't get its colorization applied. This is very annoying when you have an image which you want as a background for a whole area, but you also want it to match the window color.

The code I'm using:
XML code:
<!-- Images: Me-Area Preview -->
<Element xsi:type="ImageElement" Id="ImgMeMain">
   <Position Left="12" Top="5" Width="568" Height="129">
      <Anchor Horizontal="LeftRightFixed" Vertical="BottomFixed"/>
      <Units>AllPixels</Units>
   </Position>
   <Image>
      <Name>mearea-main</Name>
   </Image>
   <Mosaic>ResizeToFit</Mosaic>
   <Colorization Enable="true">
      <Color><GlobalColor>ref</GlobalColor></Color>
   </Colorization>
</Element>



Second thing: What can we do with DataBloc.WriteInterfacePtr? Any working example code we can play with? As I think I might need it for an IEnumString interface implementation when I create an IAutoComplete interface.

Thirdly: Can you give us some way we can add events in run-time? This would be interesting for classes, so a developer can simply say "here's my window, now get it working" without him/her having to add things in their window events for it to work. Possibly make something like:
JScript code:
var fCtrlClickEvent = function(PlusWnd, CtrlId) {
   if(CtrlId === "BtnThis") {
      myClass.doThis(PlusWnd);
   }
};
PlusWnd.AddEvent("CtrlClicked", fCtrlClickEvent);

.NET languages can add event handlers by simply doing:
code:
this.myButton.Click += new System.EventHandler(this.myButton_Click);
and it would be cool if we had something with the same concept to work with. I know you can't do that with the += operator in JScript, but you get the idea.

Fourthly: We need a way to dynamically create controls (and elements) in a window. This would allow us to do cool things like breadcrumb navigations.

Fifthly: While we're busy, what about an implementation for MenuButtonControls and CodeEditControls? And what are those ArcChunk, BezierChunk, LineChunk and PathChunk elements for anyway?
RE: Scripting API Wishlist by SmokingCookie on 12-06-2009 at 12:08 PM

Something to compress stuff to a ZIP file..?


RE: Scripting API Wishlist by SourSpud on 12-07-2009 at 09:17 AM

I agree with SmokingCookie that would be good, also can someone give me an example of retreiveing a contacts font name and colour.


RE: Scripting API Wishlist by CookieRevised on 12-07-2009 at 02:29 PM

quote:
Originally posted by SourSpud
I agree with SmokingCookie that would be good, also can someone give me an example of retreiveing a contacts font name and colour.
You can zip files by using some of the Windows APIs, in case you realy want to do it now. You could also use some 3rd party libraries. As for the font and color of the contact, that can only be done if you sniff the protocol messages. But there is no decent network sniffer available (Xniff has serious issues and should not be used). For both things, search the forums; both are already discussed and explained with examples (somewhere).
RE: Scripting API Wishlist by SmokingCookie on 02-12-2010 at 05:58 PM

(Better) support for tabbed chats..?


RE: Scripting API Wishlist by MeEtc on 02-12-2010 at 08:16 PM

quote:
Originally posted by SmokingCookie
(Better) support for tabbed chats..?
Tabs are not a scripting function.
RE: Scripting API Wishlist by whiz on 03-06-2010 at 12:46 PM

A method of halting script execution by X milliseconds.  For example:

Javascript code:
function Two()
{
    PartOne();
    MsgPlus.Pause(500);    PartTwo();
}

...could be used instead of...
Javascript code:
function Two()
{
    PartOne();
    MsgPlus.AddTimer("Two", 500);
}
 
function OnEvent_Timer(TimerId)
{
    if (TimerId === "Two")
    {
        PartTwo();
    }
}


RE: Scripting API Wishlist by Choli on 03-06-2010 at 01:01 PM

quote:
Originally posted by whiz
JScript code:
    MsgPlus.Pause(500);


Maybe you can use Interop.Call to call the function Sleep :)
RE: Scripting API Wishlist by Felu on 03-06-2010 at 01:15 PM

quote:
Originally posted by Choli
quote:
Originally posted by whiz
JScript code:
    MsgPlus.Pause(500);


Maybe you can use Interop.Call to call the function Sleep :)
Yeah, but that would freeze the msnmsgr process as well.
RE: Scripting API Wishlist by Choli on 03-06-2010 at 02:29 PM

quote:
Originally posted by Felu
Yeah, but that would freeze the msnmsgr process as well
Aren't scripts executed in other thread than messenger's?
RE: Scripting API Wishlist by Mnjul on 03-06-2010 at 02:44 PM

quote:
Originally posted by Choli
quote:
Originally posted by Felu
Yeah, but that would freeze the msnmsgr process as well
Aren't scripts executed in other thread than messenger's?
Actually no. In fact, it is stated in the scripting documents that:
quote:
From the scripting documentation
Note: every function and properties of every object listed here is intended to be called from the main thread of the application. Functions and properties will fail or may create unexpected bugs if called from a different thread.

RE: Scripting API Wishlist by Felu on 03-06-2010 at 02:48 PM

quote:
Originally posted by Choli
quote:
Originally posted by Felu
Yeah, but that would freeze the msnmsgr process as well
Aren't scripts executed in other thread than messenger's?
No. They're executed in the same thread as Messenger Plus! which hooks itself up to the messenger process.

Edit: Damn you Mnjul. Beaten to it :(.
RE: Scripting API Wishlist by Choli on 03-06-2010 at 04:04 PM

Then I see quite complex to pause the execution of a script without freezing or interfering with the messenger process.


RE: Scripting API Wishlist by CookieRevised on 03-06-2010 at 04:08 PM

Having a sleep() function seems like a very bad idea because it will be misused quite a lot. In fact, I can't see any good use for it. You should always use a timer instead.

A sleep function is sycroneous, and as long as each script doesn't have its own thread, it should realy not be used at all. Even when scripts are running in their own thread, Plus! would then not be able anymore to call other events at the appropiate time and custom interface windows will stop working; go blank, etc.

A function like sleep is only 'good' (mind the quotes; as it is actually never good) in a one-process-one-thread-no-gui environment.


RE: Scripting API Wishlist by whiz on 03-06-2010 at 08:12 PM

Alright, how about this: dynamically add/edit/remove menu items in a MenuButtonControl (maybe in a similar way to OnGetScriptMenu() with the script menu).


RE: Scripting API Wishlist by Matti on 03-06-2010 at 09:31 PM

quote:
Originally posted by whiz
Alright, how about this: dynamically add/edit/remove menu items in a MenuButtonControl (maybe in a similar way to OnGetScriptMenu() with the script menu).
I made that same request before, but I still think this should get more attention. There are many controls which you can define in the interface XML but which can't easily be accessed from the script afterwards.

Take MenuButtonControls for instance: in Countdown Live, I wanted the menu entry labels to be changed while the window was opened. Nothing fancy, I just needed translations to be reloaded without re-opening windows. To get around the missing support, I had to completely recreate the menu button functionality: using a standard button control instead, creating a menu through the Windows API and then positioning the menu beneath the button. This works perfectly (it even gives additional features such as check marks and icons) but it's not something an average script developer would want to go through.

Talking about the Windows API: perhaps Plus! should provide easier access to some standard controls which can now only be accessed through the Windows API. I can imagine a beginning developer writing his first script getting headaches from working with the API when he wants to add a DateTimeControl, TreeViewControl or ProgressControl to his first window. Of course, the Windows API handles everything and it might be a bit silly if we were to wrap each and every API function or message in a Plus! script method, but still I think this should be considered. Should we expect scripters to learn working with Interop and the Windows API or should we make commonly used methods easier to access?
RE: Scripting API Wishlist by matty on 05-13-2010 at 02:55 PM

I am bumping this thread because there is going to be talks surrounding the new scripting engine and I wanted to find out from everyone what they would like to see in Plus! 5 scripting engine.


RE: Scripting API Wishlist by SmokingCookie on 05-13-2010 at 02:59 PM

Pretty much anything in this thread..? (Long as it's possible, of course)


RE: Scripting API Wishlist by matty on 05-13-2010 at 03:03 PM

Yeah I figured that but are there any suggestions outside of this thread? For instance Matti and I were discussing the possibility of being able to have controls some how be an object which you can assign a dynamic function to. Just as an example.

Or being able to assign dynamic callback functions to Windows. We haven't worked it out quite yet it was just an idea discussed.


RE: Scripting API Wishlist by SmokingCookie on 05-13-2010 at 03:08 PM

As in .NET programming? Like MyForm.BtnHello = new Button(); or something?


RE: Scripting API Wishlist by NanaFreak on 05-14-2010 at 07:34 AM

how about much better dynamic window support? like not having to have it as a xml then edit the xml to change the window?


RE: Scripting API Wishlist by Matti on 05-14-2010 at 09:30 AM

quote:
Originally posted by SmokingCookie
As in .NET programming? Like MyForm.BtnHello = new Button(); or something?
Perhaps not actually creating controls, but acquiring an object with control-specific methods, properties and ideally events as well.
Javascript code:
var MyWnd = MsgPlus.CreateWnd("Interfaces.xml", "MyWnd");
// Acquire control object for a ListViewControl
var LvFiles = MyWnd.GetControl("LvFiles");
// Methods
LvFiles.AddItem("alpha.txt");
LvFiles.AddItem("beta.txt");
// Properties
Debug.Trace("Item count: "+LvFiles.ItemCount); // = 2
// Events
LvFiles.AddEventHandler("Clicked", OnLvFilesEvent_Clicked);
LvFiles.AddEventHandler("SelStateChange", function(ItemIdx, SelectedState) {
    Debug.Trace("Item #"+ItemIdx+" selection state changed to "+SelectedState);
    Debug.Trace("Item data: " + this.GetItemData(ItemIdx) );
});

Of course, all of this is nothing more than an early proposal. Here are my thoughts:
  • I believe it would be better to pass event callbacks as function objects instead of function names to prevent global scope saturation.
  • The "this" context inside the event callback could be set to the control object. By doing so, you don't need to pass PlusWnd and ControlId as parameters to the function, you could access everything through the control object itself. If you still need the window or the control ID, the control object could have properties such as Control::Parent and Control::ControlId.
I don't say it has to be this way, it's just something which could be considered.
quote:
Originally posted by NanaFreak
how about much better dynamic window support? like not having to have it as a xml then edit the xml to change the window?
Certainly, I believe that the new scripting environment should provide sufficient window and control support to remove the need of in-runtime XML rewriting. Matty has already informed me that this is high on his wish list. CodeEditControls and MenuButtonControls urgently need an API - they simply cannot be modified through code in Plus! 4. Ideally, methods could be added to natively (without Win32 API) handle DateTimeControls, HotkeyControls, ProgressControls, ScrollBarControls, SliderControls, SpinControls and TreeViewControls.
RE: Scripting API Wishlist by SmokingCookie on 05-14-2010 at 09:45 AM

I think this would indeed be better. But I thinkt the new engine should be backwards compatible.


RE: Scripting API Wishlist by Matti on 05-14-2010 at 10:15 AM

quote:
Originally posted by SmokingCookie
I think this would indeed be better. But I thinkt the new engine should be backwards compatible.
As long as they don't remove any methods from the existing objects and keep the current event handlers (global "OnEvent_" functions) working, I don't see how any of this could break backwards compatibility.
RE: Scripting API Wishlist by whiz on 06-05-2010 at 11:53 AM

Just had another idea: call script functions from the command line.

For example, you could make shortcuts to activate certain functions, or you could apply them to files, like in the SendTo menu, or as a context menu entry.

Maybe if it's called like this:

code:
C:\...\MPTools.exe /script <email> "<script name>" <function> <param1> <param2> ... <paramX>

You can have a SendTo option to open a file like this...
code:
C:\...\MPTools.exe /script <email> "File Reader" OpenFile "%1" sendto
So, for a file at C:\Some File.txt, that would then call the function in the script "File Reader":
Javascript code:
OpenFile("C:\\Some File.txt", "sendto");


RE: Scripting API Wishlist by SmokingCookie on 06-05-2010 at 12:52 PM

Well, I guess you'd need to specify which intance of Messenger is used to run the script function; could be done by typing an email address into the command line I think.


RE: Scripting API Wishlist by whiz on 08-31-2010 at 06:04 PM

Something else that could be useful: being able to add menu options in to other places, such as the Plus! menu bar list, or the system tray icon menu.  Also, perhaps a way of just having a single option in the script menu (i.e. not a sub-menu) if only a single link is required.


RE: Scripting API Wishlist by matty on 08-31-2010 at 06:12 PM

Keep your ideas coming guys. I will be going in October to Montreal to work with the dev team to improve the scripting engine.


RE: Scripting API Wishlist by CookieRevised on 08-31-2010 at 10:31 PM

quote:
Originally posted by whiz
Something else that could be useful: being able to add menu options in to other places, such as the Plus! menu bar list, or the system tray icon menu.
Although it seems nice to have other places to add your stuff, I feel a warning is in place here. It should be considered very very carefull to avoid that people do not see the difference anymore between what's a script and what is from Messenger Plus! itself.

Even now there are sometimes 'problems' with people not knowing what is what.

For this reason, and in my personal opinion, scripts should not be able to add stuff in such main menus (unless it is made very clear those extra menu items come from scripts).

quote:
Originally posted by whiz
Also, perhaps a way of just having a single option in the script menu (i.e. not a sub-menu) if only a single link is required.
That is something else, and frequently requested before...

And together with that, the simple option to have a checkmarked menu.