LINUX.ORG.RU

Оболочка для MuPDF?

 


1

3

Всем привет! Начал пользоваться для просмотра pdf прогой MuPDF. Работает крайне быстро и достаточно удобно, если запомнить горячие клавиши. К тому же потребляет оч мало памяти. Подумал, что наверное можно сделать какую-нибудь оболочку, внутри которой будет само окно MuPDF, а все горячие клавиши вынесены в виде кнопок. Я не программист, но время от времени что-нибудь изучаю против плесени мозга. Для себя максимум, что делаю это bash скрипты, для упрощения работы. Изучал немного scheme, racket и python. Вопрос - на чем лучше это реализовать максимально просто? (только не java) Никакой острой нужды в такой работе нет, just for fun. (Система Linux Mint Mate 20). Под виндой это реализовано в виде Sumatra (как пишут в вики), на линухе ничего не нашел.

Sumatra PDF просто великолепен. Было бы круто если бы кто-нибудь его портировал на линукс. Попробуй на QML сделать и надо чтобы выделение текста работало так же хорошо как в Sumatra.

fulmar_lor ()
Последнее исправление: fulmar_lor (всего исправлений: 1)
Ответ на: комментарий от anonymous

Зачем тебе «кнопки», если есть «горячие клавиши»?

А я бы не стал противопоставлять одно другому. Возможно, лучший вариант — кнопки с подписанными на ними хоткеями. Горячие клавиши — это замечательно, когда ты их помнишь. :)

hobbit ★★★★★ ()

Привет! Linux идет по пути деградации, и уже не может даже воспроизвести какой то базовый, смешной функционал из Windows. Раньше был XEmbed, сейчас нет ничего, если рассматривать современные DE с Wayland. Так что это просто невозможно.

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

Ну что, hobbit нормально написал?

MOPKOBKA ★★ ()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: llpp от anonymous

Чего-то я не въезжаю. В отличие от mupdf появилась только прокрутка, позволяющая непрерывно двигать, а не постранично. Но памяти кушает намного больше. lpp - 274mb, mupdf - 30mb для одного и того же файла. В 9 раз однако больше, а кнопок нет, только прокрутка. «Маловато будет»

rustamych ★★★ ()
Ответ на: комментарий от minda

Установил. А как этим чудом пользоваться то? Какая то вещь в себе.

rustamych ★★★ ()
Ответ на: комментарий от grem

Дык, висит, надоела уже. Часть помню, часть нет. Вот и подумал соорудить, но похоже не осилю.

rustamych ★★★ ()
Ответ на: комментарий от minda

Запустил. Дык, кнопок никаких нет, прокрутка только, а кушает в два раза больше, чем mupdf. Не вижу смысла в использовании. Я уже привык к mupdf.

rustamych ★★★ ()
Ответ на: комментарий от hobbit

Хорошая мысль. У меня же стоит fvwm и там много своих горячих клавиш, которые я уже запомнил, после долгого их использования. С mupdf получается закон Архимеда - Сколько вперли, столько же и выперло :)

rustamych ★★★ ()
Ответ на: комментарий от rustamych

Самый простой способ — нарисовать отдельное окно с «кнопочками», а при помощи xdotool передавать клавосочетания в mupdf.

Но это - чушь! Правильней клавосочетания выучить.

Что до внедрения целого приложения как части другого, это нереально нигде! Так как по сути, тебе придется сделать «WM внутри WM», и в этом своем WM запускать конкретное приложение.

Вон, нарисуй дополнительную линейку меню (как dmenu_run), да радуйся!

anonymous ()
Ответ на: комментарий от rustamych

Там же основная куча хоткеев совершенно аналогична стандартным пейджерам — вроде того же less! Неужто ты не можешь запомнить эти несчастные сочетания для поиска/перехода?

anonymous ()
Ответ на: комментарий от anonymous

Я же и говорю, что я не программист. «внедрения целого приложения как части другого, это нереально нигде!» вот это уже ответ, хотя и не проверяемый. С dmenu_run поковыряюсь. Спасибо, не знал. Клавиши я более менее запомнил, хотелось что-нить поковырять и мб соорудить.

rustamych ★★★ ()
Ответ на: комментарий от anonymous

