Download
(7Kb)
Download
Compatible with Retail, Classic & TBC
Updated: 03-15-24 05:48 PM
Pictures
File Info
Compatibility:
Classic (1.15.1)
Seeds of Renewal (10.2.5)
Classic (1.15.0)
Guardians of the Dream (10.2.0)
WOTLK Patch (3.4.3)
Hot Fix (10.1.7)
Classic (1.14.4)
Fractures in Time (10.1.5)
WotLK Patch (3.4.2)
Dragonflight patch (10.0.7)
Embers of Neltharion (10.1.0)
WOTLK Patch (3.4.1)
Dragonflight patch (10.0.5)
Dragonflight (10.0.2)
Updated:03-15-24 05:48 PM
Created:11-03-08 07:07 PM
Downloads:7,690
Favorites:117
MD5:
Categories:Chat Mods, The Burning Crusade Classic, Classic - General, WOTLK Classic

SlashHelp  Popular! (More than 5000 hits)

Version: 5.2
by: SDPhantom [More]

SlashHelp enables the user to search all registered emotes, chat types, and slash commands as they type.
SlashHelp includes within the result list, any slash commands registered by other AddOns as well.

Contact:

I'm open to questions and suggestions. Feel free to message me here or post in the comments.
I'm also available for support on the WoWUIDev Discord, @mention me (SDPhantom) or send a DM.

v5.2 (2021-09-16)
-Multi-ToC build implemented

v5.1 (2020-11-26)
-Removed ChatFrame_ImportAllListsToHash() calls to mitigate command registration errors with some addons
Note: "Mitigate" doesn't mean "Fix". These are still bugs in the affecting addons, not SlashHelp.

v5.0 (2020-10-14)
-Tested for Shadowlands v9.0.2
-Heavily optimized scanner code
-Completely rewritten GUI

v4.2 (2012-09-26)
-Quick patch to the scanner fixes an unhandled error with some addons.

v4.1 (2011-11-29)
-WoW v4.3.0 Support
-Quick patch to the scanner fixes a conflict with Blizzard's new slash command code.

v4.0 (2010-11-04)
-Tested for Cataclysm v4.0.3
-New multi-stage command scanner for optimized run-time performance
*Initial scanner scans for all slash commands on-load (chat, emote, secure, and normal).
*Progressive scanner loads additional commands as they are registered.
*Filter runs as you type, filtering through a presorted cache.
-Scanners cache and sort only when new commands added.
-Sort and type filter preferences are now saved across sessions.
-Tooltips display token identifier, chat type, aliases, and if available, addon information.
-Clean client runs new filter at 2ms, compared to 280ms that v3.1 ran at

v3.1 (2010-09-08)
-Configuration window works properly again.
-Corrected version number in TOC file.

v3.0 (2010-08-06)
-WoW v3.3.5 Support
-New display code allows the command list to be shared among multiple edit boxes.
-New scroll indicator shows position in the list.
-API for AddOn support partially implemented. (Custom positioning not supported)

v2.2 (2008-11-03)
-Made the slash command detection a little more robust.
-Completely removed auto-complete. (You can hit Tab to have the default UI do this.)

v2.1 (2008-08-16)
-Changed a few string function calls to the object-oriented style.

v2.0 (2007-08-18)
-Remade detection code to scan through the slash globals instead of from the function table.
-Removed auto-complete ability from secure commands.

v1.1 (2006-12-10)
-WoW 2.0.1 Support
-Added the new secure slash commands implemented by Blizzard.

v1.0 (2006-11-20)
-Scans and detects all emotes, chat types, and slash commands. (Even those registered by other addons)
-Option to sort alphabetically or by command type.
-Able to filter by type. (Emote, Chat, or Command)
-Scrollable list of found commands.
-Autocomplete feature implemented when a command from the list is clicked or the search returns only one command.
Post A Reply Comment Options
Unread 10-24-10, 01:52 AM  
doom0r
A Kobold Labourer

Forum posts: 0
File comments: 7
Uploads: 0
instead of grabbing a fresh list everytime you update, how about

