Руководство по допиливанию для новичка- от новичка

Автор el guahiro, июля 26, 2015, 20:02:01

« предыдущая - следующая »

xub

Наглядный пример проблемы из-за длины имени файла...
2021 Sep 09; 03:45 PM
При ответах прошу учитывать возможную существенную разницу во времени, мой часовой пояс (GMT-4) Eastern Daylight Time...

el guahiro

сентября 12, 2021, 15:37:22 #1771 Последнее редактирование: сентября 14, 2021, 14:48:36 от el guahiro
Иногда при экспорте чертежей из Autocad в PDF фрагменты текста в чертеже заключаются в поля - программа превращает текст SHX в комментарии, что не позволяет использовать функцию поиска по чертежам в стандартных программах просмотра PDF под Linux.
Посмотреть и даже скопироваить эти аннотации можно в llpp или MasterPDFEdiror, в Windows - в Acrobat Reader (под Linux у меня  Acrobat Reader не установлен, но скорее всего, и в нём можно посмотреть).
Пришла мне вчера куча размеченных таким образом чертежей. Для быстрого просмотра и рецензирования проектов я использую функцию поиска по файлам, зная где бывают основные ошибки и задавая поиск по ключевым словам. Но сейчас не тут-то было! Поиск по тексту, опирающийся на стандартные утилиты, -  аннотациями не работает. Не беда. Создаю (ПКМ>создать документ>пустой файл) файл скрипта под названием pdf_annotaion_extractor.py такого содержания:
#from https://onedev.net/post/615
import poppler
import sys
import urllib
import os

def main():
  input_filename = sys.argv[1]
  # http://blog.hartwork.org/?p=612
  document = poppler.document_new_from_file('file://%s' % \
    urllib.pathname2url(os.path.abspath(input_filename)), None)
  n_pages = document.get_n_pages()
  all_annots = 0

  for i in range(n_pages):
        page = document.get_page(i)
        annot_mappings = page.get_annot_mapping ()
        num_annots = len(annot_mappings)
        if num_annots > 0:
            for annot_mapping in annot_mappings:
                if  annot_mapping.annot.get_annot_type().value_name != 'POPPLER_ANNOT_LINK':
                    all_annots += 1
                    print 'page: {0:3}, {1:10}, type: {2:10}, content: {3}'.format(i+1, annot_mapping.annot.get_modified(), annot_mapping.annot.get_annot_type().value_nick, annot_mapping.annot.get_contents())

  if all_annots > 0:
    print str(all_annots) + " annotation(s) found"
  else:
    print "no annotations found"

if __name__ == "__main__":
    main()
Скрипт опирается на стандартные утилиты, которые, вероятно, у вас уже есть в системе. Посмотреть зависимости (что доставить) можно здесь https://onedev.net/post/615.
Вторым шагом правлю скрипт предпросмотра  файлов в терминале, с названием view3.sh, приведя его к такому виду:
#!/bin/bash
IFS=$'\#'
filename=$1

if [ "$(file -b --mime-type $1 | sed 's|.*/||')" = "html" ]; then
lynx -stdin -dump < $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "docx" ]; then
docx2txt < $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "odt" -o "${filename##*.}" = "ods" -o "${filename##*.}" = "odp" ]; then
odt2txt --width=80 $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "doc" ]; then
antiword -f -w 0 $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "rtf" -o "${filename##*.}" = "ppt" ]; then
catdoc $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "xls" ]; then
xls2csv $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "xlsx" ]; then
xlsx2csv $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "png" -o "${filename##*.}" = "jpg" ]; then
w3m $filename
fi

if [ "${filename##*.}" = "html" ]; then
html2text $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "$(file -b --mime-type $1 |sed 's%.*/%%' )" = "pdf" ]; then
pdftotext -q -layout $filename - |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

#search in annotations
if [ "$(file -b --mime-type $1 |sed 's%.*/%%' )" = "pdf" ]; then
python ~/.local/bin/pdf_annotaion_extractor.py $filename| sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "$(file -b --mime-type $1 | sed 's|/.*||')" = "text" ]; then
cat $filename |less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

if [ "${filename##*.}" = "djvu" ]; then
djvutxt $filename|less | sed '/\S/!d; s/  / /g;s/  / /g;s/  / /g; s/,,/ /g'
fi

