Открыть файл с помощью пользовательской команды: как указать файл в строке cmd?

Я только что нашел параметр в gconf-редакторе, который позволит вам установить пусковую установку только на ваш основной рабочий стол: /apps/compiz-1/plugins/unityshell/screen0/options/num_launchers. Если вы установите значение 1, пусковая установка Unity будет отображаться только на основном рабочем столе. Если вы установите его на 0, пусковая установка будет доступна на всех рабочих столах.

В дополнение к этой настройке я также устанавливаю давление преодоления (/apps/compiz-1/plugins/unityshell/screen0/options/overcom_pressure=1) и скорость останова (/apps/compiz-1/plugins/unityshell/screen0/options/stop_velocity=20).

1
задан 13 April 2017 в 15:24

5 ответов

Если сценарий работает, тогда вы должны принять этот ответ, даже если он был вашим.

Что работало здесь для других приложений, поскольку пользовательская команда была близка к тому, что вы пытались, некоторые небольшие отличия.

wine "C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe" Z:%f

Ссылка на фотошоп с добавлением. информацию об изменении отображаемого имени при желании для использования правой кнопкой мыши - http://ubuntuforums.org/showpost.php?p=9193687&postcount=9

2
ответ дан 25 May 2018 в 12:35

Если эта программа уже установлена ​​с использованием вина, то я не думаю, что ей нужен абсолютный путь. Я думаю, что только

 wine pdfxcview filename

откроет файл.

Хорошо, мой ответ глуп. Что на самом деле вы пытаетесь сделать? вы пытаетесь исправить ошибку запуска программы?

0
ответ дан 25 May 2018 в 12:35
  • 1
    Нет, у меня не было проблем с запуском программы просмотра PDF. Наверное, я не четко сформулировал вопрос (сейчас я пересмотрел вопрос). Я хочу знать, как указать входные файлы в «пользовательской команде». S.T. когда я дважды щелкнул файл, он будет открыт pdfxcview. – HongboZhu 18 April 2012 в 16:51

Я понимаю, что это старый вопрос, но я хочу поделиться своим решением, которое я понял после того, как начал использовать PDFXchangeEditor (преемник PDFXchangeViewer), а затем столкнулся с проблемой, чтобы он принимал несколько входных файлов из хоста os. Прежде всего, принятый ответ и все другие ответы, которые были опубликованы, предполагают, что программа будет обрабатывать только один файл. Вы можете на самом деле бросить несколько файловых аргументов сразу, и он откроет их все отлично, с небольшим трюком.

Трюк использует расширение кода %F в поле Exec в приложении .desktop приложения. launcher и препроводить все расширенные локальные файловые args в поле с помощью Z:, которые могут быть выполнены со следующим скриптом

Вызвать его wine-env. Это происходит в /usr/local/bin и не забудьте дать ему chmod +x

#!/bin/bash

allargs=("$@")

fixpath=0
for idx in "${!allargs[@]}"; do
    arg="${allargs[$idx]}"

    if [[ $fixpath -eq 0 ]]; then
        # fix file paths only after the first executable is found in arg
        if [[ "$arg" == *.exe ]]; then
            fixpath=1
        fi
        continue
    elif [[ $fixpath -eq 1 ]]; then
        # if arg starts with '/' and it's a path that exists on host
        # precede the path with drive 'Z:'
        if [[ "${arg:0:1}" == '/' && -e "$arg" ]]; then
            allargs[$idx]="Z:$arg"
        fi
    fi
done

exec env "${allargs[@]}"

И для файла appdesktop приложения, назовите его pdfxce.desktop и поместите его в ~/.local/share/applications/, и его содержимое должно выглядеть например

[Desktop Entry]
Name=PDF-XChange Editor
Type=Application
Terminal=false
Exec=wine-env WINEDEBUG=-all WINEPREFIX=/home/<user>/.local/share/bottles/pdfxce wine PDFXEdit.exe %F
Icon=/home/<user>/.local/share/icons/bottles/pdfxce-pdfxedit.png
Path=/home/<user>/.local/share/bottles/pdfxce/drive_c/Program Files/Tracker Software/PDF Editor
StartupNotify=true
StartupWMClass=PDFXEdit.exe

Вам нужно изменить часть с вашим собственным именем пользователя. Я держу все свои винды в папке под названием «бутылки». У вас может быть свой собственный способ организовать ваши винные исправления, поэтому измените все части, содержащие «бутылки» соответственно

И на последнем шаге назначьте файлы PDF в приложение в соответствии с нормальным (щелкните правой кнопкой мыши по pdf -> -> Open With)

Ссылка: спецификация рабочего стола Freedesktop

0
ответ дан 25 May 2018 в 12:35

Я воспользовался этой ссылкой, чтобы установить 32-битный просмотрщик PDF XChange в Ubuntu 64 Bit 14.04. Затем ссылка показывает скрипт, чтобы открыть просмотрщик PDF Xchange с именем файла в качестве аргумента. Я сделал этот скрипт и сохранил его в /bin

Затем я редактировал ~/.local/share/applications/wine-extension-pdf.desktop следующим образом:

[Desktop Entry]
Type=Application
Name=PDF-XChangeViewer
MimeType=application/pdf;
Exec=PDFXCview %f
NoDisplay=true
StartupNotify=true

Мой скрипт был назван PDFXCview

0
ответ дан 25 May 2018 в 12:35

Это основано на превосходном скрипте @ Flint.

Сначала я попробовал переменную "Z:"%U в конце поля рабочего файла Exec= для программ Wine. Он работал нормально, пока я не открыл программу без указанного файла. Винные программы жаловались на отсутствие файла, потому что строка Exec= указывала на диск Z: это явно не файл, а абсолютный путь к файлу. File not found: Z: или похожие сообщения, появившиеся в программе Wine. Бит раздражает.

Проблема с "Z:"%U заключается в том, что она не является условной переменной, если там используется Z:. Тем не менее, Wine абсолютно требует Z: потому что в противном случае он не может найти правильные пути к файлу.

Ваш скрипт делает всю вещь "Z:"%U условной. Скрипт выполняет задание точно так, как я хотел.

Однако сценарий должен учитывать все файлы exe, написанные в верхнем регистре. К настоящему времени он не может указывать файлы MS Office (docx, pptx ...) на MS Office 2010, потому что все исполняемые программы исполняются как WINWORD.EXE или POWERPNT.EXE. Конечно, исполняемые файлы можно было переименовать в нижнем регистре, но я предпочитаю более универсальное решение, вместо того чтобы переименовывать отдельные exe для каждой программы.

Грязное и универсальное решение заключается в изменении кода сценария, например:

#!/bin/bash

allargs=("$@")

fixpath=0
for idx in "${!allargs[@]}"; do
    arg="${allargs[$idx]}"

    if [[ $fixpath -eq 0 ]]; then
        # fix file paths only after the first executable is found in arg
        if [[ "$arg" == *.exe ]]; then
            fixpath=1
        fi
        if [[ "$arg" == *.EXE ]]; then
            fixpath=1
        fi
        continue
    elif [[ $fixpath -eq 1 ]]; then
        # if arg starts with '/' and it's a path that exists on host
        # precede the path with drive 'Z:'
        if [[ "${arg:0:1}" == '/' && -e "$arg" ]]; then
            allargs[$idx]="z:${arg//\//\\}"
        fi
    fi
done

exec env "${allargs[@]}"

Оператор or по какой-то причине не работал. Я уверен, что есть более элегантный способ добиться такого же результата.

0
ответ дан 25 May 2018 в 12:35

Другие вопросы по тегам:

Похожие вопросы: