title: emacs org-mode exports odt file but opens with PDF viewer
body: <p>For some reason org-mode correctly exports to an ODT file but opens it with the default PDF viewer (okular) instead of libreoffice. I have tried all the solutions mentioned in a similar <a href="https://stackoverflow.com/questions/24434854/emacs-org-odt-export-as-odf-and-open-odt-outside-emacs">post</a> without any luck. For reference I am copying below the relevant sections of my init file. My emacs is 27.0.50 and my org-mode is 9.1.13.</p>
  
  <pre><code>;; Enable export in ODT format
  (eval-after-load "org" '(require 'ox-odt nil t)) ; enable odt backend
  ;; Open ODT files with libre office
  (defun my-org-export-to-odt-and-open ()
    (interactive)
    (org-open-file (org-odt-export-to-odt)))
  </code></pre>
  
  <p>and in my custom-set-variables I have</p>
  
  <pre><code> '(org-file-apps
     '((auto-mode . emacs)
       ("\\.mm\\'" . default)
       ("\\.x?html?\\'" . default)
       ("\\.odt\\'" . "libreoffice %s") 
       ("\\.pdf\\'" . "okular %s")))
  </code></pre>
  
  <p>Thank you in advance for any help.</p>
  
  <p>This is the output value of org-file-apps</p>
  
  <pre><code>Value:
  ((auto-mode . emacs)
   ("\\.mm\\'" . default)
   ("\\.x?html?\\'" . default)
   ("\\.odt\\'" . "libreoffice %s")
   ("\\.pdf\\'" . "okular %s"))
  Original value was 
  ((auto-mode . emacs)
   ("\\.mm\\'" . default)
   ("\\.x?html?\\'" . default)
   ("\\.pdf\\'" . default))
  </code></pre>
  
  <p>and this is one output of edebug on <code>org-open-file</code> when I tried to export a NOTES.org file.</p>
  
  <pre><code>Debugger entered--returning value: nil
    string-match("\\$\\(?:\\(?1:[[:alnum:]_]+\\)\\|{\\(?1:[^{}]+\\)}\\|\\$\\)" "/home/andre/org/NOTES.odt" 0)
  * substitute-env-vars("/home/andre/org/NOTES.odt" t)
  * substitute-env-in-file-name("/home/andre/org/NOTES.odt")
  * substitute-in-file-name("/home/andre/org/NOTES.odt")
  * #f(compiled-function (path &amp;optional in-emacs line search) "Open the file at PATH.\nFirst, this expands any special file name abbreviations.  Then the\nconfiguration variable `org-file-apps' is checked if it contains an\nentry for this file type, and if yes, the corresponding command is launched.\n\nIf no application is found, Emacs simply visits the file.\n\nWith optional prefix argument IN-EMACS, Emacs will visit the file.\nWith a double \\[universal-argument] \\[universal-argument] prefix arg, Org tries to avoid opening in Emacs\nand to use an external application to visit the file.\n\nOptional LINE specifies a line to go to, optional SEARCH a string\nto search for.  If LINE or SEARCH is given, the file will be\nopened in Emacs, unless an entry from org-file-apps that makes\nuse of groups in a regexp matches.\n\nIf you want to change the way frames are used when following a\nlink, please customize `org-link-frame-setup'.\n\nIf the file does not exist, an error is thrown." #&lt;bytecode 0x1524219&gt;)("NOTES.odt" system)
  * apply(#f(compiled-function (path &amp;optional in-emacs line search) "Open the file at PATH.\nFirst, this expands any special file name abbreviations.  Then the\nconfiguration variable `org-file-apps' is checked if it contains an\nentry for this file type, and if yes, the corresponding command is launched.\n\nIf no application is found, Emacs simply visits the file.\n\nWith optional prefix argument IN-EMACS, Emacs will visit the file.\nWith a double \\[universal-argument] \\[universal-argument] prefix arg, Org tries to avoid opening in Emacs\nand to use an external application to visit the file.\n\nOptional LINE specifies a line to go to, optional SEARCH a string\nto search for.  If LINE or SEARCH is given, the file will be\nopened in Emacs, unless an entry from org-file-apps that makes\nuse of groups in a regexp matches.\n\nIf you want to change the way frames are used when following a\nlink, please customize `org-link-frame-setup'.\n\nIf the file does not exist, an error is thrown." #&lt;bytecode 0x1524219&gt;) ("NOTES.odt" system))
  * org-open-file("NOTES.odt" system)
    (if a (org-odt-export-to-odt t s v) (org-open-file (org-odt-export-to-odt nil s v) 'system))
    (lambda (a s v b) (if a (org-odt-export-to-odt t s v) (org-open-file (org-odt-export-to-odt nil s v) 'system)))(nil t nil nil)
    org-export-dispatch(nil)
    funcall-interactively(org-export-dispatch nil)
    call-interactively(org-export-dispatch nil nil)
    command-execute(org-export-dispatch)
  </code></pre>
  
  <p>I kept moving forward until the point shown below. It looks as if the file was matched as <code>\\.mm\\</code>?</p>
  
  <pre><code>Debugger entered--returning value: (10578 10582)
    match-data()
  * regexp-opt-depth("\\.mm\\'")
  * org-file-apps-entry-match-against-dlink-p(("\\.mm\\'" . default))
  * cl-remove(nil ((auto-mode . emacs) ("\\.mm\\'" . default) ("\\.x?html?\\'" . default) ("\\.odt\\'" . "libreoffice %s") ("\\.pdf\\'" . "okular %s") (remote . emacs) (system . mailcap) (t . mailcap)) :if org-file-apps-entry-match-against-dlink-p)
  * apply(cl-remove nil ((auto-mode . emacs) ("\\.mm\\'" . default) ("\\.x?html?\\'" . default) ("\\.odt\\'" . "libreoffice %s") ("\\.pdf\\'" . "okular %s") (remote . emacs) (system . mailcap) (t . mailcap)) :if org-file-apps-entry-match-against-dlink-p nil)
  * cl-remove-if(org-file-apps-entry-match-against-dlink-p ((auto-mode . emacs) ("\\.mm\\'" . default) ("\\.x?html?\\'" . default) ("\\.odt\\'" . "libreoffice %s") ("\\.pdf\\'" . "okular %s") (remote . emacs) (system . mailcap) (t . mailcap)))
  * #f(compiled-function (path &amp;optional in-emacs line search) "Open the file at PATH.\nFirst, this expands any special file name abbreviations.  Then the\nconfiguration variable `org-file-apps' is checked if it contains an\nentry for this file type, and if yes, the corresponding command is launched.\n\nIf no application is found, Emacs simply visits the file.\n\nWith optional prefix argument IN-EMACS, Emacs will visit the file.\nWith a double \\[universal-argument] \\[universal-argument] prefix arg, Org tries to avoid opening in Emacs\nand to use an external application to visit the file.\n\nOptional LINE specifies a line to go to, optional SEARCH a string\nto search for.  If LINE or SEARCH is given, the file will be\nopened in Emacs, unless an entry from org-file-apps that makes\nuse of groups in a regexp matches.\n\nIf you want to change the way frames are used when following a\nlink, please customize `org-link-frame-setup'.\n\nIf the file does not exist, an error is thrown." #&lt;bytecode 0x1524219&gt;)("NOTES.odt" system)
  * apply(#f(compiled-function (path &amp;optional in-emacs line search) "Open the file at PATH.\nFirst, this expands any special file name abbreviations.  Then the\nconfiguration variable `org-file-apps' is checked if it contains an\nentry for this file type, and if yes, the corresponding command is launched.\n\nIf no application is found, Emacs simply visits the file.\n\nWith optional prefix argument IN-EMACS, Emacs will visit the file.\nWith a double \\[universal-argument] \\[universal-argument] prefix arg, Org tries to avoid opening in Emacs\nand to use an external application to visit the file.\n\nOptional LINE specifies a line to go to, optional SEARCH a string\nto search for.  If LINE or SEARCH is given, the file will be\nopened in Emacs, unless an entry from org-file-apps that makes\nuse of groups in a regexp matches.\n\nIf you want to change the way frames are used when following a\nlink, please customize `org-link-frame-setup'.\n\nIf the file does not exist, an error is thrown." #&lt;bytecode 0x1524219&gt;) ("NOTES.odt" system))
  * org-open-file("NOTES.odt" system)
    (if a (org-odt-export-to-odt t s v) (org-open-file (org-odt-export-to-odt nil s v) 'system))
    (lambda (a s v b) (if a (org-odt-export-to-odt t s v) (org-open-file (org-odt-export-to-odt nil s v) 'system)))(nil t nil nil)
    org-export-dispatch(nil)
    funcall-interactively(org-export-dispatch nil)
    call-interactively(org-export-dispatch nil nil)
    command-execute(org-export-dispatch)
  </code></pre>
  
  <p>Actually, I kept moving forward and there was no match against any of the options available in org-file-apps.</p>