Про этот скрипт я уже писал на этом форуме здесь, и здесь,сейчас только добавил поиск по аннотациям в PDF  и автоматическое определение mime типа файла для PDF, независимо от регистра расширения файла, большого или маленького.

После этого действия ПКМ просмотра и поиска в файлах, ранее описанные здесь, заработали.

Как видите, всё просто.
Искренне ваш, el
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X

xub

Приветствую!
Цитата: el guahiro от сентября 12, 2021, 15:37:22if [ "${filename##*.}" = "djvu" ]; then

А djvu это на всякий случай чтобы и для него работало? Я правильно понял?

2021 Sep 12; 05:45 AM
При ответах прошу учитывать возможную существенную разницу во времени, мой часовой пояс (GMT-4) Eastern Daylight Time...

qqq

Цитата: xub от сентября 10, 2021, 01:45:36Наглядный пример проблемы из-за длины имени файла...

Вариант, который есть  в видео, которое прикрепил выше el guahiro, вполне рабочий. Я почему-то про него не знал, линукс видать отучает от пользования граф. инерфейсом)))

xub

Приветствую!
Цитата: qqq от сентября 13, 2021, 00:00:06отучает от пользования граф. инерфейсом

Если Вы про rofi, то по-моему это тоже не совсем CLI 😇...

Это запуск с параметром :
rofi -combi-modi window,drun -show combi -modi combi

Если в самом верху после combi: ввести положим draw то можно будет либо перейти к открытом файлу draw либо запустить эту программу.

После столов с программами идут последний раз открываемые программы что-то типа favorit получается.

Главное избежать фанатизма только GUI или только CLI! Действовать по обстоятельствам используя одно не забывать про другое! 😃

2021 Sep 12; 03:29 PM
При ответах прошу учитывать возможную существенную разницу во времени, мой часовой пояс (GMT-4) Eastern Daylight Time...

el guahiro

Есть такой просмотрщик для PDF, называется Zathura.
С помощью набора плагинов Zathura поддерживает форматы PostScript, PDF, DjVu, Comic Book Archive и EPUB. Отлично подходит для слабых компов, можно запустить на планшете, есть даже порты под macOS i ios, для Android.
Поскольку Zathura работает на mupdf, то PDF он рендерит очень быстро и, на удивление, лучше (чётче) самого mupdf. Попались мне тут слепые чертежи, конвертировать их, чтоб сделать почётче, не хотелось. Открыл файл в Zathura - он хорошо рендерит именно слепые чертежи.
Но листать файл в Zathura для человека, который любит GUI, а не хоткеи - боль, т.к. двигать мышкой огромные чертежи 2хA0, склеенные в многостраничный файл - то ещё удовольствие... Не беда.
Настраиваю боковой скроллбар в Zathura. В терминале:
mkdir ~/.config/zathura/
touch zathurarc
Открываю этот файл например так:
mousepad  ~/.config/zathura/zathurarcЗаписываю туда:
set show-scrollbars trueЗакрываю с сохранением. Всё! в Zathura появился боковой скроллбар, листать PDF файлы стало удобней.
Для интересующихся можно поэкспериментировать с видом и поведением Zathura, записав в zathurarc что-нибудь типа:
# zathurarc

# settings
set window-height 1024
set window-width 768
set adjust-open width
set show-scrollbars true
set first-page-column 2
set window-title-basename true
# set database sqlite
set recolor-keephue
set selection-clipboard clipboard


# key bindings
# map <C-[> abort # Still doesn't work :(
map [normal]     <F11> toggle_fullscreen
map [fullscreen] <F11> toggle_fullscreen
map [normal]     <C-l> reload
map [fullscreen] <C-l> reload

map [normal]     e scroll down
map [fullscreen] e scroll down
map [normal]     <C-e> scroll down
map [fullscreen] <C-e> scroll down
map [normal]     y scroll up
map [fullscreen] y scroll up
map [normal]     <C-y> scroll up
map [fullscreen] <C-y> scroll up
map [normal]     R rotate rotate-ccw
map [fullscreen] R rotate rotate-ccw

map [normal]     <PageUp>   navigate previous
map [fullscreen] <PageUp>   navigate previous
map [normal]     <PageDown> navigate next
map [fullscreen] <PageDown> navigate next

map [normal]     <A-1> set "first-page-column 1:1"
map [fullscreen] <A-1> set "first-page-column 1:1"
map [normal]     <A-2> set "first-page-column 1:2"
map [fullscreen] <A-2> set "first-page-column 1:2"

