Subject: [PATCH] Add imenu support for OpenOffice documents in doc-view

From: Visuwesh <[email-masked]>
Date: Wed, 09 Oct 2024 19:40:39 +0530

Tags: patch

Hi again, Tassilo!

The attached patch adds imenu index support for docx files.  This is
done by simply passing the PDF file to doc-view--pdf-outline.  This
should be the last patch I have in store for doc-view. Many thanks for
your attention thus far.

In GNU Emacs 31.0.50 (build 13, x86_64-pc-linux-gnu, X toolkit, cairo
 version 1.18.0, Xaw scroll bars) of 2024-10-06 built on astatine
Repository revision: 500f5da5fb62cd0bbded8df754d93e3147d1d847
Repository branch: master
Windowing system distributor 'The X.Org Foundation', version 11.0.12101011
System Description: Debian GNU/Linux trixie/sid

Configured using:
 'configure --with-sound=alsa --with-x-toolkit=lucid --without-xaw3d
 --without-gconf --without-libsystemd --with-cairo CFLAGS=-g3'
>From 15db10f756e1069ba59a4a22462da408a58088e7 Mon Sep 17 00:00:00 2001
From: Visuwesh <[email-masked]>
Date: Wed, 9 Oct 2024 19:36:18 +0530
Subject: [PATCH] Add imenu support for OpenOffice documents in doc-view

* lisp/doc-view.el (doc-view--outline): Pass the right file to
doc-view--pdf-outline.
* doc/emacs/misc.texi (DocView Navigation): Mention support for
OpenOffice documents too.
* etc/NEWS: Announce the change.
---
 doc/emacs/misc.texi | 14 ++++++++------
 etc/NEWS            |  6 ++++--
 lisp/doc-view.el    |  2 ++
 3 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/doc/emacs/misc.texi b/doc/emacs/misc.texi
index 83b83ea7ae9..14196c107c1 100644
--- a/doc/emacs/misc.texi
+++ b/doc/emacs/misc.texi
@@ -586,12 +586,14 @@ DocView Navigation
 @vindex doc-view-djvused-program
   DocView can generate an outline menu for PDF and DjVu documents using
 the @command{mutool} and the @command{djvused} programs, respectively,
-when they are available.  This uses the @code{imenu} facility
-(@pxref{Imenu}).  You can customize how the @code{imenu} items for this
-outline are formatted and displayed using the variables
-@code{doc-view-imenu-format} and @code{doc-view-imenu-flatten}.  The
-filename of the @command{djvused} program can be customized by changing
-the @code{doc-view-djvused-program} user option.
+when they are available.  The outline for OpenOffice documents are also
+generated using the @command{mutool} after they are converted to PDF.
+This uses the @code{imenu} facility (@pxref{Imenu}).  You can customize
+how the @code{imenu} items for this outline are formatted and displayed
+using the variables @code{doc-view-imenu-format} and
+@code{doc-view-imenu-flatten}.  The filename of the @command{djvused}
+program can be customized by changing the
+@code{doc-view-djvused-program} user option.
 
 @cindex registers, in DocView mode
 @findex doc-view-page-to-register
diff --git a/etc/NEWS b/etc/NEWS
index 67d768f0584..5b6dcf6fa18 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -390,9 +390,11 @@ command 'doc-view-page-to-register' (bound to 'm'), and later the stored
 page can be restored with 'doc-view-jump-to-register' (bound to ''').
 
 +++
-*** Docview can generate imenu index for DjVu files.
+*** Docview can generate imenu index for DjVu and OpenOffice documents.
 When the 'djvused' program is available, Docview can now generate imenu
-index for DjVu files from its outline.
+index for DjVu files from its outline.  Index for OpenOffice files are
+generated using the 'mutool' program after their initial conversion to
+PDF format.
 The name of the 'djvused' program can be customized by changing the user
 option 'doc-view-djvused-program'.
 
diff --git a/lisp/doc-view.el b/lisp/doc-view.el
index 57a24418616..bbfbbdec925 100644
--- a/lisp/doc-view.el
+++ b/lisp/doc-view.el
@@ -2103,6 +2103,8 @@ doc-view--outline
            ('djvu
             (when doc-view-djvused-program
               (doc-view--djvu-outline file-name)))
+           ('odf
+            (doc-view--pdf-outline (doc-view-current-cache-doc-pdf)))
            (_
             (doc-view--pdf-outline file-name)))))
     (when outline (imenu-add-to-menubar "Outline"))
-- 
2.45.2