-making a table that only updates during your SetOwner function
-recycle it when done
-work out of that while editbox is active
-only build the table and start working after a user enters something like
Code:
//
you can have a generic frame showing a single command listing for it with a description of something along the lines of "Command list" (still use sub to check for the first /, but then switch to the existing command lookup after // and start the edit box with / again)

would avoid all the rate drop when not searching for a command and always have a current list in the case of LoD
Last edited by doom0r : 10-24-10 at 01:53 AM.
Report comment to moderator  
Reply With Quote
Unread 10-24-10, 12:49 PM  
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2326
File comments: 132
Uploads: 38
Originally posted by doom0r
instead of grabbing a fresh list everytime you update, how about

-making a table that only updates during your SetOwner function
-recycle it when done
-work out of that while editbox is active
-only build the table and start working after a user enters something like //
...
still use sub to check for the first /, but then switch to the existing command lookup after // and start the edit box with / again
I'll see what I can come up with, 3 out of 4 things listed I already had in. The last mentioned interferes with Blizzard's slash command handler and modifying text in an editbox causes taint. This prevents secure slash commands from running.

Part of the code design was to prevent excessive CPU use when scanning isn't necessary. In my own testing and constant use, it's working as intended without much if any impact on framerate.

The only improvements I could think of is rewrite the command scanner to find the secure slash commands on load. They can only be defined in ChatFrame.lua and aren't able to be modified. For normal commands, I could go back to scanning from SlashCmdList. I'll also look into an event-driven approach using OnFocusGained/OnFocusLost and OnTextChanged/OnTextSet.

There's a list of other changes I want to do which equates in total to another complete rewrite. The change to version 3.0 was just to regain full operation with the new IM style chat frames. Version 3.1 was a minor fix to the options frame.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
Report comment to moderator  
Reply With Quote
Unread 10-24-10, 11:44 PM  
doom0r
A Kobold Labourer

Forum posts: 0
File comments: 7
Uploads: 0
Originally posted by SDPhantom
I'll see what I can come up with, 3 out of 4 things listed I already had in. The last mentioned interferes with Blizzard's slash command handler and modifying text in an editbox causes taint. This prevents secure slash commands from running.
I kinda figured that. (but it was 3AM and too late to check ;x )

In my own testing and constant use, it's working as intended without much if any impact on framerate.
I'm definitely grateful for the gratis work and that you share it with all of us. However for comparison, with the amount of addons I have installed (nothing I don't use, and AddonLoader to reduce active) I lose a couple seconds when I hit slash. It's killer while engaged in an instance.

The only improvements I could think of is rewrite the command scanner to find the secure slash commands on load. They can only be defined in ChatFrame.lua and aren't able to be modified. For normal commands, I could go back to scanning from SlashCmdList. I'll also look into an event-driven approach using OnFocusGained/OnFocusLost and OnTextChanged/OnTextSet.
From what it looks like, on OnTextChanged you're wiping the table and rebuilding the list, then sorting it. That first lookup and sort is pretty harsh. I don't know the impact (I assume near nil), but what about watching ADDON_LOADED and only rebuild if that's been fired since the last time you had focus? (and only build the secure and emote list(doesn't change either?) at load like you said) Keep this unless it changes.

In other words, only build it if it's changed and then only sort when you need to load it. If nothing has changed since last edit focus, then you'd only be building your display until another character is entered, at which point for every character you're sorting a smaller chunk which is a much, much smaller impact.

Oh, and saving the selection choices would be nice. The XML causes it to default to all on.

