]> git.draconx.ca Git - fvwmconf.git/commitdiff
Fix handling of & in FVWM menus.
authorNick Bowler <draconx@gmail.com>
Mon, 25 Aug 2008 04:04:15 +0000 (00:04 -0400)
committerNick Bowler <draconx@gmail.com>
Mon, 25 Aug 2008 04:04:15 +0000 (00:04 -0400)
& is only magic in the _first_ field of an FVWM menu, hence it should only
be escaped in those circumstances.

scripts/mpdmenu.pl

index 5a83987e8a340c4bb9099a276b948d1450770410..25a56b30eaa15725d5a1f4952fdd9c0d67856751 100755 (executable)
@@ -100,8 +100,8 @@ if (defined $album) {
 
                next if (defined $artist && !$accept{albumdir($t_file)});
 
-               $t_artist = sanitise($t_artist);
-               $t_title  = sanitise($t_title);
+               $t_artist = sanitise($t_artist, 0);
+               $t_title  = sanitise($t_title, 0);
 
                my $cmd = sprintf "AddToMenu $menu \"%d\t%s - %s\""
                                  ." Exec mpc playid %d",
@@ -136,7 +136,7 @@ if (defined $album) {
        use locale;
        foreach (sort keys(%albums)) {
                my $key      = $_;
-               my $a_album  = sanitise($key);
+               my $a_album  = sanitise($key, 1);
 
                open THUMB, "-|", "$FVWM/scripts/thumbnail.zsh",
                                         "--small", "--music", $albums{$key};
@@ -233,8 +233,8 @@ if (defined $album) {
                # MPD searches are case-insensitive.
                next if (!($t_title =~ m/(\P{Latin}|^)\Q$basetitle\E(\P{Latin}|$)/ || $t_title =~ m/\Q$basetitle\E/i));
 
-               $t_artist = sanitise($t_artist);
-               $t_title  = sanitise($t_title);
+               $t_artist = sanitise($t_artist, 1);
+               $t_title  = sanitise($t_title, 1);
 
                open THUMB, "-|", "$FVWM/scripts/thumbnail.zsh",
                                         "--small", "--music", $t_file;
@@ -297,12 +297,12 @@ if (defined $album) {
                        cmd("AddToMenu $menu \"*$thumb*\" "
                                ."Exec exec gqview ".shellify($scan, 0));
                }
-               cmd("AddToMenu $menu \"Title:   ".sanitise($entry{Title})."\" "
-                       ."Popup MenuMPDTitle");
-               cmd("AddToMenu $menu \"Artist:  ".sanitise($entry{Artist})."\" "
-                       ."Popup MenuMPDArtist");
-               cmd("AddToMenu $menu \"Album:   ".sanitise($entry{Album})."\" "
-                       ."Popup MenuMPDAlbum");
+               cmd("AddToMenu $menu \"Title:   ".sanitise($entry{Title}, 0)
+                       ."\" Popup MenuMPDTitle");
+               cmd("AddToMenu $menu \"Artist:  ".sanitise($entry{Artist}, 0)
+                       ."\" Popup MenuMPDArtist");
+               cmd("AddToMenu $menu \"Album:   ".sanitise($entry{Album}, 0)
+                       ."\" Popup MenuMPDAlbum");
                cmd("AddToMenu $menu \"\" Nop");
        } else {
                cmd("AddToMenu $menu \"<Song info unavailable>\"");
@@ -370,7 +370,8 @@ print $sock "close\n";
 sub sanitise
 {
        $_ = $_[0];
-       s/([\$&@%^*])/\1\1/g;
+       s/&/&&/g if ($_[1]);
+       s/([\$@%^*])/\1\1/g;
        s/"/\\"/g;
        return $_;
 }