xdg-open, LXDE ile kodlanmış "file: ///" URL'lerinin yüzdesini işlemez


3

Xdg-open'in kodlanmış URL'lerin yüzdesini işlemediğini fark ettim. Örneğin, bu satırlar başarılı olur (dosyalar mevcutsa):

xdg-open "/home/sashoalm/Has Spaces.txt"
xdg-open file:///home/sashoalm/NoSpaces.txt

Ancak bu başarısız olacak:

xdg-open file:///home/sashoalm/Has%20Spaces.txt

Düzenleme: Bu benim xdg-utils sürümü

 sashoalm@aspire:~$ apt-cache policy xdg-utils
xdg-utils:
  Installed: 1.1.0~rc1+git20111210-6+deb7u1
  Candidate: 1.1.0~rc1+git20111210-6+deb7u1
  Version table:
 *** 1.1.0~rc1+git20111210-6+deb7u1 0
        500 http://ftp.bg.debian.org/debian/ wheezy/main amd64 Packages
        100 /var/lib/dpkg/status

Düzenleme 2: Bu iz:

sashoalm@aspire:~$ bash -x xdg-open file:///home/sashoalm/Has%20Spaces.txt 
+ check_common_commands file:///home/sashoalm/Has%20Spaces.txt
+ '[' 1 -gt 0 ']'
+ parm=file:///home/sashoalm/Has%20Spaces.txt
+ shift
+ case "$parm" in
+ '[' 0 -gt 0 ']'
+ '[' -z '' ']'
+ unset XDG_UTILS_DEBUG_LEVEL
+ '[' 0 -lt 1 ']'
+ xdg_redirect_output=' > /dev/null 2> /dev/null'
+ '[' xfile:///home/sashoalm/Has%20Spaces.txt '!=' x ']'
+ url=
+ '[' 1 -gt 0 ']'
+ parm=file:///home/sashoalm/Has%20Spaces.txt
+ shift
+ case "$parm" in
+ '[' -n '' ']'
+ url=file:///home/sashoalm/Has%20Spaces.txt
+ '[' 0 -gt 0 ']'
+ '[' -z file:///home/sashoalm/Has%20Spaces.txt ']'
+ detectDE
+ unset GREP_OPTIONS
+ '[' -n LXDE ']'
+ case "${XDG_CURRENT_DESKTOP}" in
+ DE=lxde
+ '[' xlxde = x ']'
+ '[' xlxde = x ']'
+ '[' xlxde = x ']'
+ '[' xlxde = xgnome ']'
+ '[' xlxde = x ']'
+ DEBUG 2 'Selected DE lxde'
+ '[' -z '' ']'
+ return 0
+ '[' x = x ']'
+ BROWSER=www-browser:links2:elinks:links:lynx:w3m
+ '[' -n :0 ']'
+ BROWSER=x-www-browser:firefox:seamonkey:mozilla:epiphany:konqueror:chromium-browser:google-chrome:www-browser:links2:elinks:links:lynx:w3m
+ case "$DE" in
+ open_lxde file:///home/sashoalm/Has%20Spaces.txt
+ echo file:///home/sashoalm/Has%20Spaces.txt
+ grep -q '^file://'
++ echo file:///home/sashoalm/Has%20Spaces.txt
++ sed 's%^file://%%'
+ local file=/home/sashoalm/Has%20Spaces.txt
+ echo /home/sashoalm/Has%20Spaces.txt
+ grep -q '^/'
+ pcmanfm /home/sashoalm/Has%20Spaces.txt
+ '[' 0 -eq 0 ']'
+ exit_success
+ '[' 0 -gt 0 ']'
+ exit 0

Bunu çoğaltamadım. Xdg-utils paketinin hangi sürümünü kullanıyorsunuz? Birlikte alabilirsin apt-cache policy xdg-utils.
jofel

Bunu gerçekten çoğaltamazdım. Benim için bu tamamen aynı paket versiyonuyla çalışıyor. Bir Debian hata raporu doldurmanızı öneririm .
jofel

@jofel xdg-open'in sizin için% 20 (bir alanı kodlayan) URL'lerle çalıştığını mı söylüyorsunuz?
sashoalm

Evet, demek istediğim bu.
jofel

@jofel Yardımı ekledim, eğer yardımı varsa.
sashoalm

Yanıtlar:


2

Bir LXDE masaüstü ortamı kullanıyorsanız, xdg-open, file://URL'leri pcmanfmprogramla birlikte açar . Bu şeritler file://URL parçasını ve aramaların pcmanfmPCManFM argümanlar değil, URL'ler şekilde yalnızca normal yolları destekler beri, kalan kısmı ile.

xdg-openbaşka herhangi bir değişiklik yapmaz, bu nedenle %20bir boşluğa çevrilmez. Bu bir hatadır (bunun için Debian'da bir hata raporu açmaktan çekinmeyin). Bir düzeltme aşağıda açıklanmıştır.

Diğer masaüstü ortamlarında, açık programlar doğru dosyayı destekler: // URL'ler.


Geçici Çözüm : Bazı ortam değişkenlerini ayarlayın; böylece xdg-open, gereken tüm değişiklikleri destekleyen genel open handler'ı kullanır:

XDG_CURRENT_DESKTOP= DESKTOP_SESSION= xdg-open "/home/sashoalm/Has Spaces.txt"

Hata düzeltme: xdg-open komut dosyasını / usr / local / bin dizinine kopyalayın (böylece sisteminizi yükselterek yazılmayacak) ve satırı ekleyin.

file="$(printf "$(echo "$file" | sed -e 's@%\([a-f0-9A-F]\{2\}\)@\\x\1@g')")"

# handle relative pathsYorum satırının üstündeki xdg-open komut dosyasına .

Hata 2:

Veya sadece detectDE()şununla değiştir :

detectDE()
{
    DE=gnome
}

1
Aslında sadece değiştirilen detectDE()ile detectDE() { DE=gnome }ve şimdi her şey yeniden çalışıyor - mıknatıs bağlantılar (onlar da çalıştığınız değil) dahil.
sashoalm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.