Popular Post jaberwacky Posted May 25, 2012 Popular Post Posted May 25, 2012 (edited) When ever you hover your mouse over a native function, user defined function, or an AutoItObject method then you will see the calltip for that function. Click "Like This" if you found this useful! To use this just place the following lua file in the "...AutoIt3\SciTE\lua" directory. MouseHoverCallTips.zip downloads:741 After you have done that then open SciTE and click 'Options' --> 'Open Lua Startup Script' and paste this line after the other lines (may require administrative rights): LoadLuaFile("MouseHoverCallTips.lua") Updates and changes: Spoiler [11/25/2023] Now it Works! Again ... ... Again! [09/09/2023] Hello! After nine years I have realized that the script no longer seemed to work. So after much hair pulling I think I finally got it working again. [09/25/2014] Rewritten using the official AutoItGoToDefinition.lua! Now all function and object method calltips are presented! Most exciting update yet! Edit: forgot to mention that this only works for those who have the latest AutoIt3 beta installed. Edit 2: Now works for functions marked Volatile. Also works on first open. Edit3: Non-Volatile functions work too now again. Edit4: Should finally work now! [06/10/2014] Calltips for AutoItObject methods should be a lot less error prone and much faster! Edit: Fixed an issue with AutoItObject methods. 08/06/2013: OK. Fixed the unexpected bugs. Damned bugs. Now you should be able to create your AutoItObjects and then hover over their method names and properties for calltips! For instance $oObject.MyProperty.MyMethod() Hover over MyProperty to see what is stored there and over MyMethod to see the calltip for that function. 08/05/2013: Now you can view the function calltips for your AutoItObject Com methods and also see the value stored in your AIO COM properties! Also fixed some inconsistencies in the code and improved other aspects etc. 08/04/2013: Added AutoItObject COM Functions! Here are a couple of files to test the latest update: Test Files. 03/18/2013: Function "table_contains" added. 03/17/2013: Untested bug fix as reported by Sunaj. 03/02/2013: Bug fix as reported by Sunaj where the function that extracted the name of an include from a line would not work if there was not a space after "#include". 11/04/2012: I fixed it again. 10/26/2012: I breath another sigh. 10/20/2012: Fixed a bug that caused SciTE to lockup when using CTRL+J to access a native function or ALT+I to access a native include. Also, fixed a bug where if a function name was mentioned in the description for another different function then the calltip for the different function was displayed. 10/13/2012: More efficient and less code. 10/11/2012: Now when you type a new include line that include is added to the list of includes to be searched for function definitions. Also, even more efficient. 10/10/2012: No new features but a few bugs have been squashed and some inefficiencies eliminated. So, one bug was that if you have an include in the main file but not in another file and you use a function from the include in the second file then it wouldn't show the calltip though the function is in scope. That works now. Also, when the include table was generated there were a lot of duplicate entries. No longer! Behold, for they are trimmed (mostly, it's still buggy). Anyhoo, enjoy! 10/07/2012: Now all of the include files in a project are searched for user defined functions! 10/01/2012: Pattern matching allowed for the elimination of several functions. Hopefully more efficient. Also, calltips found in the api files are loaded once at startup into a table. Also, added the same thing but for the list of includes. Also, calltips now self cancel when you move the mouse again because I forgot that I was asked to make it do that. 09/27/2012: Tried my hand at implementing a basic proof of concept for finding function definitions in extralocal au3 files as requested by >D4RKON3. Consider this a beta trial and please tell me your thoughts, problems, etc. One difference now is the calltip window doesn't disappear as soon as you move your mouse. You have to click the mouse first. Also, when you define your own function then a comment at the end of the definition will be displayed as a calltip. Example: func my_function_name(const $my_parameter) ; This is a description of the function. Will become: my_function_name(const $my_parameter) This is a description of the function. Here are a set of au3 files to test the latest update: 09/23/2012: I implemented a very basic, rudimentary implementation of a feature requested by trancexx. She wanted calltips for functions which were defined in the currently edited file. Give it a try, it might work! YAY! Using OnUpdateUI eliminates the need to switch buffers on every new session. May not be the most elegant solution. =P Update: Valik greatly simplified and made it robust. Thank you! Update: Back in business! Update: Ah yes, debug statements. I should probably start using more of those. Edited November 25, 2023 by jaberwacky latest version Wombat, FaridAgl, Sunaj and 2 others 5 Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
Valik Posted May 25, 2012 Posted May 25, 2012 This does not belong in AutoItTools. This belongs in it's own class. AutoItTools is for simple one-shot tools.
jaberwacky Posted May 25, 2012 Author Posted May 25, 2012 (edited) Done. Are calltips loaded into SciTE's memory so that I don't have to read the HDD everytime? Edited May 25, 2012 by LaCastiglione Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
trancexx Posted May 25, 2012 Posted May 25, 2012 Can you add a timer or something to make the tip go away after some time if mouse isn't over a function? ♡♡♡ . eMyvnE
wraithdu Posted May 25, 2012 Posted May 25, 2012 Can you add a timer or something to make the tip go away after some time if mouse isn't over a function?I think that's what the OnDwellEnd function is for.Another thing I thought of though, I think there's a way to use the lexer to tell what kind of word you are hovering. You should restrict the calltips to words the lexer identifies as functions so you don't get random calltips from comments or strings, etc.
jaberwacky Posted May 25, 2012 Author Posted May 25, 2012 (edited) That is what onDwellEnd is for but it's either messed up or I am using it wrong (most likely). I'll look into the timer as an alternative. I looked into that lexer and I can't make heads or tails of it. I kinda have an idea of what's going on. You find out what kind of word you're at in the file (variable, function, comment, etc) and then you give that information to the styler along with a start position which takes over from there. Edited May 25, 2012 by LaCastiglione Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
MvGulik Posted May 25, 2012 Posted May 25, 2012 Here's where the strangeness comes in: you have to switch buffers before it will work on first load.That's the opposite of the initial behavior. (working on a file/buffer after a file open, but not after switching buffers).Maybe you need to use both OnOpen() and OnSwitchFile(). "Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions.""The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014) "Believing what you know ain't so" ... Knock Knock ...
jaberwacky Posted May 25, 2012 Author Posted May 25, 2012 (edited) I tried this but nothing doing: expandcollapse popupMouseHoverCallTips = EventClass:new(Common) function MouseHoverCallTips:OnOpen(path) MouseHoverCallTips:initialize_mouse_dwell() return true end function MouseHoverCallTips:OnSwitchFile(path) MouseHoverCallTips:initialize_mouse_dwell() return true end function MouseHoverCallTips:initialize_mouse_dwell() local mousehover_calltips_dwelltime = tonumber(props["mousehover.calltips.dwelltime"]) if (mousehover_calltips_dwelltime == nil) then mousehover_calltips_dwelltime = 700 -- default end scite.SendEditor(SCI_SETMOUSEDWELLTIME, mousehover_calltips_dwelltime) return true end function MouseHoverCallTips:OnDwellStart(position, word) if (word == "") then return nil end local directory = props["SciteDefaultHome"] .. "apiau3.api" local file = io.open(directory, "r") local parens_start local parens_end local char_start local char_end for line in file:lines() do if (string.find(line, word)) then -- filter out entries ending with ?4, ?3, ?2, & ?1 for var = 1, 4 do char_start, char_end = string.find(line, '?' .. var) if (char_start ~= nil) then file:close() return nil end end parens_start, parens_end = string.find(line, "%)") if (parens_start ~= nil) then line = string.gsub(line, "%)", "%)n", 1) end file:close() scite.SendEditor(SCI_CALLTIPSHOW, position, line) return true end end file:close() return true end function MouseHoverCallTips:OnDwellEnd() scite.SendEditor(SCI_CALLTIPCANCEL) return true end Edited May 25, 2012 by LaCastiglione Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
ProgAndy Posted May 25, 2012 Posted May 25, 2012 I looked into that lexer and I can't make heads or tails of it. I kinda have an idea of what's going on. You find out what kind of word you're at in the file (variable, function, comment, etc) and then you give that information to the styler along with a start position which takes over from there.You don't have to understand the lexer I think. Just read the style of the first character of your word with SCI_GETSTYLEAT *GERMAN* [note: you are not allowed to remove author / modified info from my UDFs]My UDFs:[_SetImageBinaryToCtrl] [_TaskDialog] [AutoItObject] [Animated GIF (GDI+)] [ClipPut for Image] [FreeImage] [GDI32 UDFs] [GDIPlus Progressbar] [Hotkey-Selector] [Multiline Inputbox] [MySQL without ODBC] [RichEdit UDFs] [SpeechAPI Example] [WinHTTP]UDFs included in AutoIt: FTP_Ex (as FTPEx), _WinAPI_SetLayeredWindowAttributes
jaberwacky Posted May 26, 2012 Author Posted May 26, 2012 (edited) Just read the style of the first character of your word with SCI_GETSTYLEAT Doh! I understand now. I do that from lua. Excellent. Thank you!Edit: Ok, I did it and it works great! OP updated. Edited May 26, 2012 by LaCastiglione Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
MvGulik Posted May 26, 2012 Posted May 26, 2012 (edited) I tried this but nothing doing: ...It should. (CQ: working for me.)- OnOpen(): run's on every file that's loaded while scite is starting. And on files that are user loaded after the scite startup.But note that OnSwitchFile() is also run on the active file/buffer if its not the last loaded file at scite startup. (and not on user loaded files/buffers ... until you switch buffers of course.)PS: is OnDwellEnd() active? ... or not yet, as its never executed.on this side.---(I'm not sure what behavior's are scite4autoit related or native scites related.) Edited May 26, 2012 by MvGulik "Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions.""The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014) "Believing what you know ain't so" ... Knock Knock ...
Valik Posted May 26, 2012 Posted May 26, 2012 AFAIK there is no OnDwellEnd(). OnDwellStart() is called with an empty string to signify that event according to the old documentation I read. If there is an event in later SciTE then the Events class isn't invoking it on inherited classes unless Jos caught it and added it.
jaberwacky Posted May 26, 2012 Author Posted May 26, 2012 (edited) Heh. You know something. I'm looking at the documentation again. I have no idea where I got onDwellEnd. Maybe my brain wished for something like that and tried to make it so. Doh. "OnDwellStart will receive the position of the mouse and the word under the mouse as arguments and the word will be empty when the mouse starts moving." So I updated the lua in the op. Edited May 26, 2012 by LaCastiglione Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
MvGulik Posted May 26, 2012 Posted May 26, 2012 Optional code suggestion:-- 'if MouseHoverCallTips:IsAu3File(path) then', or 'if self:IsAu3File(path) then'. -- Although I'm not sure if there is a significant/important differance between the two. (just to be clear) function MouseHoverCallTips:IsAu3File(path) -- working, but I'm not sure if there is a better way. -- note: string.sub(props["au3"]), -4) ... assuming extention is 3 characters. (alt: ditch leading '*' character.) if (string.lower(string.sub(path, -4)) == string.lower(string.sub(props["au3"], -4))) then return true end return false endPS: Not sure if it matters. But just in case. There is no 'file:close()' after the "for line .." loop in OnDwellStart(). (for all I know the open file might be auto-closed on hitting EOF, or on exiting the function.) "Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions.""The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014) "Believing what you know ain't so" ... Knock Knock ...
jaberwacky Posted May 26, 2012 Author Posted May 26, 2012 I added your function. Thanks! Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
MvGulik Posted May 27, 2012 Posted May 27, 2012 Roger ... Looks a little odd with those comments. Tried to see if there was a alternative way to get a hold of 'all' the API function definitions that are actively used by the current (local user) scite4autoit setup ... but no luck so far.Anyone know if there is a other way than doing it the file:open way ?Anyway ... extended the definition finder a bit to do it anyway. (added+changed functions only) (LC: use as you see fit.)function MouseHoverCallTips:GetFuncDef(word, filespecList, delim) for filespec in string.gmatch(filespecList, "[^;]+") do local file = io.open(filespec, "r") if file ~= nil then local parens_start for line in file:lines() do if (string.find(line, word)) then parens_start = string.find(line, "%)") if (parens_start ~= nil) then line = string.gsub(line, "%)(.)", "%)n%1") -- changed: was adding a trailing empty line in some cases. end file:close() return line end end file:close() end end end function MouseHoverCallTips:OnDwellStart(position, word) if (word == "") then if (scite.SendEditor(SCI_CALLTIPACTIVE)) then scite.SendEditor(SCI_CALLTIPCANCEL) end end if (scite.SendEditor(SCI_GETSTYLEAT, position) == 4 or scite.SendEditor(SCI_GETSTYLEAT, position) == 15) then local funcdef = self:GetFuncDef(word, props["api.$(au3)"], ";") if funcdef ~= nil then scite.SendEditor(SCI_CALLTIPSHOW, position, funcdef) end end return true end "Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions.""The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014) "Believing what you know ain't so" ... Knock Knock ...
jaberwacky Posted May 27, 2012 Author Posted May 27, 2012 Updated Op with MvGulik's additions. Keep 'em comin'! Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
jaberwacky Posted May 27, 2012 Author Posted May 27, 2012 (edited) What's weird is that OnOpen is called when SciTE is opened and when I switch between buffers. So, I removed OnSwitchFile and restarted SciTE but calltips are still not displayed when I hover over a function even after switching buffers. Edited May 27, 2012 by LaCastiglione Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
jaberwacky Posted May 27, 2012 Author Posted May 27, 2012 Updated. Now handles call tips for user defined functions and for com methods-- assuming that you have them defined. Helpful Posts and Websites: AutoIt3 Variables and Function Parameters MHz | AutoIt Wiki | Using the GUIToolTip UDF BrewManNH | Can't find what you're looking for on the Forum?
AdmiralAlkex Posted May 30, 2012 Posted May 30, 2012 (edited) Interesting, but It doesn't seem like you are reading any of the udf's from au3.api Edited May 30, 2012 by AdmiralAlkex .Some of my scripts: ShiftER, Codec-Control, Resolution switcher for HTC ShiftSome of my UDFs: SDL UDF, SetDefaultDllDirectories, Converting GDI+ Bitmap/Image to SDL Surface
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now