Нет, оно использует mupdf. mupdf - это движок для парсинга и рендеринга, грубо говоря, библиотека.

fulmar_lor ()
Ответ на: комментарий от hobbit

когда ты их помнишь.

У muPDF vim-раскладка. Для всех трёх с половиной горячих клавиш.

лучший вариант — кнопки с подписанными на ними хоткеями

Это когда в системе есть поддержка графического интерфейса, предусматривающая в т.ч. эти самые кнопки.

LamerOk ★★★★★ ()
Ответ на: комментарий от GP

Что только люди не придумают, лишь бы не использовать Adobe Reader

  1. Что, поддержку Linux уже вернули?

  2. Даже в Windows многие люди считают программу от Adobe монструозной и используют альтернативы вроде Foxit. Можешь спросить у них, зачем они это делают.

hobbit ★★★★★ ()
Ответ на: комментарий от hobbit

Все верно. Я держу Adobe Reader 9ю deb версию только по одной причине. Перед выступлением с презентациями, я всегда проверяю как это будет работать на акробате, потому что в 99% случаев в аудитории будет комп с акробатом. Иногда акробат не кажет то, что я сделал в презентации (типа кнопок перемещения или видео) в латехе. Но для повседневной работы он неудобен, тяжел и неповоротлив. Вы верно подметили, многие мои знакомые на винде им не пользуются. Пользовался FoxitReder. Отлично сделали под линуксом. Но сменил монитор на 4К и работать стало невозможно, все дико мелко и без возможности увеличить. Писал разрабам, обещают исправить, но ни чего не делают. Для редактирования и заметок пользуюсь masterpdfrditor5 или okular. Для обычного чтения имхо, что нет ничего лучше mupdf. Я был поражен насколько он шустрый и легкий. Окно выскакивает быстрее чем кнопку отпустишь.

rustamych ★★★ ()
Ответ на: комментарий от rustamych

А как этим пользоваться? Пару слов.

по второй ссылке - весь скрипт программы для просмотра pdf :-)

там где строчки с bind… можете понадобавлять своих любимых биндингов. Или забацать меню :-) сделать для себя

а в первой ссылке - собственно пакет tclmupdf - там есть download - если лень компилять, то выбрать архитектуру и скопировать в любой подкаталог библиотеки tcl. Например tclmupdf.

«как пройти в библиотеку» зависит от криворукости мантейнеров :-) /usr/share/lib/tcl или /usr/lib/tcl или в /opt.

MKuznetsov ★★★★★ ()
Ответ на: комментарий от rustamych

Запустил. Дык, кнопок никаких нет, прокрутка только, а кушает в два раза больше, чем mupdf. Не вижу смысла в использовании. Я уже привык к mupdf.

нуу, zathura еще и djvu умеет, и vim-like управление, и закладки, и еще разные вкусности. Я только им и пользуюсь.

anonymous ()
Ответ на: комментарий от MKuznetsov

круто!

я даже не подумал, что может быть готовый биндинг, собирался преложить автору xembed на tkxext.

а как нынче принято паковать программы на тикле? starkit?

anonymous ()
Ответ на: комментарий от anonymous

а как нынче принято паковать программы на тикле? starkit?

на вкус и цвет. Разве что принято пакеты отдавать пакетами(каталогами) с pkgIndex.

я свои скрипты переношу/отдаю как просто каталог со скриптами, некоторыми зависимостями и прочим(картинками,данными etc) и дополняю «portable» (tcl/tk c батарейками и в одном файле) отсюда http://www.androwish.org/download/index.html .

Нормально везде работает. И даже в Kiosk-mode, без X во фрейм-буфере

MKuznetsov ★★★★★ ()
Последнее исправление: MKuznetsov (всего исправлений: 1)

питон. тем более что его линухи вроде по умолчанию ставят

alysnix ★★ ()
Ответ на: комментарий от MKuznetsov

Спасибо, понятнее. Запускаю скрипт и он пишет can’t find package mupdf. mupdf я компилил сам и выполняемый файл mupdf-x11. Исправил на mupdf-x11, все равно can’t find package mupdf-x11. чяднт?

rustamych ★★★ ()
Ответ на: комментарий от MKuznetsov