Thanks
Report comment to moderator  
Reply With Quote
Unread 10-25-10, 03:31 AM  
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2326
File comments: 132
Uploads: 38
Originally posted by doom0r
For comparison, with the amount of addons I have installed (nothing I don't use, and AddonLoader to reduce active) I lose a couple seconds when I hit slash. It's killer while engaged in an instance.
That could be the approach that I went for the sake of secure command detection. It currently does scan ALL globals to find slash commands. That would definitely change when I decide to rewrite the scanner.

Currently, these are the times recorded on an almost clean beta client.
Scan: 246ms
Sort: 45ms
Total: 291ms

I guess I just didn't notice that much time go by while typing commands.


From what it looks like, on OnTextChanged you're wiping the table and rebuilding the list, then sorting it.
Forgot I had already changed it from an OnUpdate handler. Shows how much of a hurry I was in to get it 3.3.5-compliant. The scanner code hasn't changed any since BC launched.


I don't know the impact (I assume near nil), but what about watching ADDON_LOADED and only rebuild if that's been fired since the last time you had focus? (and only build the secure and emote list(doesn't change either?) at load like you said) Keep this unless it changes.
The scan times would most likely improve with the change in method planned. I'll look into this and other solutions as well.


Saving the selection choices would be nice. The XML causes it to default to all on.
I was planning on adding this, but it kept getting put aside. I'll get to it eventually.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
Report comment to moderator  
Reply With Quote
Unread 10-25-10, 10:46 PM  
doom0r
A Kobold Labourer

Forum posts: 0
File comments: 7
Uploads: 0
Good to hear.

As far as the times, with something around 50+ addons and things like PitBull 4 registering 8 commands alone, it adds up when you hit slash and a couple letters very fast to type a command you know already. Plus there is a lot more global usage again in addons.

Thanks, looking forward to a rewrite
Report comment to moderator  
Reply With Quote
Unread 10-26-10, 12:15 AM  
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2326
File comments: 132
Uploads: 38
I'm finishing off the new scanner code that comes in 2 parts. The first is the initial scanner, which detects all commands loaded so far (chat, emote, secure, and normal commands). This is still fairly slow, but only runs on login. The times for this so far is 271ms scan, 2ms sort, 273 ms total.

The second is a progressive scanner, which runs off a triggering metatable hooked into SlashCmdList. The hook stores which tokens have been added and the progressive scanner adds them to the command data cache and resorts the command order caches. After the trigger is set, the progressive scanner runs once per token OnUpdate. After which, the trigger is cleared and the scanner waits. Times for this scan are 2ms scan, 2ms sort, 4ms total.

The command order caches are for the filtering code to assemble a presorted command list quickly while typing in a command. I'll post times for that when I finish that part of the code.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
Last edited by SDPhantom : 10-26-10 at 12:16 AM.
Report comment to moderator  
Reply With Quote
Unread 11-04-10, 03:29 AM  
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2326
File comments: 132
Uploads: 38
SlashHelp 4 is up. Scan times remain the same as posted below, Sort times increased to 60ms due to the requirement of proper sorting considering case-sensitivity. This shouldn't impact run-time performance since scanning and sorting is only done when commands are added. Command filtering that does execute at run-time is greatly improved through use of internal presorted command caches. Current filtering code is timed at a max of 2ms. This includes time spent updating the list frame UI.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
Last edited by SDPhantom : 11-04-10 at 03:30 AM.
Report comment to moderator  
Reply With Quote
Unread 11-04-10, 04:29 PM  
doom0r
A Kobold Labourer

Forum posts: 0
File comments: 7
Uploads: 0
i must say, simply amazing

I've went from lagging a second til the initial full list loads to ZERO noticable change, even while in combat, and with no taint.

Your efforts are much appreciated.
Report comment to moderator  
Reply With Quote
Unread 11-29-11, 10:42 PM  
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2326
File comments: 132
Uploads: 38
SlashHelp 4.1 - Update required for WoW 4.3.0

Version 4.1 is a quick fix to patch the scanner code so it doesn't interfere with Blizzard's new slash command code. This is required for WoW 4.3.0 as using the older version causes errors which completely breaks the chat/command system in WoW.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
Last edited by SDPhantom : 11-30-11 at 02:37 PM.
Report comment to moderator  
Reply With Quote
Unread 09-26-12, 01:50 AM  
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2326
File comments: 132
Uploads: 38
Version 4.2 is out with a quick patch to the scanner that resolves an error that rises when an addon attempts to set nil to a new SlashCmdList entry. The same check is also applied to the hidden feature of detecting direct hash_SlashCmdList injections.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
Last edited by SDPhantom : 09-26-12 at 01:55 AM.
Report comment to moderator  
Reply With Quote
Unread 03-15-13, 05:24 PM  
Barleduq
Premium Member
 
Barleduq's Avatar
Premium Member

Forum posts: 135
File comments: 742
Uploads: 0
slight confusion on my part

The front page of this addon says it's version 4.2, updated on March 7th, 2013. The changelog says it's version 4.2 updated in September ...

Is the changelog out of date, or the file version number, or... ?

Just checking as part of deciding if I want to add this to my collection of addons...
Report comment to moderator  
Reply With Quote
Unread 03-20-13, 10:59 AM  
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2326
File comments: 132
Uploads: 38
Re: slight confusion on my part

Originally Posted by Barleduq
The front page of this addon says it's version 4.2, updated on March 7th, 2013. The changelog says it's version 4.2 updated in September ...

Is the changelog out of date, or the file version number, or... ?

Just checking as part of deciding if I want to add this to my collection of addons...
The changelog is correct. The website is noting that I updated the TOC interface number recently, which IMO doesn't constitute a version change or a note in the changelog. This addon continues to perform to my expectations and hasn't needed any modifications since the update noted in the changelog.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
Report comment to moderator  
Reply With Quote
Unread 10-23-14, 05:13 PM  
uckingzou
A Kobold Labourer
AddOn Author - Click to view AddOns

Forum posts: 0
File comments: 3
Uploads: 3
some idea to led it better .

It's my little idea:

SlashHelp.lua
If press shift then scroll a page:
Lua Code:
  1. frame:SetScript("OnMouseWheel",function(self,delta)
  2.         local val = 3
  3.         if IsShiftKeyDown() then
  4.             val = addon.MaxListSize
  5.         end
  6.         self:ScrollBy(-delta*val);
  7.     end);

Click then finish the text
Lua Code:
  1. local function ListOnClick(self)
  2.         if addon.Parent ~= nil then
  3.             addon.Parent:SetText(self.SlashText:GetText())
  4.         end
  5.     end
  6.    
  7.     obj:SetScript("OnClick",ListOnClick)

If not type / then don't show Options
Lua Code:
  1. function addon:ShowOptions(frame)
  2. end
  3. function addon:HideOptions(frame)
  4. end
  5.  
  6. function addon:SetFilter(frame)
  7.     if self.Parent and frame==self.Parent then
  8.         local text = frame:GetText()
  9.         self.ListFrame.Offset=0;
  10.         self:BuildFilter(text);--   FilterCache is reused so returned table pointer never changes
  11.         self:UpdateFrames();
  12.         self:RepositionFrames();
  13.  
  14.         if text ~= nil and text:find("^/") then
  15.             self:ShowOptions(frame)
  16.         else
  17.             self:HideOptions(frame)
  18.         end
  19.     end
  20. end
In Options.lua
Lua Code:
  1. ----------------------------------
  2. --[[    Options Frame Hooks ]]
  3. ----------------------------------
  4. hooksecurefunc(addon,"ShowOptions",function(self,frame)
  5.     self.OptionsFrame:SetParent(frame);
  6.     self.OptionsFrame:Show();
  7. end)
  8.  
  9. hooksecurefunc(addon,"HideOptions",function(self,frame)
  10.     self.OptionsFrame:Hide();
  11. end)
Report comment to moderator  
Reply With Quote
Unread 10-24-14, 06:05 PM  
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view AddOns

Forum posts: 2326
File comments: 132
Uploads: 38
Re: some idea to led it better .

When I get around to it, the entire interface will be rewritten from scratch. I had always intended the scrollbar on the list frame to be dragable, but I ended up settling with using the scroll wheel. The options frame will need to be placed elsewhere. Perhaps make it a popup when the list is right-clicked. Sadly, auto-complete will need to be left out as it causes taint to the editbox and prevents secure commands from being run.

I haven't even looked at the code in 2 years, so I'll have to go through and tear it down to the basics before working on it again.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)
Report comment to moderator  
Reply With Quote
Unread 10-20-19, 12:55 PM  
Digawen
A Kobold Labourer

Forum posts: 1
File comments: 13
Uploads: 0
Pls Update for Classic

I miss this addon so hard in classic.
Report comment to moderator  
Reply With Quote
Post A Reply



Category Jump: