summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/l-pdfview.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/l-pdfview.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/l-pdfview.lua95
1 files changed, 95 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/l-pdfview.lua b/Master/texmf-dist/tex/context/base/l-pdfview.lua
new file mode 100644
index 00000000000..627477ee823
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/l-pdfview.lua
@@ -0,0 +1,95 @@
+if not modules then modules = { } end modules ['l-pdfview'] = {
+ version = 1.001,
+ comment = "companion to mtx-context.lua",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local format, getenv = string.format, os.getenv
+
+pdfview = pdfview or { }
+
+local opencalls = {
+ ['default'] = "pdfopen --file", -- "pdfopen --back --file"
+ ['xpdf'] = "xpdfopen",
+}
+
+local closecalls= {
+ ['default'] = "pdfclose --file",
+ ['xpdf'] = nil,
+}
+
+local allcalls = {
+ ['default'] = "pdfclose --all",
+ ['xpdf'] = nil,
+}
+
+if os.type == "windows" then
+ opencalls['okular'] = 'start "test" "c:/program files/kde/bin/okular.exe" --unique' -- todo: get focus
+else
+ opencalls['okular'] = 'okular --unique'
+end
+
+pdfview.METHOD = "MTX_PDFVIEW_METHOD"
+pdfview.method = getenv(pdfview.METHOD) or 'default'
+pdfview.method = (opencalls[pdfview.method] and pdfview.method) or 'default'
+
+function pdfview.methods()
+ return table.concat(table.sortedkeys(opencalls), " ")
+end
+
+function pdfview.status()
+ return format("pdfview methods: %s, current method: %s, MTX_PDFVIEW_METHOD=%s",pdfview.methods(),pdfview.method,getenv(pdfview.METHOD) or "<unset>")
+end
+
+local openedfiles = { }
+
+local function fullname(name)
+ return file.addsuffix(name,"pdf")
+end
+
+function pdfview.open(...)
+ local opencall = opencalls[pdfview.method]
+ if opencall then
+ local t = { ... }
+ for i=1,#t do
+ local name = fullname(t[i])
+ if io.exists(name) then
+ os.execute(format('%s "%s" 2>&1', opencall, name))
+ openedfiles[name] = true
+ end
+ end
+ end
+end
+
+function pdfview.close(...)
+ local closecall = closecalls[pdfview.method]
+ if closecall then
+ local t = { ... }
+ for i=1,#t do
+ local name = fullname(t[i])
+ if openedfiles[name] then
+ os.execute(format('%s "%s" 2>&1', closecall, name))
+ openedfiles[name] = nil
+ else
+ pdfview.closeall()
+ break
+ end
+ end
+ end
+end
+
+function pdfview.closeall()
+ local allcall = allcalls[pdfview.method]
+ if allcall then
+ os.execute(format('%s 2>&1', allcall))
+ end
+ openedfiles = { }
+end
+
+--~ pdfview.open("t:/document/show-exa.pdf")
+--~ os.sleep(3)
+--~ pdfview.close("t:/document/show-exa.pdf")
+
+return pdfview