* bug#64131: make resolving symlinks in compilation-find-file optional @ 2023-06-17 13:18 Qiang Fang via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-11 18:06 ` Stefan Kangas 0 siblings, 1 reply; 8+ messages in thread From: Qiang Fang via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-06-17 13:18 UTC (permalink / raw) To: 64131 I use rg for searching in a git-annex repo, rg use compilation-find-file to jump to the file from the search result, symlinks are resolved with file-truename. But it should not resolve the symlink in the above case. See this issue for more details. https://github.com/dajva/rg.el/issues/156#issuecomment-1595654224 ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#64131: make resolving symlinks in compilation-find-file optional 2023-06-17 13:18 bug#64131: make resolving symlinks in compilation-find-file optional Qiang Fang via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-11 18:06 ` Stefan Kangas 2023-09-11 23:56 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 1 reply; 8+ messages in thread From: Stefan Kangas @ 2023-09-11 18:06 UTC (permalink / raw) To: Qiang Fang, 64131 tags 64131 + moreinfo thanks Qiang Fang via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs@gnu.org> writes: > I use rg for searching in a git-annex repo, rg use compilation-find-file to jump to the file from the search result, symlinks are resolved with file-truename. But it should not resolve the symlink in the above case. See this issue for more details. > > https://github.com/dajva/rg.el/issues/156#issuecomment-1595654224 Could you please give a complete recipe to reproduce this, what the result is and what you expect? Or is this a feature request? It's preferable if your recipe doesn't include rg.el, because otherwise it'll be hard for us to test it. ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#64131: make resolving symlinks in compilation-find-file optional 2023-09-11 18:06 ` Stefan Kangas @ 2023-09-11 23:56 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-12 0:33 ` Stefan Kangas 0 siblings, 1 reply; 8+ messages in thread From: Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-11 23:56 UTC (permalink / raw) To: Stefan Kangas; +Cc: Qiang Fang, 64131 No, I couldn't provide a recipe. But it is obvious even to a beginner like me. The solution is just removed the file-truename function from compile-find-file, or make it customisable: (defun compilation-find-file (marker filename directory &rest formats) "Find a buffer for file FILENAME. If FILENAME is not found at all, ask the user where to find it. Pop up the buffer containing MARKER and scroll to MARKER if we ask the user where to find the file. Search the directories in `compilation-search-path'. A nil in `compilation-search-path' means to try the \"current\" directory, which is passed in DIRECTORY. If DIRECTORY is relative, it is combined with `default-directory'. If DIRECTORY is nil, that means use `default-directory'. FORMATS, if given, is a list of formats to reformat FILENAME when looking for it: for each element FMT in FORMATS, this function attempts to find a file whose name is produced by (format FMT FILENAME)." (or formats (setq formats '("%s"))) (let ((dirs compilation-search-path) (spec-dir (if directory (expand-file-name directory) default-directory)) buffer thisdir fmts name) (if (and filename (file-name-absolute-p filename)) ;; The file name is absolute. Use its explicit directory as ;; the first in the search path, and strip it from FILENAME. (setq filename (abbreviate-file-name (expand-file-name filename)) dirs (cons (file-name-directory filename) dirs) filename (file-name-nondirectory filename))) ;; Now search the path. (while (and dirs (null buffer)) (setq thisdir (or (car dirs) spec-dir) fmts formats) ;; For each directory, try each format string. (while (and fmts (null buffer)) (setq name (file-name-concat thisdir (format (car fmts) filename)) buffer (and (file-exists-p name) (find-file-noselect name)) fmts (cdr fmts))) (setq dirs (cdr dirs))) ;; If we haven't found it, this might be a parallel build. ;; Search the directories further up the buffer. (when (and (null buffer) compilation-search-all-directories) (with-current-buffer (marker-buffer marker) (save-excursion (goto-char (marker-position marker)) (when-let ((prev (compilation--previous-directory (point)))) (goto-char prev)) (setq dirs (cdr (or (get-text-property (1- (point)) 'compilation-directory) (get-text-property (point) 'compilation-directory)))))) (while (and dirs (null buffer)) (setq thisdir (car dirs) fmts formats) (while (and fmts (null buffer)) (setq name (file-name-concat thisdir (format (car fmts) filename)) buffer (and (file-exists-p name) (find-file-noselect name)) fmts (cdr fmts))) (setq dirs (cdr dirs)))) (while (null buffer) ;Repeat until the user selects an existing file. ;; The file doesn't exist. Ask the user where to find it. (save-excursion ;This save-excursion is probably not right. (let ((w (let ((pop-up-windows t)) (display-buffer (marker-buffer marker) '(nil (allow-no-window . t)))))) (with-current-buffer (marker-buffer marker) (goto-char marker) (and w (progn (compilation-set-window w marker) (compilation-set-overlay-arrow w)))) (let* ((name (read-file-name (format-prompt "Find this %s in" filename compilation-error) spec-dir filename t nil ;; The predicate below is fine when called from ;; minibuffer-complete-and-exit, but it's too ;; restrictive otherwise, since it also prevents the ;; user from completing "fo" to "foo/" when she ;; wants to enter "foo/bar". ;; ;; Try to make sure the user can only select ;; a valid answer. This predicate may be ignored, ;; tho, so we still have to double-check afterwards. ;; TODO: We should probably fix read-file-name so ;; that it never ignores this predicate, even when ;; using popup dialog boxes. ;; (lambda (name) ;; (if (file-directory-p name) ;; (setq name (expand-file-name filename name))) ;; (file-exists-p name)) )) (origname name)) (cond ((not (file-exists-p name)) (message "Cannot find file `%s'" name) (ding) (sit-for 2)) ((and (file-directory-p name) (not (file-exists-p (setq name (file-name-concat name filename))))) (message "No `%s' in directory %s" filename origname) (ding) (sit-for 2)) (t (setq buffer (find-file-noselect name)))))))) ;; Make intangible overlays tangible. ;; This is weird: it's not even clear which is the current buffer, ;; so the code below can't be expected to DTRT here. -- Stef (dolist (ov (overlays-in (point-min) (point-max))) (when (overlay-get ov 'intangible) (overlay-put ov 'intangible nil))) buffer))) ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#64131: make resolving symlinks in compilation-find-file optional 2023-09-11 23:56 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-12 0:33 ` Stefan Kangas 2023-09-12 0:59 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-12 1:01 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 0 siblings, 2 replies; 8+ messages in thread From: Stefan Kangas @ 2023-09-12 0:33 UTC (permalink / raw) To: Qiang; +Cc: 64131 Qiang <qiang.fang@zoho.com.cn> writes: > No, I couldn't provide a recipe. But it is obvious even to a beginner > like me. The solution is just removed the file-truename function from > compile-find-file, or make it customisable: Thanks, but what is the problem that this solves? ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#64131: make resolving symlinks in compilation-find-file optional 2023-09-12 0:33 ` Stefan Kangas @ 2023-09-12 0:59 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-12 1:01 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 1 sibling, 0 replies; 8+ messages in thread From: Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-12 0:59 UTC (permalink / raw) To: Stefan Kangas; +Cc: Qiang, 64131 Without that tiny modification, I have problem jump to the file in my git-annex folder. I think it should be the default. ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#64131: make resolving symlinks in compilation-find-file optional 2023-09-12 0:33 ` Stefan Kangas 2023-09-12 0:59 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-12 1:01 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 2024-01-10 10:39 ` Stefan Kangas 1 sibling, 1 reply; 8+ messages in thread From: Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2023-09-12 1:01 UTC (permalink / raw) To: Stefan Kangas; +Cc: Qiang, 64131 Without that tiny modification, I have problem jump to the file in my git-annex folder, it jump to the actual database folder, what I want to the folder that have the symlink. I think it should be the default. People use symlinks to organize text documents, a file may have links in different dirs. For example, if we use dirs as catalogues, when a file is opened following the search result in a "rg" buffer, it would be convenient to jump to the catalogue by just M-x "dired". However, the current behavior is to jump to the dir that has the symlink destination file. For people using git-annex, the symlink destination dir could be a database dir, and it is not supposed to be accessed directly. ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#64131: make resolving symlinks in compilation-find-file optional 2023-09-12 1:01 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-01-10 10:39 ` Stefan Kangas 2024-01-10 13:29 ` Eli Zaretskii 0 siblings, 1 reply; 8+ messages in thread From: Stefan Kangas @ 2024-01-10 10:39 UTC (permalink / raw) To: Qiang; +Cc: 64131 Qiang <qiang.fang@zoho.com.cn> writes: > Without that tiny modification, I have problem jump to the file in my > git-annex folder, it jump to the actual database folder, what I want > to the folder that have the symlink. I think it should be the default. > > People use symlinks to organize text documents, a file may have links > in different dirs. For example, if we use dirs as catalogues, when a > file is opened following the search result in a "rg" buffer, it would > be convenient to jump to the catalogue by just M-x "dired". However, > the current behavior is to jump to the dir that has the symlink > destination file. For people using git-annex, the symlink destination > dir could be a database dir, and it is not supposed to be accessed > directly. Could you provide a recipe for how to test this, for someone that doesn't use git-annex but would be happy to install it? Or even better, could you produce a recipe that doesn't rely on git-annex? ^ permalink raw reply [flat|nested] 8+ messages in thread
* bug#64131: make resolving symlinks in compilation-find-file optional 2024-01-10 10:39 ` Stefan Kangas @ 2024-01-10 13:29 ` Eli Zaretskii 0 siblings, 0 replies; 8+ messages in thread From: Eli Zaretskii @ 2024-01-10 13:29 UTC (permalink / raw) To: Stefan Kangas; +Cc: qiang.fang, 64131 > Cc: 64131@debbugs.gnu.org > From: Stefan Kangas <stefankangas@gmail.com> > Date: Wed, 10 Jan 2024 02:39:33 -0800 > > Qiang <qiang.fang@zoho.com.cn> writes: > > > Without that tiny modification, I have problem jump to the file in my > > git-annex folder, it jump to the actual database folder, what I want > > to the folder that have the symlink. I think it should be the default. > > > > People use symlinks to organize text documents, a file may have links > > in different dirs. For example, if we use dirs as catalogues, when a > > file is opened following the search result in a "rg" buffer, it would > > be convenient to jump to the catalogue by just M-x "dired". However, > > the current behavior is to jump to the dir that has the symlink > > destination file. For people using git-annex, the symlink destination > > dir could be a database dir, and it is not supposed to be accessed > > directly. > > Could you provide a recipe for how to test this, for someone that > doesn't use git-annex but would be happy to install it? > > Or even better, could you produce a recipe that doesn't rely on > git-annex? It is possible that this issue was resolved while solving bug#67930, so I suggest that the OP tries the current master branch to see if the problem still exists. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-01-10 13:29 UTC | newest] Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-06-17 13:18 bug#64131: make resolving symlinks in compilation-find-file optional Qiang Fang via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-11 18:06 ` Stefan Kangas 2023-09-11 23:56 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-12 0:33 ` Stefan Kangas 2023-09-12 0:59 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 2023-09-12 1:01 ` Qiang via Bug reports for GNU Emacs, the Swiss army knife of text editors 2024-01-10 10:39 ` Stefan Kangas 2024-01-10 13:29 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/emacs.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).