В моей системе библиотека здесь /usr/lib/tcltk/. Исправил и получил гораздо больше букоф:

bad option "-message": must be -defaultextension, -filetypes, -initialdir, -initialfile, -multiple, -parent, -title, or -typevariable
    while executing
"tclParseConfigSpec ::tk::dialog::file::$dataName $specs "" $argList"
    (procedure "Config" line 48)
    invoked from within
"Config $dataName $type $args"
    (procedure "::tk::dialog::file::" line 7)
    invoked from within
"::tk::dialog::file:: open {*}$args"
    (procedure "tk_getOpenFile" line 5)
    invoked from within
"tk_getOpenFile -filetypes {{Pdf .pdf}} \
  -message "Choose a Pdf ..""
    invoked from within
"set pdfFileName [tk_getOpenFile -filetypes {{Pdf .pdf}} \
  -message "Choose a Pdf .."]"
    (file "minuMu" line 37)

rustamych ★★★ ()
Ответ на: комментарий от rustamych

что мешает запустить ?

вы вроде бы уже прошли этот квест :-) исправили феньки от mac`а: MuPDF пишется именно так, соблюдая регистр и опцию -message «xx» просто удалить.

всё работает. Единственное не хватает zoom. Он в оригинальном скрипте константой, а стоит чтобы переменная и на хот-кей её изменения.

package require MuPDF

 # just a bare GUI - a label containing an image "imagePage"
image create photo imagePage
label .page -image imagePage -padx 5 -pady 5
pack .page -expand 1 -fill both
label .info -text "Press Up / Down keys" -relief groove
pack .info -fill x -padx 2 -pady 2

bind .page <Key-Up> {showPage $pdf [prevPage]}
bind .page <Key-Down> {showPage $pdf [nextPage]}


proc showPage {pdf n} {
        set page [$pdf getpage $n]
        imagePage blank  ;# just in case the new page is smaller than previous
        $page saveImage imagePage -zoom 1.0
}

proc nextPage {} {
        global gApp
        if { $gApp(currpage) < $gApp(lastpage) } {
                incr gApp(currpage)
        }
        return $gApp(currpage)        
}
proc prevPage {} {
        global gApp
        if { $gApp(currpage) > 0 } {
                incr gApp(currpage) -1
        }
        return $gApp(currpage)        
}

 # ---

set pdfFileName [tk_getOpenFile -filetypes {{Pdf .pdf}} ]

set pdf [mupdf::open $pdfFileName]

set gApp(currpage) 0
set gApp(lastpage) [expr [$pdf npages]-1]

showPage $pdf 0
focus .page
MKuznetsov ★★★★★ ()
Ответ на: комментарий от rustamych

перед (илли вместо него) focus .page

добавь строчку

[code] wm deiconify . [/code]

или после строчек с bind [code] update [/code]

или и то и другое сразу (лечат оба)

сам не понял что за глюк…В ночи лень разбираться что там такое, отчего так. Какой-то хитрый секс между диалоговым окном, топлевелом и оконным менеджером.

диалоговое окно вызвали когда топлевел ещё не замаплен. И Tk(или wm) счёл что основное окно не активно и биндинги не работали пока окна не переключишь :-)

MKuznetsov ★★★★★ ()
Ответ на: комментарий от rustamych

на мой взгляд - стоит. По быстрому набрасывать GUI или мелкий софт.

благо что он простой как 3 копейки. На порядки проще питона или руби

MKuznetsov ★★★★★ ()
Ответ на: комментарий от rustamych

можно убирать скрипты внутрь бинарника. Вместе со всеми зависимостями. Упомянутый выше starpack. Или пачку скриптов/каталогов в один модуль

но по мне так это лишнее телодвижение, или только в финале «прятать лютый копирайт» - если на целевой системе есть tcl с инфраструктурой, то зачем городить огород..

#!/bin/tclsh в шебанг и +x в аттрибуты. И оно всё само запустится

MKuznetsov ★★★★★ ()
Ответ на: комментарий от MKuznetsov

Плюс ко всему вышесказанному, мне неизвестны простые способы кроссплатформенно посадить программу на псевдотерминал, кроме expect или биндинги к нему же.

ABW ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.