Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Added builtins per runtime



I stopped relying on the docs and started reading the code as I should have done
from start directly - it's FOSS after all and the docs of my project aren't even close
of being accurate too. ;)

I currently have two builtins, one just evals ruby code in the vm and returns the
result and another one that creates a new builtin. The first new builtin works w/o
problems, any further is either unknown or zsh segfaults so I need some more
code reading/testing there.

Looks like this:

~> zmodload zsh/ruby                  
~> reval "RUBY_VERSION"                
"1.9.1"
~> rdef 'def bar(n); "-" * n.to_i; end'        
~> bar 20
"--------------------"
~>

Basically I am just maintaining an array of builtins myself and call addbuiltins()
inside of my module whenever a new builtin should be added. Due the 
BINF_ADDED flag the builtins will be defined once which is fine.

---- On Sun, 02 May 2010 11:08:21 +0200 Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote ---- 

>On Sat, May 1, 2010 at 2:02 PM, Christoph Kappel <unexist@xxxxxxxxxxxxx> wrote: 
>> 
>> That was exactly my question. Can a module change it's features per runtime? 
> 
>There doesn't appear to be any reason that a module could not provide 
>a builtin (or even, I suppose, a parameter) that modifies the module's 
>own features array on the fly. The effect would need to be the same 
>as if "zmodload -F" had been invoked to enable the newly-materialized 
>feature. 
> 
>> Generally the use of the word feature in the doc is really confusing, reading the 
>> coding makes it's even worse when a feature struct contains lists of builtins, 
>> condistions etc. which are called features too. 
>> 
>> The doc also doesn't make very clear what abstracts. 
> 
>The concept of features (as in the feature struct) was only recently 
>introduced, and was layered on top of the existing implementation of 
>builtins/parameters/etc. The abstraction may therefore be a bit less 
>clean than one would find if it had been designed from scratch. 
> 
>> I basically want to provide a builtin/feature/whatever that provides a way to add 
>> actions in another language - ruby in my case. 
> 
>I suspect that what you mean by this is that you intend to link a ruby 
>interpreter to zsh, and you want to permit interpreted functions 
>defined in ruby to appear on the fly as builtin commands from the 
>point of view of the zsh interpreter. It might be possible to do 
>that, because the same C function defined in the module can be called 
>under multiple names. However, I'd suggest that you start by having a 
>single builtin that invokes the ruby interpreter and pass it the name 
>of the ruby function as its first argument, rather than attempt to 
>create a new builtin for every function.
>



Messages sorted by: Reverse Date, Date, Thread, Author