Zsh: lazy load bindkey to a function?

Clash Royale CLAN TAG#URR8PPP
I have a zsh script that loads when start new shell with default is zsh.
func1()
<..check if in a git repo, if not return..>
<..code here..>
zle -N func1
bindkey 'eo' func1
The above function func1 is triggered when press Alt-o. This function only loaded when in a git repo.
The problem is that the cost of load this function is pretty high and slowing down the shell prompt if it always loaded when start new shell, how to "lazy" - load only when first time trigger Alt-o?
zsh
add a comment |
I have a zsh script that loads when start new shell with default is zsh.
func1()
<..check if in a git repo, if not return..>
<..code here..>
zle -N func1
bindkey 'eo' func1
The above function func1 is triggered when press Alt-o. This function only loaded when in a git repo.
The problem is that the cost of load this function is pretty high and slowing down the shell prompt if it always loaded when start new shell, how to "lazy" - load only when first time trigger Alt-o?
zsh
add a comment |
I have a zsh script that loads when start new shell with default is zsh.
func1()
<..check if in a git repo, if not return..>
<..code here..>
zle -N func1
bindkey 'eo' func1
The above function func1 is triggered when press Alt-o. This function only loaded when in a git repo.
The problem is that the cost of load this function is pretty high and slowing down the shell prompt if it always loaded when start new shell, how to "lazy" - load only when first time trigger Alt-o?
zsh
I have a zsh script that loads when start new shell with default is zsh.
func1()
<..check if in a git repo, if not return..>
<..code here..>
zle -N func1
bindkey 'eo' func1
The above function func1 is triggered when press Alt-o. This function only loaded when in a git repo.
The problem is that the cost of load this function is pretty high and slowing down the shell prompt if it always loaded when start new shell, how to "lazy" - load only when first time trigger Alt-o?
zsh
zsh
asked Jan 29 at 2:51
Tuyen PhamTuyen Pham
625114
625114
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
autoload is the mechanism for delaying the load of functions until they are used; in a $fpath directory create a testfunc file:
% < testfunc
testfunc()
sleep 3
print this is a test function
and then autoload it (and then zle ..., if necessary):
% grep testfunc ~/.zshrc
autoload -U testfunc
it should not be in memory until used:
% exec zsh -l
% print $functions[testfunc]
builtin autoload -XU
% testfunc
this is a test function
% print $functions[testfunc]
sleep 3
print this is a test function
Thanks, if I trigger for the first time I got this error:testfunc: no such file or directory: testfunc, and then trigger for the second time,testfuncrun as expected, Is there reason why?
– Tuyen Pham
Jan 29 at 4:04
not without more detail on your exact setup. try from azsh -fto clear out any other configuration
– thrig
Jan 29 at 4:10
What exactly that depends on setup can cause the issue? I triedzsh -fthen manually set fpathexport fpath=(~/.zsh/functions $fpath), thenautoload -U testfunc, and run> testfunc. Still the same error for first time run.
– Tuyen Pham
Jan 29 at 6:03
trystraceor the like then.autoloadis how all the tab completions get loaded, and I've never seen the error you report before
– thrig
Jan 29 at 6:13
Doeszsh -fignores.zshrcfile? I havefpathexported in.zshenv. Really confused but this task seems to be critical to my workflow, so I'll really appreciated if you can point it out a little more clearly, I'm normal zsh user, I can't understand some implication.
– Tuyen Pham
Jan 30 at 4:13
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f497329%2fzsh-lazy-load-bindkey-to-a-function%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
autoload is the mechanism for delaying the load of functions until they are used; in a $fpath directory create a testfunc file:
% < testfunc
testfunc()
sleep 3
print this is a test function
and then autoload it (and then zle ..., if necessary):
% grep testfunc ~/.zshrc
autoload -U testfunc
it should not be in memory until used:
% exec zsh -l
% print $functions[testfunc]
builtin autoload -XU
% testfunc
this is a test function
% print $functions[testfunc]
sleep 3
print this is a test function
Thanks, if I trigger for the first time I got this error:testfunc: no such file or directory: testfunc, and then trigger for the second time,testfuncrun as expected, Is there reason why?
– Tuyen Pham
Jan 29 at 4:04
not without more detail on your exact setup. try from azsh -fto clear out any other configuration
– thrig
Jan 29 at 4:10
What exactly that depends on setup can cause the issue? I triedzsh -fthen manually set fpathexport fpath=(~/.zsh/functions $fpath), thenautoload -U testfunc, and run> testfunc. Still the same error for first time run.
– Tuyen Pham
Jan 29 at 6:03
trystraceor the like then.autoloadis how all the tab completions get loaded, and I've never seen the error you report before
– thrig
Jan 29 at 6:13
Doeszsh -fignores.zshrcfile? I havefpathexported in.zshenv. Really confused but this task seems to be critical to my workflow, so I'll really appreciated if you can point it out a little more clearly, I'm normal zsh user, I can't understand some implication.
– Tuyen Pham
Jan 30 at 4:13
add a comment |
autoload is the mechanism for delaying the load of functions until they are used; in a $fpath directory create a testfunc file:
% < testfunc
testfunc()
sleep 3
print this is a test function
and then autoload it (and then zle ..., if necessary):
% grep testfunc ~/.zshrc
autoload -U testfunc
it should not be in memory until used:
% exec zsh -l
% print $functions[testfunc]
builtin autoload -XU
% testfunc
this is a test function
% print $functions[testfunc]
sleep 3
print this is a test function
Thanks, if I trigger for the first time I got this error:testfunc: no such file or directory: testfunc, and then trigger for the second time,testfuncrun as expected, Is there reason why?
– Tuyen Pham
Jan 29 at 4:04
not without more detail on your exact setup. try from azsh -fto clear out any other configuration
– thrig
Jan 29 at 4:10
What exactly that depends on setup can cause the issue? I triedzsh -fthen manually set fpathexport fpath=(~/.zsh/functions $fpath), thenautoload -U testfunc, and run> testfunc. Still the same error for first time run.
– Tuyen Pham
Jan 29 at 6:03
trystraceor the like then.autoloadis how all the tab completions get loaded, and I've never seen the error you report before
– thrig
Jan 29 at 6:13
Doeszsh -fignores.zshrcfile? I havefpathexported in.zshenv. Really confused but this task seems to be critical to my workflow, so I'll really appreciated if you can point it out a little more clearly, I'm normal zsh user, I can't understand some implication.
– Tuyen Pham
Jan 30 at 4:13
add a comment |
autoload is the mechanism for delaying the load of functions until they are used; in a $fpath directory create a testfunc file:
% < testfunc
testfunc()
sleep 3
print this is a test function
and then autoload it (and then zle ..., if necessary):
% grep testfunc ~/.zshrc
autoload -U testfunc
it should not be in memory until used:
% exec zsh -l
% print $functions[testfunc]
builtin autoload -XU
% testfunc
this is a test function
% print $functions[testfunc]
sleep 3
print this is a test function
autoload is the mechanism for delaying the load of functions until they are used; in a $fpath directory create a testfunc file:
% < testfunc
testfunc()
sleep 3
print this is a test function
and then autoload it (and then zle ..., if necessary):
% grep testfunc ~/.zshrc
autoload -U testfunc
it should not be in memory until used:
% exec zsh -l
% print $functions[testfunc]
builtin autoload -XU
% testfunc
this is a test function
% print $functions[testfunc]
sleep 3
print this is a test function
answered Jan 29 at 3:18
thrigthrig
24.9k23157
24.9k23157
Thanks, if I trigger for the first time I got this error:testfunc: no such file or directory: testfunc, and then trigger for the second time,testfuncrun as expected, Is there reason why?
– Tuyen Pham
Jan 29 at 4:04
not without more detail on your exact setup. try from azsh -fto clear out any other configuration
– thrig
Jan 29 at 4:10
What exactly that depends on setup can cause the issue? I triedzsh -fthen manually set fpathexport fpath=(~/.zsh/functions $fpath), thenautoload -U testfunc, and run> testfunc. Still the same error for first time run.
– Tuyen Pham
Jan 29 at 6:03
trystraceor the like then.autoloadis how all the tab completions get loaded, and I've never seen the error you report before
– thrig
Jan 29 at 6:13
Doeszsh -fignores.zshrcfile? I havefpathexported in.zshenv. Really confused but this task seems to be critical to my workflow, so I'll really appreciated if you can point it out a little more clearly, I'm normal zsh user, I can't understand some implication.
– Tuyen Pham
Jan 30 at 4:13
add a comment |
Thanks, if I trigger for the first time I got this error:testfunc: no such file or directory: testfunc, and then trigger for the second time,testfuncrun as expected, Is there reason why?
– Tuyen Pham
Jan 29 at 4:04
not without more detail on your exact setup. try from azsh -fto clear out any other configuration
– thrig
Jan 29 at 4:10
What exactly that depends on setup can cause the issue? I triedzsh -fthen manually set fpathexport fpath=(~/.zsh/functions $fpath), thenautoload -U testfunc, and run> testfunc. Still the same error for first time run.
– Tuyen Pham
Jan 29 at 6:03
trystraceor the like then.autoloadis how all the tab completions get loaded, and I've never seen the error you report before
– thrig
Jan 29 at 6:13
Doeszsh -fignores.zshrcfile? I havefpathexported in.zshenv. Really confused but this task seems to be critical to my workflow, so I'll really appreciated if you can point it out a little more clearly, I'm normal zsh user, I can't understand some implication.
– Tuyen Pham
Jan 30 at 4:13
Thanks, if I trigger for the first time I got this error:
testfunc: no such file or directory: testfunc, and then trigger for the second time, testfunc run as expected, Is there reason why?– Tuyen Pham
Jan 29 at 4:04
Thanks, if I trigger for the first time I got this error:
testfunc: no such file or directory: testfunc, and then trigger for the second time, testfunc run as expected, Is there reason why?– Tuyen Pham
Jan 29 at 4:04
not without more detail on your exact setup. try from a
zsh -f to clear out any other configuration– thrig
Jan 29 at 4:10
not without more detail on your exact setup. try from a
zsh -f to clear out any other configuration– thrig
Jan 29 at 4:10
What exactly that depends on setup can cause the issue? I tried
zsh -f then manually set fpath export fpath=(~/.zsh/functions $fpath), then autoload -U testfunc, and run > testfunc. Still the same error for first time run.– Tuyen Pham
Jan 29 at 6:03
What exactly that depends on setup can cause the issue? I tried
zsh -f then manually set fpath export fpath=(~/.zsh/functions $fpath), then autoload -U testfunc, and run > testfunc. Still the same error for first time run.– Tuyen Pham
Jan 29 at 6:03
try
strace or the like then. autoload is how all the tab completions get loaded, and I've never seen the error you report before– thrig
Jan 29 at 6:13
try
strace or the like then. autoload is how all the tab completions get loaded, and I've never seen the error you report before– thrig
Jan 29 at 6:13
Does
zsh -f ignores .zshrc file? I have fpath exported in .zshenv. Really confused but this task seems to be critical to my workflow, so I'll really appreciated if you can point it out a little more clearly, I'm normal zsh user, I can't understand some implication.– Tuyen Pham
Jan 30 at 4:13
Does
zsh -f ignores .zshrc file? I have fpath exported in .zshenv. Really confused but this task seems to be critical to my workflow, so I'll really appreciated if you can point it out a little more clearly, I'm normal zsh user, I can't understand some implication.– Tuyen Pham
Jan 30 at 4:13
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f497329%2fzsh-lazy-load-bindkey-to-a-function%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown