[NTG-context] Get list of all buffer names from lua

Henri Menke henrimenke at gmail.com
Tue Jan 8 02:06:55 CET 2019


On 8/01/19 1:37 PM, Stanislav Sokolenko wrote:
> Dear list,
> 
> As the subject line states, I am looking for a means of retrieving a
> table of all saved buffer names from lua. A MNWE would looks like:

It's not so easy because ConTeXt stores the buffers in a local variable
`cache` which is an upvalue for all the other functions.  However, you
can use the Lua `debug` library to access upvalues.  I access the first
upvalue of `buffers.erase`, because it only has a single upvalue which
is `cache`.  Then I can easily extract all the names from that.  You
can't get them in the order of declaration because `cache` is a hashmap
and not an array.  Moreover, ConTeXt is usually in sandboxing mode.  To
get access to the `debug` library you have to run ConTeXt with

    context --debug test.tex

MWE:

\starttext
\startbuffer[ex1]
Buffer 1
\stopbuffer
\startbuffer[ex2]
Buffer 2
\stopbuffer
% Should return {ex1, ex2} or similar
\startluacode
local _, cache = debug.getupvalue(buffers.erase,1)
local names = {}
for name,_ in pairs(cache) do
    names[#names+1] = name
end
context(table.concat(names,", "))
\stopluacode
\stoptext

> 
> \starttext
> \startbuffer[ex1]
> Buffer 1
> \stopbuffer
> \startbuffer[ex2]
> Buffer 2
> \stopbuffer
> % Should return {ex1, ex2} or similar
> \ctxlua{context(...)}
> \stoptext
> 
> The underlying idea is to store a large number of example problems in
> individual buffers that could be retrieved either by specific name or as
> a complete list. I'm having a problem with the latter as it seems like
> all the lua buffer commands I've encountered assume that buffer names
> are known in advance:
> 
> buffers.getcontent(b)
> buffers.raw(b)
> buffers.getlines(b)
> buffers.erase(b)
> buffers.assign(b, text, catcodes)
> buffers.append(b, text)
> buffers.exists(b)
> buffers.collectcontent(names, seperator)
> 
> Thanks,
> 
> Stan
> 
> 
> 
> ___________________________________________________________________________________
> 
> If your question is of interest to others as well, please add an entry
> to the Wiki!
> 
> maillist : ntg-context at ntg.nl /
> http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
> archive  : https://bitbucket.org/phg/context-mirror/commits/
> wiki     : http://contextgarden.net
> ___________________________________________________________________________________



More information about the ntg-context mailing list