# Why are these only defined for normal mode by default?
map [fullscreen] a adjust_window best-fit
map [fullscreen] s adjust_window width
map [fullscreen] f follow
map [fullscreen] d toggle_page_mode 2
map [fullscreen] <Tab> toggle_index
map [fullscreen] j scroll down
map [fullscreen] k scroll up
map [fullscreen] <C-d> scroll half-down
map [fullscreen] <C-u> scroll half-up
map [fullscreen] <C-o> jumplist backward
map [fullscreen] <C-i> jumplist forward

map [index] q quit

# colors
set recolor-darkcolor  "#FFFFFF"
set recolor-lightcolor "#333333"
set statusbar-fg "#000000"
set statusbar-bg "#C2BFA5"
set inputbar-fg "#FFFFFF"
set inputbar-bg "#333333"
set completion-highlight-fg "#F0E68C"
set completion-highlight-bg "#6B8E23"
# set highlight-color "#CD853F"
# set highlight-active-color "#F0E68C"
set notification-fg "#FFFFFF"
set notification-bg "#333333"
Цветовая схема настраивается на раз-два, поведение тоже. Можно запилить вполне себе гламурный вьювер.

Надеюсь, кому-то пригодится.
Искренне ваш, el
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X

el guahiro

сентября 19, 2021, 17:34:41 #1776 Последнее редактирование: сентября 20, 2021, 11:27:51 от el guahiro
Лайфхак, как набрать спецсимвол в текстовом редакторе Libreoffice.
Пишу описание к проекту. Уклон сейчас в строительстве в РФ стали считать не в процентах, а в промилле. Окуда его взять, если не помнишь символ Юникода и не умеешь его вводить?
Решений два:
1. Набираешь в Гугле или Яндексе : "значок промилле", потом копируешь его из всплывающего ответа. Годится как быстрое решение, когда это надо сделать один раз.
2. Чтобы иметь возможность вставлять значок в дальнейшем,
2.1. Набираешь в Гугле или Яндексе : "промилле по английски", копируешь  "per mill"
2.2. Открываешь Libreoffice>меню Вставка>вкладка Специальные символы>в окно Поиск вставляешь per mill>снизу справа жмешь Добавить в избранное>значок добавляется в иконостас избранных значков снизу слева.
Таким образом можно добавить &, Ø, ≈, Ω и т. д., в сумме избранных 16 штук, чтобы добавить значок, надо удалить что-то из предустановленных.
В дальнейшем ты этот значок всегда найдёшь.

Думаю, кому-то пригодится.
Искренне ваш, el
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X

denkin

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

el guahiro

Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X

denkin

ПКМ на любой панели инструментов в LO -> Настроить панель инструментов -> Вкладка Клавиатура
Найти команду, ввести хоткей, присвоить его команде

xub

Приветствую всех!

Мне тоже приходилось использовать символы Unicode... Я склонился, как мне кажется, к более глобальному решению, мне это показалось проще...

Речь идёт о дополнительной раскладке или как там её называют «третий ряд»...



# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="fr,us,tr,gr,ua,ru"
XKBVARIANT=""
XKBOPTIONS="misc:typo,lv3:menu_switch,grp:ctrls_toggle,grp_led:scroll,terminate:ctrl_alt_bksp,numpad:microsoft"

BACKSPACE="guess"

Все настройки в этом файле, так мне тоже проще показалось...

При таких настройках будут доступны следующие символы при удержании клавиши MENU & Shift MENU из специально составленного файла.


Обычно используется только два языка. В данном случае:
setxkbmap -layout 'us,ru' -option 'grp:ctrls_toggle'
А переключает языки стронний низкоуновневый переключатель Shift'ами на каждом отдельный язык.

Файлы typo для третьтего ряда можно сделать разные у меня тоже несколько, помещаются они в
/usr/share/X11/xkb/symbols инструкций в интернете и готовых файлов более чем достаточно...

Промилле ‰ там где и % только через MENU...

2021 Sep 19; 01:43 PM; Oakville, ON, Canada.
При ответах прошу учитывать возможную существенную разницу во времени, мой часовой пояс (GMT-4) Eastern Daylight Time...

el guahiro

Цитата: xub от сентября 19, 2021, 23:43:52Я склонился, как мне кажется, к более глобальному решению
Анонс. Придумал, как сделать кнопку с выпадающим списком символов, типа плагина к xfce4-panel 4.12.2. Пилить час-полтора, посвободней буду, напишу и здесь опубликую. Это будет более GUI-шно и для тех, кто набирает много спецсимволов, наверное, более удобно.
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X

