Re: Relative symlinks



Hello Anton,


On Tue, 4 Apr 2006 03:43:26 -0500 Anton Monroe <akm meer net> wrote:

> I wanted an easy way to make relative symlinks in MC.  I searched the
> source directory and found there used to be such a feature, but it was
> removed about four years ago.  For good reason; it was ugly, convoluted,
> completely undocumented, and it was broken as well.
> 
> So I decided to rewrite it.
> 
> However, I have a slight handicap-- I don't know C.  So you may not want
> to take this patch too seriously!  But at least it might inspire one of
> the developers to do it right.  
> 
> But in fact it turned out to be very simple.  I added a
> 'relative_symlink_cmd' function modeled on 'symlink_cmd'.  The existing
> 'do_link' takes two possible values for the first parameter-- 0 = hard
> link, 1 = symlink.  I added another possibility, 2 = relative link.  So
> I don't think there is a risk of it breaking any existing features.
> 
> The old other_symlink feature used <Ctrl-x Ctrl-l>. I used <Ctrl=X v>
> because it's easier for my to type.  I doubt if that change will bother
> anyone. I did not add it to the File Menu because that menu already
> fills a 25-line screen.
> 
> The only small glitch I've noticed is that diff_two_paths doesn't
> completely optimize a relative path if the file and its link are both in
> the same directory. I'll post another message about that.
> 
> Criticism and suggestions are welcome.
> 
> Anton
> 
> 
> --- doc/mc.1.in
> +++ doc/mc.1.in
> @@ -297,6 +297,13 @@
>  .B C-x s
>  run the symbolic link command.
>  .TP
> +.B C-x v
> +run the relative symbolic link command. See the
> +.\"LINK2"
> +File Menu
> +.\"File Menu"
> +section for more information about symbolic links.
> +.TP
>  .B C-x i
>  set the other panel display mode to information.
>  .TP
> @@ -966,6 +973,23 @@
>  .I "Show mini-status"
>  option is enabled. Use symbolic links when you want to avoid the
>  confusion that can be caused by hard links.
> +.PP
> +When you press (C-x s) Midnight Commander will automatically fill in the
> +complete path+filename of the original file and suggest a name for the link.
> +You can change either one.
> +.PP
> +Sometimes you may want to change the absolute path of the original into
> +a relative path. An absolute path starts from the root directory:
> +.PP
> +.I /home/frodo/mc/mc -> /home/frodo/new/mc
> +.PP
> +A relative link describes the original file's location starting from the
> +location of the link itself:
> +.PP
> +.I /home/frodo/mc/mc -> ../new/mc
> +.PP
> +You can force Midnight Commander to suggest a relative path by pressing
> +(C-x v) instead of (C-x s).
>  .PP
>  .B Rename/Move (F6)
>  .PP
> --- src/cmd.c
> +++ src/cmd.c
> @@ -914,7 +914,8 @@ do_link (int symbolic_link, const char *
>  	char *s;
>  	char *d;
>  
> -	/* suggest the full path for symlink */
> +	/* suggest the full path for symlink, and either the full or
> +	relative path to the file it points to */
>  	s = concat_dir_and_file (current_panel->cwd, fname);
>  
>  	if (get_other_type () == view_listing) {
> @@ -923,6 +924,10 @@ do_link (int symbolic_link, const char *
>  	    d = g_strdup (fname);
>  	}
>  
> +	if ( 2 == symbolic_link) {
> +	    s = diff_two_paths ((other_panel->cwd),s);
> +	}
> +
>  	symlink_dialog (s, d, &dest, &src);
>  	g_free (d);
>  	g_free (s);
> @@ -954,6 +959,16 @@ void symlink_cmd (void)
>  
>      if (filename) {
>  	do_link (1, filename);
> +    }
> +}
> +
> +void relative_symlink_cmd (void)
> +{
> +    char *filename = NULL;
> +    filename = selection (current_panel)->fname;
> +
> +    if (filename) {
> +	do_link (2, filename);
>      }
>  }
>  
> --- src/cmd.h
> +++ src/cmd.h
> @@ -40,6 +40,7 @@
>  void tree_cmd (void);
>  void link_cmd (void);
>  void symlink_cmd (void);
> +void relative_symlink_cmd (void);
>  void edit_symlink_cmd (void);
>  void reverse_selection_cmd (void);
>  void unselect_cmd (void);

I'm still missing the feature. What happened to that patch?


Regards,

-- 
wwp

Attachment: signature.asc
Description: PGP signature



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]