2023-11-12 01:57:38 +00:00
<!doctype html> < html > < head > < title > Module bait — Hilbish< / title >
2023-12-01 02:08:07 +00:00
< meta charset = utf-8 > < meta name = viewport content = "width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" > < meta name = theme-color content = "#ff89dd" > < meta content = "/Hilbish/hilbish-flower.png" property = "og:image" > < meta property = "og:site_name" content = "Hilbish" > < meta content = "Module bait — Hilbish" property = "og:title" > < meta content = "the event emitter" property = "og:description" > < meta content = "the event emitter" name = description > < meta name = revisit-after content = "2 days" > < meta name = keywords content = "Lua,Hilbish,Linux,Shell" > < meta property = "og:locale" content = "en_GB" > < link rel = canonical href = https://rosettea.github.io/Hilbish/ > < meta property = "og:url" content = "https://rosettea.github.io/Hilbish/" > < link href = https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css rel = stylesheet integrity = sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor crossorigin = anonymous > < script src = https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js integrity = sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2 crossorigin = anonymous > < / script > < link rel = stylesheet href = https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css integrity = "sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcElQSvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==" crossorigin = anonymous referrerpolicy = no-referrer > < link rel = stylesheet href = /Hilbish/versions/doc-improvements/css/syntax.min.eb77978873f3b324603120b558a36c98ad57d6ee7b77928e3bc131bd76c5935a.css integrity = "sha256-63eXiHPzsyRgMSC1WKNsmK1X1u57d5KOO8ExvXbFk1o=" > < / link > < style > . heading > . heading-link { opacity : 0 } . heading : hover > . heading-link { visibility : visible ; opacity : 1 ; transition : all .1 s ease-in } @ keyframes highlight { 0 % { background : 0 0 } 50 % { background : #fff2cf } 100 % { background : 0 0 } } div : target { animation : highlight 1.2 s ; animation-timing-function : cubic-bezier ( 1 , -.02 , .45 , .89 ) } table { border-width : 1 px ; border-style : solid ; border-color : #565c64 ; border-collapse : collapse ; margin-bottom : 12 px } table td { padding : 5 px } table tr { border-width : 1 px } thead { display : none } < / style > < / head > < body class = "d-flex flex-column min-vh-100" style = overflow-x:hidden > < svg xmlns = "http://www.w3.org/2000/svg" style = "display:none" > < symbol id = "check-circle-fill" fill = "currentcolor" viewBox = "0 0 16 16" > < path d = "M16 8A8 8 0 110 8a8 8 0 0116 0zm-3.97-3.03a.75.75.0 00-1.08.022L7.477 9.417 5.384 7.323a.75.75.0 00-1.06 1.06L6.97 11.03a.75.75.0 001.079-.02l3.992-4.99a.75.75.0 00-.01-1.05z" / > < / symbol > < symbol id = "info-fill" fill = "currentcolor" viewBox = "0 0 16 16" > < path d = "M8 16A8 8 0 108 0a8 8 0 000 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194.0.487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703.0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 110-2 1 1 0 010 2z" / > < / symbol > < symbol id = "exclamation-triangle-fill" fill = "currentcolor" viewBox = "0 0 16 16" > < path d = "M8.982 1.566a1.13 1.13.0 00-1.96.0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889.0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535.0.954.462.9.995l-.35 3.507a.552.552.0 01-1.1.0L7.1 5.995A.905.905.0 018 5zm.002 6a1 1 0 110 2 1 1 0 010-2z" / > < / symbol > < / svg > < header > < nav class = "navbar navbar-expand-md sticky-top bg-light border-bottom" > < div class = container-fluid > < a class = navbar-brand href = /Hilbish > < img src = /Hilbish/hilbish-logo-and-text.png alt height = 48 >
2023-11-12 01:57:38 +00:00
< / a > < button class = navbar-toggler type = button data-bs-toggle = collapse data-bs-target = #navbarSupportedContent aria-controls = navbarSupportedContent aria-expanded = false aria-label = "Toggle navigation" >
2023-12-26 02:33:01 +00:00
< span class = navbar-toggler-icon > < / span > < / button > < div class = "collapse navbar-collapse" id = navbarSupportedContent > < ul class = "navbar-nav me-auto mb-2 mb-lg-0" > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/ class = nav-link > Home< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/install/ class = nav-link > Install< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/ class = nav-link > Docs< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/blog/ class = nav-link > Blog< / a > < / li > < / ul > < / div > < / div > < / nav > < / header > < style > @ media ( min-width : 768px ) { . sidenav { width : 240 px } } < / style > < div class = row > < nav class = "navbar-expand-md bg-light sidenav border-end" > < div class = container > < div class = "collapse navbar-collapse" id = navbarSupportedContent > < nav class = "navbar navbar-expand-md bg-light sidenav col" style = margin-top:-20px > < ul class = "navbar-nav me-auto mb-2 mb-lg-0 flex-column col mt-4" > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/ class = nav-link > < strong > Introduction< / strong > < / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/getting-started/ class = nav-link > < strong > Getting Started< / strong > < / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/faq/ class = nav-link > < strong > Frequently Asked Questions< / strong > < / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/features/ class = nav-link > < strong > Features< / strong > < / a > < / li > < ul style = list-style:none > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/completions/ class = nav-link > Completions< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/features/notifications/ class = nav-link > Notification< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/features/opts/ class = nav-link > Options< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/features/runner-mode/ class = nav-link > Runner Mode< / a > < / li > < / ul > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/hooks/ class = nav-link > < strong > Signals< / strong > < / a > < / li > < ul style = list-style:none > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/hooks/command/ class = nav-link > Command< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/hooks/hilbish/ class = nav-link > Hilbish< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/hooks/signal/ class = nav-link > Signal< / a > < / li > < / ul > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/lunacolors/ class = nav-link > < strong > Lunacolors< / strong > < / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/vim-mode/ class = nav-link > < strong > Vim Mode< / strong > < / a > < / li > < ul style = list-style:none > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/vim-mode/actions/ class = nav-link > Actions< / a > < / li > < / ul > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/nature/ class = nav-link > < strong > Nature< / strong > < / a > < / li > < ul style = list-style:none > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/nature/dirs/ class = nav-link > Module dirs< / a > < / li > < / ul > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/api/ class = nav-link > < strong > API< / strong > < / a > < / li > < ul style = list-style:none > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/api/bait/ class = nav-link > Module bait< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/api/commander/ class = nav-link > Module commander< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/api/fs/ class = nav-link > Module fs< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/api/hilbish/ class = nav-link > Module hilbish< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/api/hilbish/hilbish.aliases/ class = nav-link > Module hilbish.aliases< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/api/hilbish/hilbish.completion/ class = nav-link > Module hilbish.completion< / a > < / li > < li class = nav-item > < a href = /Hilbish/versions/doc-improvements/docs/a
2023-09-02 16:57:59 +00:00
< a href = #introduction class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h3 > < p > Bait is the event emitter for Hilbish. Much like Node.js and
its < code > events< / code > system, many actions in Hilbish emit events.
Unlike Node.js, Hilbish events are global. So make sure to
pick a unique name!< / p > < p > Usage of the Bait module consists of userstanding
event-driven architecture, but it’ s pretty simple:
If you want to act on a certain event, you can < code > catch< / code > it.
You can act on events via callback functions.< / p > < p > Examples of this are in the Hilbish default config!
2023-12-01 02:08:07 +00:00
Consider this part of it:< / p > < div class = highlight > < pre tabindex = 0 class = chroma > < code class = language-lua data-lang = lua > < span class = line > < span class = ln > 1< / span > < span class = cl > < span class = n > bait.catch< / span > < span class = p > (< / span > < span class = s1 > ' command.exit' < / span > < span class = p > ,< / span > < span class = kr > function< / span > < span class = p > (< / span > < span class = n > code< / span > < span class = p > )< / span >
< / span > < / span > < span class = line > < span class = ln > 2< / span > < span class = cl > < span class = n > running< / span > < span class = o > =< / span > < span class = kc > false< / span >
< / span > < / span > < span class = line > < span class = ln > 3< / span > < span class = cl > < span class = n > doPrompt< / span > < span class = p > (< / span > < span class = n > code< / span > < span class = o > ~=< / span > < span class = mi > 0< / span > < span class = p > )< / span >
< / span > < / span > < span class = line > < span class = ln > 4< / span > < span class = cl > < span class = n > doNotifyPrompt< / span > < span class = p > ()< / span >
< / span > < / span > < span class = line > < span class = ln > 5< / span > < span class = cl > < span class = kr > end< / span > < span class = p > )< / span >
2023-09-02 18:20:00 +00:00
< / span > < / span > < / code > < / pre > < / div > < p > What this does is, whenever the < code > command.exit< / code > event is thrown,
2023-09-02 16:57:59 +00:00
this function will set the user prompt.< / p > < h3 id = functions class = heading > Functions
2023-12-26 02:33:01 +00:00
< a href = #functions class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h3 > < table > < thead > < tr > < th > < / th > < th > < / th > < / tr > < / thead > < tbody > < tr > < td > < a href = #catch > catch(name, cb)< / a > < / td > < td > Catches an event. This function can be used to act on events.< / td > < / tr > < tr > < td > < a href = #catchOnce > catchOnce(name, cb)< / a > < / td > < td > Catches an event, but only once. This will remove the hook immediately after it runs for the first time.< / td > < / tr > < tr > < td > < a href = #hooks > hooks(name) -> table< / a > < / td > < td > Returns a table of functions that are hooked on an event with the corresponding < code > name< / code > .< / td > < / tr > < tr > < td > < a href = #release > release(name, catcher)< / a > < / td > < td > Removes the < code > catcher< / code > for the event with < code > name< / code > .< / td > < / tr > < tr > < td > < a href = #throw > throw(name, … args)< / a > < / td > < td > Throws a hook with < code > name< / code > with the provided < code > args< / code > .< / td > < / tr > < / tbody > < / table > < hr > < div id = catch > < h4 class = heading > bait.catch(name, cb)
2023-12-01 02:08:07 +00:00
< a href = #catch class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h4 > < p > Catches an event. This function can be used to act on events.< / p > < h5 id = parameters class = heading > Parameters
2023-11-30 22:31:17 +00:00
< a href = #parameters class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h5 > < p > < code > string< / code > < strong > < code > name< / code > < / strong > < br > The name of the hook.< / p > < p > < code > function< / code > < strong > < code > cb< / code > < / strong > < br > The function that will be called when the hook is thrown.< / p > < h5 id = example class = heading > Example
2023-12-01 02:08:07 +00:00
< a href = #example class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h5 > < div class = highlight > < pre tabindex = 0 class = chroma > < code class = language-lua data-lang = lua > < span class = line > < span class = ln > 1< / span > < span class = cl > < span class = n > bait.catch< / span > < span class = p > (< / span > < span class = s1 > ' hilbish.exit' < / span > < span class = p > ,< / span > < span class = kr > function< / span > < span class = p > ()< / span >
< / span > < / span > < span class = line > < span class = ln > 2< / span > < span class = cl > < span class = n > print< / span > < span class = s1 > ' Goodbye Hilbish!' < / span >
< / span > < / span > < span class = line > < span class = ln > 3< / span > < span class = cl > < span class = kr > end< / span > < span class = p > )< / span >
2023-11-30 22:31:17 +00:00
< / span > < / span > < / code > < / pre > < / div > < / div > < hr > < div id = catchOnce > < h4 class = heading > bait.catchOnce(name, cb)
2023-12-01 02:08:07 +00:00
< a href = #catchOnce class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h4 > < p > Catches an event, but only once. This will remove the hook immediately after it runs for the first time.< / p > < h5 id = parameters-1 class = heading > Parameters
< a href = #parameters-1 class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h5 > < p > < code > string< / code > < strong > < code > name< / code > < / strong > < br > The name of the event< / p > < p > < code > function< / code > < strong > < code > cb< / code > < / strong > < br > The function that will be called when the event is thrown.< / p > < / div > < hr > < div id = hooks > < h4 class = heading > bait.hooks(name) -> table
2023-12-26 02:33:01 +00:00
< a href = #hooks class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h4 > < p > Returns a table of functions that are hooked on an event with the corresponding < code > name< / code > .< / p > < h5 id = parameters-2 class = heading > Parameters
< a href = #parameters-2 class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h5 > < p > < code > string< / code > < strong > < code > name< / code > < / strong > < br > The name of the hook< / p > < / div > < hr > < div id = release > < h4 class = heading > bait.release(name, catcher)
2023-12-02 12:24:04 +00:00
< a href = #release class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h4 > < p > Removes the < code > catcher< / code > for the event with < code > name< / code > .< br > For this to work, < code > catcher< / code > has to be the same function used to catch< br > an event, like one saved to a variable.< / p > < h5 id = parameters-3 class = heading > Parameters
2023-12-01 02:08:07 +00:00
< a href = #parameters-3 class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h5 > < p > < code > string< / code > < strong > < code > name< / code > < / strong > < br > Name of the event the hook is on< / p > < p > < code > function< / code > < strong > < code > catcher< / code > < / strong > < br > Hook function to remove< / p > < h5 id = example-1 class = heading > Example
< a href = #example-1 class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h5 > < div class = highlight > < pre tabindex = 0 class = chroma > < code class = language-lua data-lang = lua > < span class = line > < span class = ln > 1< / span > < span class = cl > < span class = kd > local< / span > < span class = n > hookCallback< / span > < span class = o > =< / span > < span class = kr > function< / span > < span class = p > ()< / span > < span class = n > print< / span > < span class = s1 > ' hi' < / span > < span class = kr > end< / span >
< / span > < / span > < span class = line > < span class = ln > 2< / span > < span class = cl >
< / span > < / span > < span class = line > < span class = ln > 3< / span > < span class = cl > < span class = n > bait.catch< / span > < span class = p > (< / span > < span class = s1 > ' event' < / span > < span class = p > ,< / span > < span class = n > hookCallback< / span > < span class = p > )< / span >
< / span > < / span > < span class = line > < span class = ln > 4< / span > < span class = cl >
< / span > < / span > < span class = line > < span class = ln > 5< / span > < span class = cl > < span class = c1 > -- a little while later....< / span >
< / span > < / span > < span class = line > < span class = ln > 6< / span > < span class = cl > < span class = n > bait.release< / span > < span class = p > (< / span > < span class = s1 > ' event' < / span > < span class = p > ,< / span > < span class = n > hookCallback< / span > < span class = p > )< / span >
< / span > < / span > < span class = line > < span class = ln > 7< / span > < span class = cl > < span class = c1 > -- and now hookCallback will no longer be ran for the event.< / span >
< / span > < / span > < / code > < / pre > < / div > < / div > < hr > < div id = throw > < h4 class = heading > bait.throw(name, ...args)
< a href = #throw class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h4 > < p > Throws a hook with < code > name< / code > with the provided < code > args< / code > .< / p > < h5 id = parameters-4 class = heading > Parameters
2023-12-01 02:09:24 +00:00
< a href = #parameters-4 class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h5 > < p > < code > string< / code > < strong > < code > name< / code > < / strong > < br > The name of the hook.< / p > < p > < code > any< / code > < strong > < code > args< / code > < / strong > (This type is variadic. You can pass an infinite amount of parameters with this type.)< br > The arguments to pass to the hook.< / p > < h5 id = example-2 class = heading > Example
< a href = #example-2 class = heading-link > < i class = "fas fa-paperclip" > < / i > < / a > < / h5 > < div class = highlight > < pre tabindex = 0 class = chroma > < code class = language-lua data-lang = lua > < span class = line > < span class = ln > 1< / span > < span class = cl > < span class = n > bait.throw< / span > < span class = p > (< / span > < span class = s1 > ' greeting' < / span > < span class = p > ,< / span > < span class = s1 > ' world' < / span > < span class = p > )< / span >
< / span > < / span > < span class = line > < span class = ln > 2< / span > < span class = cl >
< / span > < / span > < span class = line > < span class = ln > 3< / span > < span class = cl > < span class = c1 > -- This can then be listened to via< / span >
< / span > < / span > < span class = line > < span class = ln > 4< / span > < span class = cl > < span class = n > bait.catch< / span > < span class = p > (< / span > < span class = s1 > ' gretting' < / span > < span class = p > ,< / span > < span class = kr > function< / span > < span class = p > (< / span > < span class = n > greetTo< / span > < span class = p > )< / span >
< / span > < / span > < span class = line > < span class = ln > 5< / span > < span class = cl > < span class = n > print< / span > < span class = p > (< / span > < span class = s1 > ' Hello ' < / span > < span class = o > ..< / span > < span class = n > greetTo< / span > < span class = p > )< / span >
< / span > < / span > < span class = line > < span class = ln > 6< / span > < span class = cl > < span class = kr > end< / span > < span class = p > )< / span >
< / span > < / span > < / code > < / pre > < / div > < / div > < / div > < div class = "footer mt-auto" > < p class = "card-small text-muted" > Want to help improve this page? < a href = https://github.com/Rosettea/Hilbish/issues/new/choose > Create an issue.< / a > < / p > < / div > < / container > < / div > < footer class = "footer mt-auto mt-auto py-3 bg-light row border-top" > < div class = "col mb-3" > < / div > < div class = "col mb-3" > < a href = /Hilbish class = "d-flex align-items-center mb-3 link-dark text-decoration-none" > < img src = /Hilbish/hilbish-logo-and-text.png alt height = 48 class = "d-inline-block align-text-top" style = margin-left:-20px > < / a > < ul class = "nav flex-column" > < li class = "nav-item mb-2" > < a href = /Hilbish class = "nav-link p-0 text-muted" > Home< / a > < / li > < li class = "nav-item mb-2" > < a href = /Hilbish/docs/faq class = "nav-link p-0 text-muted" > FAQ< / a > < / li > < li class = "nav-item mb-2" > < a href = https://github.com/Rosettea/Hilbish class = "nav-link p-0 text-muted" > Source< / a > < / li > < li class = "nav-item mb-2" > < a href = https://github.com/Rosettea/Hilbish/releases class = "nav-link p-0 text-muted" > Releases< / a > < / li > < li class = "nav-item mb-2" > < a href = /Hilbish/docs class = "nav-link p-0 text-muted" > Documentation< / a > < / li > < / ul > < / div > < div class = "col mb-3" > < / div > < div class = "col mb-3" > < / div > < div class = "col mb-3" > < / div > < div class = "col mb-3" > < p class = "text-muted mt-4" > Rosettea © 2022-2023< br > Made with < i class = "fa-solid fa-heart" style = color:#f6345b > < / i > < / p > < / div > < div class = "col mb-3" > < / div > < / footer > < / body > < / html >