el guahiro

сентября 26, 2021, 12:39:02 #1782 Последнее редактирование: октября 09, 2021, 00:46:50 от el guahiro
Для дизайнеров
ПКМ Thunar "Присвоить файлу шрифта родовое имя", на команду:
exiftool -m -s '-filename<${PostScriptFontName}.ttf' %NУсловие появления: Другие
Маска: *.ttf;*.TTF
Должен быть установлен exiftool:
sudo apt install exiftoolДля файлов otf аналогично
Не в качестве рекламы, а себе в заметки - здесь хорошие кириллические рукописные шрифты. Купил бы у них пару-тройку, но хочется сказать админам hfont :"Ребята, запилите демонстрационную возможность набрать свой фрагмент текста предлагаемым к продаже шифтом, т.к. иногда буквы не отличить от рукописных, а цифры смотрятся неорганично, и наоборот".

Икренне ваш el , из леса с грибами
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X

el guahiro

Даже если ты обладатель террабайтного диска, а скорее всего это не так, т.к. наиболее "вкусные" по цене версии ноутбуков имеют память SSD 120- 250 Gb, то рано или поздно приходит мысль использовать память получше, удалив дубликаты.
Задача выдаётся быть тяжёлой, просканировать пару сотен гигабайт - не шутка. Но в linux всё просто!
Поможет нам утилита rdfind. Ставится она из репозитория, например так:
sudo apt inatall rdfindИли можно поставить через Synaptic.
Домашняя страница утилиты здесь.
Благодаря очень остроумному методу поиска и сравнения дубликатов, утилита работает в 2-3 раза быстрее аналогов (fdupes, fslint или duff). Все их я тестировал, rdfind лучший, это чувствуется сразу, работает молниеносно.
Сначала смотрим дубликаты (команду запускаем в интересующей нас директории):
rdfind -makeresultsfile true ./Программа делает анализ директории, создаёт файл results.txt и выводит его содержимое в терминал. Мы видим количество дубликатов и сколько места можно сэкономить.
Потом заменяем дубликаты на симлинки:
rdfind -makesymlinks true ./Или заменяем дубликаты на хардлинки:
rdfind -makehardlinks true ./
Надеюсь, кому-то пригодится.
Искренне ваш, el
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X

el guahiro

октября 09, 2021, 01:36:58 #1784 Последнее редактирование: октября 10, 2021, 12:32:48 от el guahiro
#Для Преподавателей, юристов, адвокатов, строителей и студентов
Последние пару недель моя работа напоминала мне древний анекдот, как прибегает бравый ординарец к полковнику и рапортует:
- Товарищ полковник, Ваше приказание выполнено!
Полковник:
- Так я ничего не приказывал.
Ординарец:
- А я ничего и не делал.

Даю замечания по проекту, через день получаю с письмом новую, исправленную верию проекта. Проект по 4 объектам, 8 разделов, в каждом разделе по 30-40 листов текста и чертежей.
Начинаю изучать и выясняется, что фраза: Замечание принято, в проект внесены исправления" - в 80% случаев обозначает: "Сейчас мы тебе отправим всё назад в надежде, что устанешь проверять".
Отправить проектировщиков в известном всем направлении, т.е послать их на ..., не судьба - СМР надо делать в этом году, то есть проект надо оперативно дорабатывать до готовности.
После второго раунда проверки проекта понимаю, что меня пытаются измотать и без технологического превосходства хитрецов не победить, т.е нужен инструмент быстрого сравнения версий файлов PDF для выявления в них изменений (или их отсутствия).
Тут меня выручает утилита diff-pdf - инструмент для визуального сравнения двух PDF-файлов. Хочу сказать, что в xUbunntu есть неплохая утилита diffpdf которая позволяет в бесплатной версии (каковая представлена в репах xUbuntu) визуально сравнить небольшие файлы с небольшим количеством страниц. Можно также самостоятельно запилить скрипт PdfDiff.sh для  визуального сравнения двух PDF:
#!/bin/bash
#from https://gist.github.com/timabell/9616807b2fe3fa60f234
# Compare two PDF files.
# Dependencies:
#  - pdfinfo (xpdf)
#  - pdfjam  (texlive-extra-utils)
#  - diffpdf
#

