Hi, the docstring of `org-ctags-create-tags` says it should "(Re)create tags file in the directory of the active buffer," creating tags from the internal links found in the org files. However, it always creates an empty TAGS file.
The cause appears to be a pair of escaped quotes used with `shell-command` when it calls the "ctags" executable. * Re-creating the issue 1. First, as explained in the commentary of "org-ctags.el", make sure you have exuberant-ctags installed on your system. On a debian-based system, like so... --8<---------------cut here---------------start------------->8--- sudo apt install exuberant-ctags --8<---------------cut here---------------end--------------->8--- 2. Start Emacs from the command-line with "emacs -Q". 3. In the "*scratch*" buffer, paste the expression shown below. --8<---------------cut here---------------start------------->8--- (let* ((testdir (expand-file-name "test1234xyz" "~")) (orgfile (expand-file-name "test-file.org" testdir)) (tagsfile (expand-file-name "TAGS" testdir))) (unless (file-exists-p testdir) (make-directory testdir)) (find-file orgfile) (insert "<<test link>>") (save-buffer) (require 'org-ctags) (org-ctags-create-tags testdir) (find-file tagsfile)) --8<---------------cut here---------------end--------------->8--- 4. If you evaluate the above code. It creates the "~/test1234xyz" directory, an org file containing a link, and a new TAGS file. It also opens the new TAGS file. But as you can see, it's empty. * Cause The cause appears to be some escaped quotes around a shell command argument. The FILES argument passed to the "ctags" executable uses globbing. But since it's surrounded by double quotes, no globbing occurs, and "ctags" doesn't actually scan any files. If we change this: "--regex-orgmode=\"%s\" -f \"%s\" -e -R \"%s\"") To this: "--regex-orgmode=\"%s\" -f \"%s\" -e -R %s") It works as expected. I've attached a patch against the current Emacs master branch. I hope that's sufficient, given the minimal nature of the change. Emacs : GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38, cairo version 1.16.0) of 2024-02-09 Package: Org mode version 9.6.15 (release_9.6.15 @ /home/martin/Projects/emacs/lisp/org/)
>From a6719edafd928a5ce27036be5d5bec00eaafa8ec Mon Sep 17 00:00:00 2001 From: Martin Marshall <l...@martinmarshall.com> Date: Fri, 9 Feb 2024 17:40:03 -0500 Subject: [PATCH] org-ctags.el: Fix use of "ctags" executable * lisp/org/org-ctags.el (org-ctags-create-tags): Allow file globbing in `shell-command' invocation of "ctags". TINYCHANGE --- lisp/org/org-ctags.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lisp/org/org-ctags.el b/lisp/org/org-ctags.el index 2417353ee5d..9e523e7dc67 100644 --- a/lisp/org/org-ctags.el +++ b/lisp/org/org-ctags.el @@ -486,7 +486,7 @@ org-ctags-create-tags (setq exitcode (shell-command (format (concat "%s --langdef=orgmode --langmap=orgmode:.org " - "--regex-orgmode=\"%s\" -f \"%s\" -e -R \"%s\"") + "--regex-orgmode=\"%s\" -f \"%s\" -e -R %s") org-ctags-path-to-ctags org-ctags-tag-regexp (expand-file-name (concat dir-name "/TAGS")) -- 2.39.2
-- Best regards, Martin Marshall