* Function to find symlink target
@ 2022-05-18 20:55 Jean Louis
2022-05-18 23:00 ` Emanuel Berg
2022-05-19 23:14 ` Nick Dokos
0 siblings, 2 replies; 41+ messages in thread
From: Jean Louis @ 2022-05-18 20:55 UTC (permalink / raw)
To: Help GNU Emacs
Hello,
I have made this function to find the target of a symlink in dired, it opens
new Dired window and tries to locate the file. I have tried finding
such function in Dired and did not succeed, maybe it exists in Emacs
programs somewhere.
(defun rcd-dired-find-symlink ()
"Find target of a symlink"
(interactive)
(when (dired-get-marked-files)
(let ((file (car (dired-get-marked-files))))
(if (file-symlink-p file)
(let* ((file (file-truename file))
(directory (file-name-directory file))
(file (file-name-nondirectory file))
(back (length file)))
(find-file directory)
(search-forward file)
(backward-char back))
(message "Not a symlink: %s" file)))))
Let me know if I should improve this by any means.
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-18 20:55 Function to find symlink target Jean Louis
@ 2022-05-18 23:00 ` Emanuel Berg
2022-05-22 13:52 ` Jean Louis
2022-05-19 23:14 ` Nick Dokos
1 sibling, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-18 23:00 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis wrote:
> (defun rcd-dired-find-symlink ()
> "Find target of a symlink"
> (interactive)
> (when (dired-get-marked-files)
> (let ((file (car (dired-get-marked-files))))
> (if (file-symlink-p file)
> (let* ((file (file-truename file))
> (directory (file-name-directory file))
> (file (file-name-nondirectory file))
> (back (length file)))
> (find-file directory)
> (search-forward file)
> (backward-char back))
> (message "Not a symlink: %s" file)))))
>
> Let me know if I should improve this by any means.
Hello again Jean!
1. Do auto-indentation ...
2. `require' is needed for `dired-get-marked-files', do
byte-compile to find out and always do that before
posting here.
3. The defun has a confusing name, you have already found the
symlink one would think?
4. Emacs thinks of the docstring that the "[f]irst sentence
should end with punctuation". Always do the style check
before posting here BTW, here's an example how. [1]
5. `dired-get-marked-files' is invoked twice, instead just do
it once and reuse the result with and in `let'.
6. "file" appears as a let-binding twice in `let*', confusing
and probably no good reason to do so either, right?
7. I'm unsure but if you `find-file' a directory that is
already open in a buffer, you still end up at `point-min'?
If you don't, you need to got there before the search,
(goto-char (point-min)) as you know.
8. Instead of doing `backward-char', do something like this:
[you can try it below as well]
(when (search-forward "key" (point-max) t)
(goto-char (match-beginning 0)) )
key
Wow, 8 paragraphs! That's what I call feedback ...
[1] https://dataswamp.org/~incal/emacs-init/ide/pack-style.el
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-18 23:00 ` Emanuel Berg
@ 2022-05-22 13:52 ` Jean Louis
2022-05-22 18:02 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Jean Louis @ 2022-05-22 13:52 UTC (permalink / raw)
To: help-gnu-emacs
* Emanuel Berg <incal@dataswamp.org> [2022-05-19 02:02]:
> Jean Louis wrote:
>
> > (defun rcd-dired-find-symlink ()
> > "Find target of a symlink"
> > (interactive)
> > (when (dired-get-marked-files)
> > (let ((file (car (dired-get-marked-files))))
> > (if (file-symlink-p file)
> > (let* ((file (file-truename file))
> > (directory (file-name-directory file))
> > (file (file-name-nondirectory file))
> > (back (length file)))
> > (find-file directory)
> > (search-forward file)
> > (backward-char back))
> > (message "Not a symlink: %s" file)))))
> >
> > Let me know if I should improve this by any means.
>
> Hello again Jean!
>
> 1. Do auto-indentation ...
Thanks. Thought it indended in my file. Maybe email copy and paste
changed something.
> 2. `require' is needed for `dired-get-marked-files', do
> byte-compile to find out and always do that before
> posting here.
If you mean (require 'dired) that is in my file. I understand.
> 3. The defun has a confusing name, you have already found the
> symlink one would think?
I will call it: `rcd-dired-show-symlink-target'
> 4. Emacs thinks of the docstring that the "[f]irst sentence
> should end with punctuation". Always do the style check
> before posting here BTW, here's an example how. [1]
OK. Like this:
(defun rcd-dired-show-symlink-target ()
"Show target of a symlink."
> 5. `dired-get-marked-files' is invoked twice, instead just do
> it once and reuse the result with and in `let'.
>
> 6. "file" appears as a let-binding twice in `let*', confusing
> and probably no good reason to do so either, right?
>
> 7. I'm unsure but if you `find-file' a directory that is
> already open in a buffer, you still end up at `point-min'?
> If you don't, you need to got there before the search,
> (goto-char (point-min)) as you know.
>
> 8. Instead of doing `backward-char', do something like this:
> [you can try it below as well]
>
> (when (search-forward "key" (point-max) t)
> (goto-char (match-beginning 0)) )
(defun rcd-dired-show-symlink-target ()
"Show target of a symlink."
(interactive)
(let ((file (car (dired-get-marked-files))))
(if (and file (file-symlink-p file))
(let* ((target (file-truename file))
(target-exists (file-exists-p target))
(directory (file-name-directory target))
(target (file-name-nondirectory target)))
(if target-exists
(progn
(find-file directory)
(when (search-forward target (point-max) t)
(goto-char (match-beginning 0))))
(message "Target does not exist: %s" target)))
(message "Not a symlink: %s" file))))
Yes, I have tried this, and now I see that finding is not accurate.
Example is this one:
S lrwxrwxrwx 1 8 May 22 16:15 test1.pdf -> test.pdf
-rw-r--r-- 1 90 May 22 15:24 basic.yml
-rw-r--r-- 1 15K May 22 15:13 test.pdf
as if I invoke function on first line it will come to -> test.pdf
which is not what I would like.
Then I have tried with this version, unsuccessfully:
(defun rcd-dired-show-symlink-target ()
"Show target of a symlink."
(interactive)
(let ((file (car (dired-get-marked-files))))
(if (and file (file-symlink-p file))
(let* ((target (file-truename file))
(target-exists (file-exists-p target))
(directory (file-name-directory target))
(search (concat "\d\d " (file-name-nondirectory target))))
(if target-exists
(progn
(find-file directory)
(when (search-forward-regexp search (point-max) t)
(goto-char (match-beginning 0))))
(message "Target does not exist: %s" target)))
(message "Not a symlink: %s" file))))
as for that version I think that at least 2 digits should be included
before the space when searching in Dired and I am doing something
wrong.
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-22 13:52 ` Jean Louis
@ 2022-05-22 18:02 ` Emanuel Berg
2022-05-23 9:05 ` Jean Louis
0 siblings, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-22 18:02 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis wrote:
> Example is this one:
>
> S lrwxrwxrwx 1 8 May 22 16:15 test1.pdf -> test.pdf
> -rw-r--r-- 1 90 May 22 15:24 basic.yml
> -rw-r--r-- 1 15K May 22 15:13 test.pdf
>
> as if I invoke function on first line it will come to ->
> test.pdf which is not what I would like.
Right, I see. Okey then, put the search in a loop and upon
every hit goto the beginning of the match and do
(get-text-property (point) 'dired-filename)
this will be true for the third line's test.pdf but not
the first.
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-22 18:02 ` Emanuel Berg
@ 2022-05-23 9:05 ` Jean Louis
2022-05-23 20:46 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Jean Louis @ 2022-05-23 9:05 UTC (permalink / raw)
To: help-gnu-emacs
* Emanuel Berg <incal@dataswamp.org> [2022-05-22 21:04]:
> Jean Louis wrote:
>
> > Example is this one:
> >
> > S lrwxrwxrwx 1 8 May 22 16:15 test1.pdf -> test.pdf
> > -rw-r--r-- 1 90 May 22 15:24 basic.yml
> > -rw-r--r-- 1 15K May 22 15:13 test.pdf
> >
> > as if I invoke function on first line it will come to ->
> > test.pdf which is not what I would like.
>
> Right, I see. Okey then, put the search in a loop and upon
> every hit goto the beginning of the match and do
>
> (get-text-property (point) 'dired-filename)
>
> this will be true for the third line's test.pdf but not
> the first.
When I evaluate it, I get t only, I do not understand. Tell me more
about the idea of finding particular file in dired list and placing
cursor on it.
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-23 9:05 ` Jean Louis
@ 2022-05-23 20:46 ` Emanuel Berg
2022-05-24 0:59 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-23 20:46 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis wrote:
>>> S lrwxrwxrwx 1 8 May 22 16:15 test1.pdf -> test.pdf [...]
>>> -rw-r--r-- 1 15K May 22 15:13 test.pdf
>>>
>>> as if I invoke function on first line it will come to ->
>>> test.pdf which is not what I would like.
>>
>> Right, I see. Okey then, put the search in a loop and upon
>> every hit goto the beginning of the match and do
>>
>> (get-text-property (point) 'dired-filename)
>>
>> this will be true for the third line's test.pdf but not
>> the first.
>
> When I evaluate it, I get t only, I do not understand.
> Tell me more about the idea of finding particular file in
> dired list and placing cursor on it.
Wasn't the problem how to find the right, in this case,
"target.txt" in a situation like this:
/home/incal/test/dired:
lrwxrwxrwx 1 incal 10 May 23 22:41 target-link.txt -> target.txt
-rw-r--r-- 1 incal 0 May 23 22:41 target.txt
Search for "target.txt". When you find it, use
(get-text-property (point) 'dired-filename)
Here it is nil:
lrwxrwxrwx 1 incal 10 May 23 22:41 target-link.txt -> target.txt
^
So search again, here it is t:
-rw-r--r-- 1 incal 0 May 23 22:41 target.txt
^
and that's the target you are looking for.
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-23 20:46 ` Emanuel Berg
@ 2022-05-24 0:59 ` Emanuel Berg
2022-05-24 1:09 ` Michael Heerdegen
0 siblings, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-24 0:59 UTC (permalink / raw)
To: help-gnu-emacs
;;; -*- lexical-binding: t -*-
;;
;; this file:
;; https://dataswamp.org/~incal/emacs-init/geh.el
(require 'cl-lib)
(defun dired-find-link-target (link)
(let*((target (file-truename link))
(name (file-name-nondirectory target)) )
(find-file (file-name-directory target))
(goto-char (point-min))
(cl-loop
while (re-search-forward name (point-max) t)
do (when (get-text-property (point) 'dired-filename)
(cl-return) ))
(goto-char (match-beginning 0)) ))
;; /home/incal/test/dired:
;; lrwxrwxrwx 1 incal 10 May 23 22:41 target-link.txt -> target.txt
;; -rw-r--r-- 1 incal 0 May 23 22:41 target.txt
(dired-find-link-target "~/test/dired/target-link.txt")
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-24 0:59 ` Emanuel Berg
@ 2022-05-24 1:09 ` Michael Heerdegen
2022-05-24 2:14 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Michael Heerdegen @ 2022-05-24 1:09 UTC (permalink / raw)
To: help-gnu-emacs
Emanuel Berg <incal@dataswamp.org> writes:
> (defun dired-find-link-target (link)
> (let*((target (file-truename link))
> (name (file-name-nondirectory target)) )
> (find-file (file-name-directory target))
> (goto-char (point-min))
> (cl-loop
> while (re-search-forward name (point-max) t)
> do (when (get-text-property (point) 'dired-filename)
> (cl-return) ))
> (goto-char (match-beginning 0)) ))
Not wrong - but reinventing wheels: see `dired-jump' and
`dired-goto-file'.
Michael.
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-24 1:09 ` Michael Heerdegen
@ 2022-05-24 2:14 ` Emanuel Berg
2022-05-24 2:27 ` Michael Heerdegen
2022-05-25 5:05 ` Jean Louis
0 siblings, 2 replies; 41+ messages in thread
From: Emanuel Berg @ 2022-05-24 2:14 UTC (permalink / raw)
To: help-gnu-emacs
Michael Heerdegen wrote:
>> (defun dired-find-link-target (link)
>> (let*((target (file-truename link))
>> (name (file-name-nondirectory target)) )
>> (find-file (file-name-directory target))
>> (goto-char (point-min))
>> (cl-loop
>> while (re-search-forward name (point-max) t)
>> do (when (get-text-property (point) 'dired-filename)
>> (cl-return) ))
>> (goto-char (match-beginning 0)) ))
>
> Not wrong - but reinventing wheels: see `dired-jump' and
> `dired-goto-file'.
None of these work ...
(dired-goto-file "~/test/dired/target-link.txt")
(dired-jump "~/test/dired/target-link.txt")
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-24 2:14 ` Emanuel Berg
@ 2022-05-24 2:27 ` Michael Heerdegen
2022-05-24 8:04 ` Emanuel Berg
2022-05-25 5:05 ` Jean Louis
1 sibling, 1 reply; 41+ messages in thread
From: Michael Heerdegen @ 2022-05-24 2:27 UTC (permalink / raw)
To: help-gnu-emacs
Emanuel Berg <incal@dataswamp.org> writes:
> >> (defun dired-find-link-target (link)
> >> (let*((target (file-truename link))
> >> (name (file-name-nondirectory target)) )
> >> (find-file (file-name-directory target))
> >> (goto-char (point-min))
> >> (cl-loop
> >> while (re-search-forward name (point-max) t)
> >> do (when (get-text-property (point) 'dired-filename)
> >> (cl-return) ))
> >> (goto-char (match-beginning 0)) ))
> >
> > Not wrong - but reinventing wheels: see `dired-jump' and
> > `dired-goto-file'.
>
> None of these work ...
>
> (dired-goto-file "~/test/dired/target-link.txt")
> (dired-jump "~/test/dired/target-link.txt")
I didn't say your function will shrink to one line. It will shrink a
lot, however. Any necessary information in the docstrings of those.
Michael.
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-24 2:27 ` Michael Heerdegen
@ 2022-05-24 8:04 ` Emanuel Berg
2022-05-24 8:52 ` Michael Heerdegen
0 siblings, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-24 8:04 UTC (permalink / raw)
To: help-gnu-emacs
Michael Heerdegen wrote:
>> (dired-goto-file "~/test/dired/target-link.txt")
>> (dired-jump "~/test/dired/target-link.txt")
>
> I didn't say your function will shrink to one line. It will
> shrink a lot, however. Any necessary information in the
> docstrings of those.
?
But you just said what the OP asked for isn't in Emacs?
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-24 8:04 ` Emanuel Berg
@ 2022-05-24 8:52 ` Michael Heerdegen
2022-05-25 5:54 ` Michael Heerdegen
0 siblings, 1 reply; 41+ messages in thread
From: Michael Heerdegen @ 2022-05-24 8:52 UTC (permalink / raw)
To: help-gnu-emacs
Emanuel Berg <incal@dataswamp.org> writes:
> But you just said what the OP asked for isn't in Emacs?
Not directly with one command AFAIK.
Michael.
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-24 8:52 ` Michael Heerdegen
@ 2022-05-25 5:54 ` Michael Heerdegen
2022-05-27 2:25 ` Jean Louis
0 siblings, 1 reply; 41+ messages in thread
From: Michael Heerdegen @ 2022-05-25 5:54 UTC (permalink / raw)
To: help-gnu-emacs
Michael Heerdegen <michael_heerdegen@web.de> writes:
> Not directly with one command AFAIK.
Note that there are different possibilities what the user might expect
in several cases, e.g. if the target is a directory (dired it in the
containing directory or dired it itself?) or if it's a symlink (most of
the time you'll want to see the truename, unless you need to change a
symlink in between) etc.
Michael.
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-25 5:54 ` Michael Heerdegen
@ 2022-05-27 2:25 ` Jean Louis
2022-05-27 3:31 ` Michael Heerdegen
2022-05-27 14:47 ` Emanuel Berg
0 siblings, 2 replies; 41+ messages in thread
From: Jean Louis @ 2022-05-27 2:25 UTC (permalink / raw)
To: Michael Heerdegen; +Cc: help-gnu-emacs
* Michael Heerdegen <michael_heerdegen@web.de> [2022-05-25 09:38]:
> Michael Heerdegen <michael_heerdegen@web.de> writes:
>
> > Not directly with one command AFAIK.
>
> Note that there are different possibilities what the user might expect
> in several cases, e.g. if the target is a directory (dired it in the
> containing directory or dired it itself?) or if it's a symlink (most of
> the time you'll want to see the truename, unless you need to change a
> symlink in between) etc.
For now I like that new Dired buffer is open with the target to be
located.
How do you mean to see truename, is it by message?
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-27 2:25 ` Jean Louis
@ 2022-05-27 3:31 ` Michael Heerdegen
2022-05-27 8:00 ` Jean Louis
2022-05-27 14:47 ` Emanuel Berg
1 sibling, 1 reply; 41+ messages in thread
From: Michael Heerdegen @ 2022-05-27 3:31 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis <bugs@gnu.support> writes:
> How do you mean to see truename, is it by message?
Not sure I understand your question.
I meant this case:
symlink1 -> symlink2 -> file
what would you want to get? Both seeing FILE or SYMLINK2 could be
useful.
Michael.
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-27 3:31 ` Michael Heerdegen
@ 2022-05-27 8:00 ` Jean Louis
0 siblings, 0 replies; 41+ messages in thread
From: Jean Louis @ 2022-05-27 8:00 UTC (permalink / raw)
To: Michael Heerdegen; +Cc: help-gnu-emacs
* Michael Heerdegen <michael_heerdegen@web.de> [2022-05-27 06:32]:
> Jean Louis <bugs@gnu.support> writes:
>
> > How do you mean to see truename, is it by message?
>
> Not sure I understand your question.
>
> I meant this case:
>
> symlink1 -> symlink2 -> file
>
> what would you want to get? Both seeing FILE or SYMLINK2 could be
> useful.
Yes, there are complex conditions.
In my case I need `file', the target. I found also `file-chase-links'
function. But that one returns always something, even if file does not
exist, and is not as good as `file-truename' as it would not resolve
parent directories that are symlinks.
(defun rcd-dired-show-symlink-target (&optional file)
"Show target of a link."
(interactive)
(let ((file (or file (car (dired-get-marked-files)))))
(if (and file (file-symlink-p file))
(let* ((target (file-chase-links file))
(target-exists (file-exists-p target))
(directory (file-name-directory target)))
(if target-exists
(progn
(find-file directory)
(dired-jump nil target))
(rcd-warning-message "Target does not exist: %s" target)))
(rcd-warning-message "Not a symlink: %s" file))))
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-27 2:25 ` Jean Louis
2022-05-27 3:31 ` Michael Heerdegen
@ 2022-05-27 14:47 ` Emanuel Berg
2022-05-28 6:43 ` Jean Louis
1 sibling, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-27 14:47 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis wrote:
>>> Not directly with one command AFAIK.
>>
>> Note that there are different possibilities what the user
>> might expect in several cases, e.g. if the target is
>> a directory (dired it in the containing directory or dired
>> it itself?) or if it's a symlink (most of the time you'll
>> want to see the truename, unless you need to change
>> a symlink in between) etc.
>
> For now I like that new Dired buffer is open with the target
> to be located.
>
> How do you mean to see truename, is it by message?
symlink - avoid but sometimes useful
symlink to directory - avoid avoid but can be useful
symlink to symlink - avoid avoid avoid
add support for avoid avoid avoid? avoid!
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-27 14:47 ` Emanuel Berg
@ 2022-05-28 6:43 ` Jean Louis
2022-05-28 15:29 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Jean Louis @ 2022-05-28 6:43 UTC (permalink / raw)
To: Emanuel Berg, help-gnu-emacs
Let us say there are 100 websites, there is repository of pictures, videos, files on computer, but one part must be on websites too, then there is website repository on a local computer. Images and files are then linked to website repository on local computer in their corresponding locations, this saving space, then rsync uploads symlinks as real files to web server.
In this case symlinks spare huge hard disk space.
There is no general rule that one should tell to avoid some feature, rather there shall be particular case to consider to see what could be better solution.
Jean
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-28 6:43 ` Jean Louis
@ 2022-05-28 15:29 ` Emanuel Berg
2022-05-28 15:43 ` Emanuel Berg
` (2 more replies)
0 siblings, 3 replies; 41+ messages in thread
From: Emanuel Berg @ 2022-05-28 15:29 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis wrote:
> Let us say there are 100 websites, there is repository of
> pictures, videos, files on computer, but one part must be on
> websites too, then there is website repository on a local
> computer. Images and files are then linked to website
> repository on local computer in their corresponding
> locations, this saving space, then rsync uploads symlinks as
> real files to web server.
>
> In this case symlinks spare huge hard disk space.
Actually a file (size F) and a symlink (size S and 0 < S)
takes F + S while just the file takes F.
How big is a symlink?
$ touch a.txt
$ ln -s a.txt a-sy.txt
$ du -b a-sl.txt
5
5 bytes. The path to a.txt.
The advantage is one can create virtual filesystems on
a file-by-file basis. There are many use cases for that
including the one you mention ...
> There is no general rule that one should tell to avoid some
> feature
The general rule is don't use it unless there is a good
reason to.
> rather there shall be particular case to consider to see
> what could be better solution.
Indeed.
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-28 15:29 ` Emanuel Berg
@ 2022-05-28 15:43 ` Emanuel Berg
2022-05-28 16:08 ` Eli Zaretskii
2022-05-31 6:27 ` Jean Louis
2022-05-31 6:31 ` Jean Louis
2 siblings, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-28 15:43 UTC (permalink / raw)
To: help-gnu-emacs
> How big is a symlink?
>
> $ touch a.txt
> $ ln -s a.txt a-sy.txt
> $ du -b a-sl.txt
> 5
>
> 5 bytes. The path to a.txt
^ relative
Yes, if one places the symlink in some another dir than the
target then the size increases.
Observe
$ cd
$ mkdir -p test/sl
$ cd !:2
$ touch a
$ ln -s a b
$ cd
$ ln -s test/sl/a l
then compare
$ du -b test/sl/b
1 test/slb/
$ du -b l
9 l
Lesson: There is a lot of space to save by placing symlinks correctly!
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-28 15:43 ` Emanuel Berg
@ 2022-05-28 16:08 ` Eli Zaretskii
2022-05-28 16:46 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Eli Zaretskii @ 2022-05-28 16:08 UTC (permalink / raw)
To: help-gnu-emacs
> From: Emanuel Berg <incal@dataswamp.org>
> Date: Sat, 28 May 2022 17:43:00 +0200
>
> > How big is a symlink?
> >
> > $ touch a.txt
> > $ ln -s a.txt a-sy.txt
> > $ du -b a-sl.txt
> > 5
> >
> > 5 bytes. The path to a.txt
> ^ relative
>
> Yes, if one places the symlink in some another dir than the
> target then the size increases.
>
> Observe
>
> $ cd
> $ mkdir -p test/sl
> $ cd !:2
> $ touch a
> $ ln -s a b
> $ cd
> $ ln -s test/sl/a l
>
> then compare
>
> $ du -b test/sl/b
> 1 test/slb/
>
> $ du -b l
> 9 l
>
> Lesson: There is a lot of space to save by placing symlinks correctly!
Actually, for short enough symlinks (like shorter than 60 bytes),
there are no disk space savings at all, regardless of the actual
length of the reference target.
You evidently assume that a symlink is stored in some particular way
on disk, but the reality is different from your assumption. What 'ls'
and 'du' show you is largely an illusion.
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-28 16:08 ` Eli Zaretskii
@ 2022-05-28 16:46 ` Emanuel Berg
2022-05-28 16:55 ` Eli Zaretskii
0 siblings, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-28 16:46 UTC (permalink / raw)
To: help-gnu-emacs
Eli Zaretskii wrote:
>> Lesson: There is a lot of space to save by placing
>> symlinks correctly!
>
> Actually, for short enough symlinks (like shorter than 60
> bytes), there are no disk space savings at all, regardless
> of the actual length of the reference target.
>
> You evidently assume that a symlink is stored in some
> particular way on disk, but the reality is different from
> your assumption. What 'ls' and 'du' show you is largely
> an illusion.
Okay, where are they stored then?
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-28 15:29 ` Emanuel Berg
2022-05-28 15:43 ` Emanuel Berg
@ 2022-05-31 6:27 ` Jean Louis
2022-05-31 12:24 ` Emanuel Berg
2022-05-31 6:31 ` Jean Louis
2 siblings, 1 reply; 41+ messages in thread
From: Jean Louis @ 2022-05-31 6:27 UTC (permalink / raw)
To: help-gnu-emacs
* Emanuel Berg <incal@dataswamp.org> [2022-05-28 18:30]:
> > There is no general rule that one should tell to avoid some
> > feature
>
> The general rule is don't use it unless there is a good
> reason to.
General rule is that we have no practical use of general rules. ☺️
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-28 15:29 ` Emanuel Berg
2022-05-28 15:43 ` Emanuel Berg
2022-05-31 6:27 ` Jean Louis
@ 2022-05-31 6:31 ` Jean Louis
2022-05-31 12:16 ` Emanuel Berg
2 siblings, 1 reply; 41+ messages in thread
From: Jean Louis @ 2022-05-31 6:31 UTC (permalink / raw)
To: help-gnu-emacs
* Emanuel Berg <incal@dataswamp.org> [2022-05-28 18:30]:
> Jean Louis wrote:
>
> > Let us say there are 100 websites, there is repository of
> > pictures, videos, files on computer, but one part must be on
> > websites too, then there is website repository on a local
> > computer. Images and files are then linked to website
> > repository on local computer in their corresponding
> > locations, this saving space, then rsync uploads symlinks as
> > real files to web server.
> >
> > In this case symlinks spare huge hard disk space.
>
> Actually a file (size F) and a symlink (size S and 0 < S)
> takes F + S while just the file takes F.
Don't know about those calculations. My symlinks point to PDF files
and images, and the order of files in a website directory has to be
replicated on one or more web servers. That is reason why I keep the
order on local computer. Symlinks greatly help in that case, and do
spare the hard disk space.
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-31 6:31 ` Jean Louis
@ 2022-05-31 12:16 ` Emanuel Berg
2022-06-01 7:43 ` Jean Louis
0 siblings, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-31 12:16 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis wrote:
>>> Let us say there are 100 websites, there is repository of
>>> pictures, videos, files on computer, but one part must be
>>> on websites too, then there is website repository on
>>> a local computer. Images and files are then linked to
>>> website repository on local computer in their
>>> corresponding locations, this saving space, then rsync
>>> uploads symlinks as real files to web server.
>>>
>>> In this case symlinks spare huge hard disk space.
>>
>> Actually a file (size F) and a symlink (size S and 0 < S)
>> takes F + S while just the file takes F.
>
> Don't know about those calculations. My symlinks point to
> PDF files and images, and the order of files in a website
> directory has to be replicated on one or more web servers.
A very common use case ...
> That is reason why I keep the order on local computer.
*one
> Symlinks greatly help in that case, and do spare the hard
> disk space.
Compared to duplicating all the files physically on the
local machine?
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-31 12:16 ` Emanuel Berg
@ 2022-06-01 7:43 ` Jean Louis
2022-06-02 0:40 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Jean Louis @ 2022-06-01 7:43 UTC (permalink / raw)
To: help-gnu-emacs
* Emanuel Berg <incal@dataswamp.org> [2022-05-31 15:32]:
> > Symlinks greatly help in that case, and do spare the hard
> > disk space.
>
> Compared to duplicating all the files physically on the
> local machine?
Yes, symlinks can be in a different file structure than their actual
files on the hard disk.
For example:
~/hyperscope/1/2/3/my-file.pdf may be in a complex structure of other
documents, maybe in the same directory could be other 200 files, and
file could be related to ABC subject.
Same file in the public_html directory:
~/public_html/www.example.com/files/world/my-file.pdf
then may give quite different context, different meaning in a different
file structure. And even file name in WWW structure should may become
more meaningful then the actual file name, that is matter of marketing
online.
Then I use often this command to give me the actual WWW link to the
file provided file is in my public_html directory:
(defun loc ()
"Locates the files, and if it is in public_html, it constructs the URL"
(interactive)
(let* ((files (dired-get-marked-files)))
(kill-new (with-temp-buffer
(while files
(let* ((file (pop files))
(uri (if current-prefix-arg file
(public-html-rest file))))
(insert uri "\n")))
(buffer-string)))))
If the file is then located in WWW structure, I would do `M-x loc' on
the file and get a result like:
https://www.example.com.com/files/world/2020/04/foundation.pdf
but if file is not located in WWW structure, I would get result like:
~/public_html/www.example.com/files/world/my-file.pdf
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-06-01 7:43 ` Jean Louis
@ 2022-06-02 0:40 ` Emanuel Berg
2022-06-02 5:15 ` Jean Louis
0 siblings, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-06-02 0:40 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis wrote:
>>> Symlinks greatly help in that case, and do spare the hard
>>> disk space.
>>
>> Compared to duplicating all the files physically on the
>> local machine?
>
> Yes, symlinks can be in a different file structure than
> their actual files on the hard disk.
>
> For example [...]
This is the same use case that has been mentioned several
times by now! Maybe that's the only things symlinks are
good for?
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-06-02 0:40 ` Emanuel Berg
@ 2022-06-02 5:15 ` Jean Louis
2022-06-05 5:40 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Jean Louis @ 2022-06-02 5:15 UTC (permalink / raw)
To: help-gnu-emacs
* Emanuel Berg <incal@dataswamp.org> [2022-06-02 03:44]:
> This is the same use case that has been mentioned several
> times by now! Maybe that's the only things symlinks are
> good for?
Maybe you have been following your "rule" to avoid symlinks without
researching what you can do with symlinks.
Main use for symlinks on a GNU system is in libraries' directories:
lrwxrwxrwx 1 11 May 16 2020 aspell -> aspell-0.60
lrwxrwxrwx 1 17 Apr 28 12:55 terminfo -> ../share/terminfo
lrwxrwxrwx 1 22 Mar 25 2021 libauthcustom.so -> libauthcustom.so.0.0.0
lrwxrwxrwx 1 22 Mar 25 2021 libauthcustom.so.0 -> libauthcustom.so.0.0.0
-rwxr-xr-x 1 14K Mar 25 2021 libauthcustom.so.0.0.0
lrwxrwxrwx 1 20 Mar 25 2021 libauthldap.so -> libauthldap.so.0.0.0
lrwxrwxrwx 1 20 Mar 25 2021 libauthldap.so.0 -> libauthldap.so.0.0.0
-rwxr-xr-x 1 87K Mar 25 2021 libauthldap.so.0.0.0
lrwxrwxrwx 1 21 Mar 25 2021 libauthmysql.so -> libauthmysql.so.0.0.0
lrwxrwxrwx 1 21 Mar 25 2021 libauthmysql.so.0 -> libauthmysql.so.0.0.0
-rwxr-xr-x 1 75K Mar 25 2021 libauthmysql.so.0.0.0
lrwxrwxrwx 1 19 Mar 25 2021 libauthpam.so -> libauthpam.so.0.0.0
lrwxrwxrwx 1 19 Mar 25 2021 libauthpam.so.0 -> libauthpam.so.0.0.0
-rwxr-xr-x 1 14K Mar 25 2021 libauthpam.so.0.0.0
lrwxrwxrwx 1 21 Mar 25 2021 libauthpgsql.so -> libauthpgsql.so.0.0.0
lrwxrwxrwx 1 21 Mar 25 2021 libauthpgsql.so.0 -> libauthpgsql.so.0.0.0
-rwxr-xr-x 1 63K Mar 25 2021 libauthpgsql.so.0.0.0
lrwxrwxrwx 1 20 Mar 25 2021 libauthpipe.so -> libauthpipe.so.0.0.0
lrwxrwxrwx 1 20 Mar 25 2021 libauthpipe.so.0 -> libauthpipe.so.0.0.0
-rwxr-xr-x 1 14K Mar 25 2021 libauthpipe.so.0.0.0
lrwxrwxrwx 1 19 Mar 25 2021 libauthpwd.so -> libauthpwd.so.0.0.0
lrwxrwxrwx 1 19 Mar 25 2021 libauthpwd.so.0 -> libauthpwd.so.0.0.0
-rwxr-xr-x 1 14K Mar 25 2021 libauthpwd.so.0.0.0
lrwxrwxrwx 1 22 Mar 25 2021 libauthshadow.so -> libauthshadow.so.0.0.0
lrwxrwxrwx 1 22 Mar 25 2021 libauthshadow.so.0 -> libauthshadow.so.0.0.0
-rwxr-xr-x 1 14K Mar 25 2021 libauthshadow.so.0.0.0
lrwxrwxrwx 1 22 Mar 25 2021 libauthsqlite.so -> libauthsqlite.so.0.0.0
lrwxrwxrwx 1 22 Mar 25 2021 libauthsqlite.so.0 -> libauthsqlite.so.0.0.0
-rwxr-xr-x 1 55K Mar 25 2021 libauthsqlite.so.0.0.0
lrwxrwxrwx 1 22 Mar 25 2021 libauthuserdb.so -> libauthuserdb.so.0.0.0
lrwxrwxrwx 1 22 Mar 25 2021 libauthuserdb.so.0 -> libauthuserdb.so.0.0.0
-rwxr-xr-x 1 30K Mar 25 2021 libauthuserdb.so.0.0.0
lrwxrwxrwx 1 29 Mar 25 2021 libcourierauthcommon.so -> libcourierauthcommon.so.0.0.0
lrwxrwxrwx 1 29 Mar 25 2021 libcourierauthcommon.so.0 -> libcourierauthcommon.so.0.0.0
-rwxr-xr-x 1 42K Mar 25 2021 libcourierauthcommon.so.0.0.0
lrwxrwxrwx 1 33 Mar 25 2021 libcourierauthsaslclient.so -> libcourierauthsaslclient.so.0.0.0
lrwxrwxrwx 1 33 Mar 25 2021 libcourierauthsaslclient.so.0 -> libcourierauthsaslclient.so.0.0.0
-rwxr-xr-x 1 14K Mar 25 2021 libcourierauthsaslclient.so.0.0.0
lrwxrwxrwx 1 27 Mar 25 2021 libcourierauthsasl.so -> libcourierauthsasl.so.0.0.0
lrwxrwxrwx 1 27 Mar 25 2021 libcourierauthsasl.so.0 -> libcourierauthsasl.so.0.0.0
-rwxr-xr-x 1 14K Mar 25 2021 libcourierauthsasl.so.0.0.0
lrwxrwxrwx 1 23 Mar 25 2021 libcourierauth.so -> libcourierauth.so.0.0.0
lrwxrwxrwx 1 23 Mar 25 2021 libcourierauth.so.0 -> libcourierauth.so.0.0.0
However, I can't tell how is that system managed, it apparently works
fine without my user's intervention.
Here are more practical example on finding files easier in file system
by using symlinks for tagging:
What's a good solution for file-tagging in linux? - Super User
https://superuser.com/questions/81563/whats-a-good-solution-for-file-tagging-in-linux
Another interesting file tagging system:
TMSU
https://tmsu.org/
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-06-02 5:15 ` Jean Louis
@ 2022-06-05 5:40 ` Emanuel Berg
0 siblings, 0 replies; 41+ messages in thread
From: Emanuel Berg @ 2022-06-05 5:40 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis wrote:
> Main use for symlinks on a GNU system is in libraries'
> directories:
>
> lrwxrwxrwx 1 11 May 16 2020 aspell -> aspell-0.60
This is so you can just refer to - here - aspell and it will
lead you to a specific version, or just the version that is
currently installed.
> lrwxrwxrwx 1 22 Mar 25 2021 libauthcustom.so -> libauthcustom.so.0.0.0
> lrwxrwxrwx 1 22 Mar 25 2021 libauthcustom.so.0 -> libauthcustom.so.0.0.0
It has to do with versions as well:
The symbol versioning is a GNU extension to library
versioning [that] allows a single externally-versioned
library (e.g. libc.so.6) to provide multiple incompatible
implementations of the same symbol (before symbol
versioning, you had to update the external version of the
library every time you introduced incompatible interface;
but with symbol versioning you don't). [1]
> Here are more practical example on finding files easier in
> file system by using symlinks for tagging
I have tagging with my e-mail, you can send a mail to
incal+even@dataswamp.org even ...
Not sure what tagging you refer to tho? Maybe symbolic (or
soft) links are pretty useless, is the disappointing truth?
[1] https://stackoverflow.com/a/20443988
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-24 2:14 ` Emanuel Berg
2022-05-24 2:27 ` Michael Heerdegen
@ 2022-05-25 5:05 ` Jean Louis
2022-05-25 22:33 ` Emanuel Berg
1 sibling, 1 reply; 41+ messages in thread
From: Jean Louis @ 2022-05-25 5:05 UTC (permalink / raw)
To: help-gnu-emacs
* Emanuel Berg <incal@dataswamp.org> [2022-05-24 05:15]:
> Michael Heerdegen wrote:
>
> >> (defun dired-find-link-target (link)
> >> (let*((target (file-truename link))
> >> (name (file-name-nondirectory target)) )
> >> (find-file (file-name-directory target))
> >> (goto-char (point-min))
> >> (cl-loop
> >> while (re-search-forward name (point-max) t)
> >> do (when (get-text-property (point) 'dired-filename)
> >> (cl-return) ))
> >> (goto-char (match-beginning 0)) ))
> >
> > Not wrong - but reinventing wheels: see `dired-jump' and
> > `dired-goto-file'.
>
> None of these work ...
>
> (dired-goto-file "~/test/dired/target-link.txt")
> (dired-jump "~/test/dired/target-link.txt")
Thank you for `dired-jump' as that is what I needed, it works well
now, I can find target of a symlink easily.
(defun rcd-dired-show-symlink-target ()
"Show target of a symlink."
(interactive)
(let ((file (car (dired-get-marked-files))))
(if (and file (file-symlink-p file))
(let* ((target (file-truename file))
(target-exists (file-exists-p target))
(directory (file-name-directory target)))
(if target-exists
(progn
(find-file directory)
(dired-jump nil target))
(message "Target does not exist: %s" target)))
(message "Not a symlink: %s" file))))
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-25 5:05 ` Jean Louis
@ 2022-05-25 22:33 ` Emanuel Berg
2022-05-29 2:01 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Emanuel Berg @ 2022-05-25 22:33 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis wrote:
> Thank you for `dired-jump' as that is what I needed, it
> works well now, I can find target of a symlink easily.
>
> (defun rcd-dired-show-symlink-target ()
> "Show target of a symlink."
> (interactive)
> (let ((file (car (dired-get-marked-files))))
> (if (and file (file-symlink-p file))
> (let* ((target (file-truename file))
> (target-exists (file-exists-p target))
> (directory (file-name-directory target)))
> (if target-exists
> (progn
> (find-file directory)
> (dired-jump nil target))
> (message "Target does not exist: %s" target)))
> (message "Not a symlink: %s" file))))
Yes, that works. You can add an optional FILE argument and
only when that's not provided look for the first marked file
or even the file at point which is perhaps more intuitive
since it's only one file ...
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-25 22:33 ` Emanuel Berg
@ 2022-05-29 2:01 ` Emanuel Berg
0 siblings, 0 replies; 41+ messages in thread
From: Emanuel Berg @ 2022-05-29 2:01 UTC (permalink / raw)
To: help-gnu-emacs
>> (defun rcd-dired-show-symlink-target ()
>> "Show target of a symlink." [...]
>
> Yes, that works. You can add an optional FILE argument and
> only when that's not provided look for the first marked file
> or even the file at point which is perhaps more intuitive
> since it's only one file ...
;;; -*- lexical-binding: t -*-
;;
;; this file:
;; https://dataswamp.org/~incal/emacs-init/dired-jump-target.el
(require 'dired)
(defun dired-jump-target (&optional file)
"Jump to FILE or to the target if a symlink."
(interactive
(let ((fls (dired-get-marked-files)))
(list (if (= 1 (length fls))
(car fls)
(thing-at-point 'filename) ))))
(let*((tgt (file-truename file))
(dir (file-name-directory tgt)) )
(when (file-exists-p tgt)
(find-file dir)
(dired-jump nil tgt) )))
;; (dired-jump-target "~/mia.txt") ; from Lisp, regular file
;; ^ and try interactively with point here
;;
;; (dired-jump-target "~/l") ; symlink
;; ^
;; (dired-jump-target "~/xxx") ; nil and NOOP on no file
;; ^
;; last, try from dired with one (1) file marked for cases
;; regular/symlink
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-18 20:55 Function to find symlink target Jean Louis
2022-05-18 23:00 ` Emanuel Berg
@ 2022-05-19 23:14 ` Nick Dokos
2022-05-20 0:42 ` Emanuel Berg
2022-05-23 8:17 ` Jean Louis
1 sibling, 2 replies; 41+ messages in thread
From: Nick Dokos @ 2022-05-19 23:14 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis <bugs@gnu.support> writes:
> Hello,
>
> I have made this function to find the target of a symlink in dired, it opens
> new Dired window and tries to locate the file. I have tried finding
> such function in Dired and did not succeed, maybe it exists in Emacs
> programs somewhere.
>
C-h f file-symlink-p
--
Nick
"There are only two hard problems in computer science: cache
invalidation, naming things, and off-by-one errors." -Martin Fowler
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-19 23:14 ` Nick Dokos
@ 2022-05-20 0:42 ` Emanuel Berg
2022-05-23 8:17 ` Jean Louis
1 sibling, 0 replies; 41+ messages in thread
From: Emanuel Berg @ 2022-05-20 0:42 UTC (permalink / raw)
To: help-gnu-emacs
Nick Dokos wrote:
>> I have made this function to find the target of a symlink
>> in dired [...]
>
> C-h f file-symlink-p
Lame provocation, it even says
This function does not check whether the link target exists.
--
underground experts united
https://dataswamp.org/~incal
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-19 23:14 ` Nick Dokos
2022-05-20 0:42 ` Emanuel Berg
@ 2022-05-23 8:17 ` Jean Louis
2022-05-23 22:49 ` Michael Heerdegen
1 sibling, 1 reply; 41+ messages in thread
From: Jean Louis @ 2022-05-23 8:17 UTC (permalink / raw)
To: Nick Dokos; +Cc: help-gnu-emacs
* Nick Dokos <ndokos@gmail.com> [2022-05-20 02:16]:
> Jean Louis <bugs@gnu.support> writes:
>
> > Hello,
> >
> > I have made this function to find the target of a symlink in dired, it opens
> > new Dired window and tries to locate the file. I have tried finding
> > such function in Dired and did not succeed, maybe it exists in Emacs
> > programs somewhere.
> >
>
> C-h f file-symlink-p
Thanks. I use that in the function mentioned.
In my Rox Filer I have the option to "Show Target" of a symbolic link,
that one is useful function, and I assumed that it must exist in Emacs
but did not find it.
It is like jumping to other file in Dired.
Is there maybe some Dired function to jump exactly to specific file name?
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
In support of Richard M. Stallman
https://stallmansupport.org/
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: Function to find symlink target
2022-05-23 8:17 ` Jean Louis
@ 2022-05-23 22:49 ` Michael Heerdegen
2022-05-23 22:57 ` Emanuel Berg
0 siblings, 1 reply; 41+ messages in thread
From: Michael Heerdegen @ 2022-05-23 22:49 UTC (permalink / raw)
To: help-gnu-emacs
Jean Louis <bugs@gnu.support> writes:
> Is there maybe some Dired function to jump exactly to specific file
> name?
I have written one so I don't think so. Maybe it is useful:
#+begin_src emacs-lisp
(defun my-dired-jump-close (file &optional not-this-window)
"Visit file under point in its dir buffer, resolving symlinks.
Display the buffer in a popup window in this frame when prefix arg
given and in the selected window else."
(interactive (let ((file-name-at-point (dired-get-filename)))
(list (pcase nil
((guard (file-name-directory (dired-get-filename 'verbatim)))
file-name-at-point)
((and (let link (file-symlink-p (if (file-directory-p file-name-at-point)
(directory-file-name file-name-at-point)
file-name-at-point)))
(guard link))
(expand-file-name link (file-name-directory file-name-at-point)))
(_ file-name-at-point))
current-prefix-arg)))
(select-window
(let ((split-height-threshold 15))
(display-buffer (dired-noselect (file-name-directory file))
(if not-this-window
'((display-buffer-reuse-window display-buffer-pop-up-window)
(inhibit-same-window . t)
(reusable-frames . nil))
'((display-buffer-same-window))))))
(dired-goto-file
(if (file-exists-p file) file
(minibuffer-with-setup-hook (lambda () (goto-char (point-max)))
(read-file-name "Dired Goto File: " nil nil nil file)))))
#+end_src
I use this key binding:
#+begin_src emacs-lisp
(define-key dired-mode-map [(control return)] #'my-dired-jump-close)
#+end_src
Michael.
^ permalink raw reply [flat|nested] 41+ messages in thread
end of thread, other threads:[~2022-06-05 5:40 UTC | newest]
Thread overview: 41+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-18 20:55 Function to find symlink target Jean Louis
2022-05-18 23:00 ` Emanuel Berg
2022-05-22 13:52 ` Jean Louis
2022-05-22 18:02 ` Emanuel Berg
2022-05-23 9:05 ` Jean Louis
2022-05-23 20:46 ` Emanuel Berg
2022-05-24 0:59 ` Emanuel Berg
2022-05-24 1:09 ` Michael Heerdegen
2022-05-24 2:14 ` Emanuel Berg
2022-05-24 2:27 ` Michael Heerdegen
2022-05-24 8:04 ` Emanuel Berg
2022-05-24 8:52 ` Michael Heerdegen
2022-05-25 5:54 ` Michael Heerdegen
2022-05-27 2:25 ` Jean Louis
2022-05-27 3:31 ` Michael Heerdegen
2022-05-27 8:00 ` Jean Louis
2022-05-27 14:47 ` Emanuel Berg
2022-05-28 6:43 ` Jean Louis
2022-05-28 15:29 ` Emanuel Berg
2022-05-28 15:43 ` Emanuel Berg
2022-05-28 16:08 ` Eli Zaretskii
2022-05-28 16:46 ` Emanuel Berg
2022-05-28 16:55 ` Eli Zaretskii
2022-05-28 17:05 ` Emanuel Berg
2022-05-31 6:27 ` Jean Louis
2022-05-31 12:24 ` Emanuel Berg
2022-05-31 6:31 ` Jean Louis
2022-05-31 12:16 ` Emanuel Berg
2022-06-01 7:43 ` Jean Louis
2022-06-02 0:40 ` Emanuel Berg
2022-06-02 5:15 ` Jean Louis
2022-06-05 5:40 ` Emanuel Berg
2022-05-25 5:05 ` Jean Louis
2022-05-25 22:33 ` Emanuel Berg
2022-05-29 2:01 ` Emanuel Berg
2022-05-19 23:14 ` Nick Dokos
2022-05-20 0:42 ` Emanuel Berg
2022-05-23 8:17 ` Jean Louis
2022-05-23 22:49 ` Michael Heerdegen
2022-05-23 22:57 ` Emanuel Berg
2022-05-24 0:59 ` Michael Heerdegen
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.