MAX_HEIGHT=15840  #The maximum height of a page (in points), limited by pdfjam.

TMPFILE1=$(mktemp /tmp/XXXXXX.pdf)
TMPFILE2=$(mktemp /tmp/XXXXXX.pdf)

usage="usage: scrolldiff -h FILE1.pdf FILE2.pdf
  -h print this message

v0.0"

while getopts "h" OPTIONS ; do
    case ${OPTIONS} in
        h|-help) echo "${usage}"; exit;;
    esac
done
shift $(($OPTIND - 1))

if [ -z "$1" ] || [ -z "$2" ] || [ ! -f "$1" ] || [ ! -f "$2" ]
then
  echo "ERROR: input files do not exist."
  echo
  echo "$usage"
  exit
fi

    #Get the number of pages:
pages1=$( pdfinfo "$1" | grep 'Pages' - | awk '{print $2}' )
pages2=$( pdfinfo "$2" | grep 'Pages' - | awk '{print $2}' )
numpages=$pages2
if [[ $pages1 > $pages2 ]]
then
  numpages=$pages1
fi

    #Get the paper size:
width1=$( pdfinfo "$1" | grep 'Page size' | awk '{print $3}' )
height1=$( pdfinfo "$1" | grep 'Page size' | awk '{print $5}' )
width2=$( pdfinfo "$2" | grep 'Page size' | awk '{print $3}' )
height2=$( pdfinfo "$2" | grep 'Page size' | awk '{print $5}' )

if [ $(bc <<< "$width1 < $width2") -eq 1 ]
then
  width1=$width2
fi
if [ $(bc <<< "$height1 < $height2") -eq 1 ]
then
  height1=$height2
fi

height=$( echo "scale=2; $height1 * $numpages" | bc )
if [ $(bc <<< "$MAX_HEIGHT < $height") -eq 1 ]
then
  height=$MAX_HEIGHT
fi
papersize="${width1}pt,${height}pt"



    #Make the scrolls:
pdfj="pdfjam --nup 1x$numpages --papersize {${papersize}} --outfile"
$pdfj "$TMPFILE1" "$1"
$pdfj "$TMPFILE2" "$2"

diffpdf "$TMPFILE1" "$TMPFILE2"

rm -f $TMPFILE1 $TMPFILE2
Но практически можно использовать только diff-pdf.
В репозиториях xUbuntu утилиты нет, можно зайти на домашнюю страницу утилиты, скачать исходники и скомпилировать. Но компилировать я не люблю. Поэтому качаю отсюда rpm-пакет diff-pdf-0.5-1.el8.x86_64.rpm
Потом:
sudo alien diff-pdf-0.5-1.el8.x86_64.rpmПолучаем пакет  diff-pdf-0.5-1.el8.x86_64.deb. Его уже устанавливаем любым доступным способом.
В качестве аргументов diff-pdf принимает два файла PDF. По умолчанию его единственный вывод - это его код возврата: 0, если нет различий, и 1, если два PDF-файла отличаются. Если задана --output-diff опция, создается PDF-файл с визуально выделенными отличиями:
$ diff-pdf --output-diff=diff.pdf a.pdf b.pdf
Другой (и лучший) вариант - сравнить два файла визуально в простом графическом интерфейсе, используя аргумент  --view:
$ diff-pdf --view a.pdf b.pdf
Откроется окно, в котором можно просматривать страницы файлов и увеличивать детализацию. Также возможно сдвигать две страницы относительно друг друга, используя Ctrl . Это полезно для выявления различий, связанных только со сдвижкой содержимого. Все различия помечаются цветом. Есть миниатюры страниц справа, на которых тоже видно где есть различия, по ним же можно выполнить переход на страницу. Пользоваться программкой интуитивно просто.
По обыкновению, делаю ПКМ Thunar "Сравнить два PDF" на команду:
diff-pdf --view %NУсловие появления: Другие, маска: *.pdf;*.PDF
Иконка любая.
Теперь, выделив два PDF и нажав ПКМ "Сравнить два PDF" я сразу вижу разницу, где (и если) она есть.

Думаю, кому-то пригодится.
Искренне ваш, el
Искренне ваш
См. скрипты для ПКМ Thunar здесь https://github.com/el-guahiro/thunar_custom_actions
Рекомендации для граждан у условиях гуманитарной катастрофы https://goo-gl.me/abV3X