понедельник, 14 декабря 2015 г.

Быстрый переход в заданные каталоги в Double Commander

cm_ChangeDir


Кол-во каталогов ограничено только свободными клавишами, например Ctrl+Shift+буква, с которой начинается имя нужного каталога.

суббота, 12 декабря 2015 г.

Улучшаем навигацию (по коду)

1. "Умные" Home и End

(global-set-key (kbd "<home>") (lambda ()
     "Smart Home"
     (interactive)
     (if (equal (point) (line-beginning-position))
         (progn
           (previous-line)
           (skip-chars-forward "[:space:]"))
       (beginning-of-line))))
(global-set-key (kbd "<end>") (lambda ()
     "Smart End"
     (interactive)
     (if (equal (point) (line-end-position))
         (progn
           (next-line)
           (end-of-line))
       (end-of-line))))

2. Расширить выделение до семантической единицы и скопировать выделенное

(defun expand-selection ()
  "Expand selection of semantic unit. v.0.2"
  (interactive)
  (unhighlight-regexp t) ;; убираем всю предыдущую посветку
  (let ((chrs "a-zA-Z0-9а-яА-Я-_%:~\.\/\*\?\&")
 (endc (string (char-after (region-end)))) p1 p2)
    (if (region-active-p)
 (setq chrs (concat chrs "\s\"")))
    (skip-chars-backward chrs)
    (setq p1 (point))
    (skip-chars-forward chrs)
    (setq p2 (point))
    (kill-ring-save p1 p2)
    (highlight-regexp (buffer-substring-no-properties p1 p2))))
Алгоритм следующий:
  • если выделения нет, то выделить "токен", содержащий символы из chrs
  • если часть токена уже выделена, то выделить все, что попадает в chrs c пробелами ("выделить фразу")



четверг, 3 декабря 2015 г.

Переключеие раскладки в Emacs системной (!) комбинацией клавиш

Сложно это или просто? Судите сами, я на это убил целый вечер.

1. Скрипт, который переключает системную раскладку в Xfce ИЛИ метод ввода ("язык") в Emacs:

#!/bin/sh
if xdotool getwindowfocus getwindowname | grep -q emacs
then
    emacsclient -e '(lang-switch)'
else
    xkb-switch -n
fi

NB

  1. "Или" тут ключевой момент - очевидно, что после переключения языка средствами Xkb в самом Emacs уже ничего работать не будет. 
  2.  В настройках xkb-plugin должно стоять "Управление раскладками: для каждого приложения [отдельно]", по тем же причинам. Ну и просто потому, что так удобнее))

2. Функция (lang-switch) для самого Emacs:
(defun lang-switch ()            
  ""              
  (interactive)              
  (with-current-buffer (window-buffer (selected-window))   ;; emacsclient!! 
    (toggle-input-method)))

xkb-switch

пятница, 20 ноября 2015 г.

Org Mode, Eww и БАГИ (?)

Понадобилось мне тут сохранить кое-какую информацию из рунета для todo, но, учитывая, что срок события неизвестен, а это все же рунет, то сохранять ссылку некошерно - через N дней самого сайта может и не быть.. Поэтому сохранил как обычный html-файл. И началось.. Emacs версии 24.5.1 (а точнее, Org mode) упорно пытается открыть файл в emacs-w3m, которого нет (?), плюя на настройки "Открывать html-файлы по умолчанию в .." Что? А! Это однако в переменной 'org-file-apps' указывается. Меняем, и снова что? тот же w3m.. баг?- лень!
  ffwd>> 
Ок, мы научились указывать Org mode, какой именно мне нужен браузер :) Следующий сюрприз уже от самого eww: при открытии локального файла он (за каким-то фигом) лезет на фтп яндыкса, не может соединиться и что? правильно, подвешивает на минуту сам Emacs. Баг!?? Уже наплевать, просто пишу такую вот функцию:
(defun org-open-html (lnk)
  "Open local html-file offline OR open link in Eww (fix eww hangup)."
  (if (file-exists-p lnk)
      (find-file lnk)  ;; Странный фикс однако!
    (if (yes-or-no-p "Not local file! Browse with EWW?")
 (eww-browse-url lnk))))
Коммент: у меня при открытии html-файла Emacs автоматически переключается в html-mode и корректно отображает страницу, а может это у всех так, легко нагуглить впрочем. 

Раздражает ли меня все это? Ну может быть слегка, это не в счет - в коде на Сях или даже питоне за 15 минут, в пару строк всю логику работы не поменяешь.

четверг, 5 ноября 2015 г.

Клавиатура CBR KB 175 - кусок среднего г-на.

Куплена из-за недостатка времени и похожей на адекватную раскладку.
Минусы:
  • задняя панель- кусок дешевой жести,
  • резиновые ножки микроскопические и наверно скоро клеить на двухстороннюю ленту,
  • тактильная отдача хреновая, но к этому можно привыкнуть.
Плюсы:
  • раскладка почти нормальная, если забыть про маленькую Backspace,
  • без нелепого цифрового блока,
  • цена в оффлайне,
  • (бесполезные) мультимедийные клавиши в наличии. 
 
Я полагаю в оффлайне переплата процентов 300. За срочность))

четверг, 29 октября 2015 г.

Emacs как файловый менеджер: итоги.

Для начало о том, что было сделано (и что нет):
  1. Была написана функция фильтра по мере набора для Dired
  2. В Dired была добавлена подсветка файловых тегов стандартного вида ':tag1:tag2: ..'
  3. C помощью emacsclient --eval на панели была создана кнопка запуска Speedbar на текущем рабочем месте
  4. С помощью defadvice было изменено поведение функции abort-if-file-too-large таким образом, чтобы большие файлы открывались без запроса с помощью дефолтного приложения (использовался пакет openwith)
  5. Не была реализована функция для распаковки архивов в текущий каталог по шорткату
  6. Не были реализованы дополнительные горячие клавиши для Speedbar

.. а потом установил крутецкий двухпанельный Double Commander и понял, что и близко не подошел к такому уровню удобства работы с файлами)) Кстати, Thunar теперь можно смело удалить - 2015ый год, а в нем до сих пор нет даже истории открытых папок!

Ну и до кучи сюда же мою справку по [моим] горячим клавишам Emacs - имхо, получилось довольно юзабельно:


(C- Control, M- "Meta"- Alt, табличку вручную я конечно не рисовал, в Org mode есть встроенный табличный процессор)

понедельник, 5 октября 2015 г.

Emacs и PDF

По умолчанию для рендеринга PDF-документов Emacs использует Ghostscript, и мало того, что результат получается откровенно страшненький, так с ним и ничего нельзя сделать в плане улучшения, ну или я просто не нагуглил (пара рецептов, что были найдены, абсолютно никак не повлияли на качество картинки). А про такие удобства, как поиск по мере набора с подсветкой найденного лучше и не вспоминать, чтобы не огорчаться. Но! есть другое решение: pdf-tools.

Cам пакет доступен в Melpa, но по ссылке можно прочитать про него подробнее. Точнее, даже нужно, так как после установки менеджером пакетов требуется его "докомпиляция":
(pdf-tools-install)
Результат разительно отличается от того, что было в начале - качеством отрисовки, возможностью поиска по мере набора и тем, что не кеширует изображения страниц PDF-документа на диск, а использует оперативную память.

Небольшой апдейт:
стоит добавить в конфиг что-то вроде того, что ниже, иначе каждый раз включать pdf-view-mode вместо дефолтного doc-view-mode может очень сильно достать:
(require 'pdf-tools)
(add-to-list 'auto-mode-alist '("\\.pdf\\'" . pdf-view-mode))
Но! с моей ступенчатой (последовательной) загрузкой конфигурационных файлов так не работает. А работает только так:
(run-at-time 3 nil (lambda () 
  (require 'pdf-tools)
  (add-to-list 'auto-mode-alist '("\\.pdf\\'" . pdf-view-mode))))
Разбираться честно говоря лень.

четверг, 1 октября 2015 г.

Зашел тут в твиттор к прогеру одному

Уж не знаю, на чем он там прогает, не вникал, но ретвитит товарищей куда тупее себя. Но популярных, картиночки "умные" постят, которые остальная околопрограммерская (био)масса радостно растаскивает по твиттору. В общем, своя там у них атмосфера, на мой взгляд крайне душная. Но вот идея с картиночками мне понравилась! С диска-то они могу пропасть куда-нибудь, да и никто их так не увидит.. буду исправлять.


Мне очень понравилось настроение, запечатленное в этой композиции. Оно какое-то нецензурное, и это радует :)

вторник, 29 сентября 2015 г.

"Бесполезная" клавиша Insert..

Как известно, клавиша "с кривым окошком" контекстного меню очень даже полезна - уже по умолчанию это вызов командной строки в Emacs. Ну вот и для Insert`a нашлось дело, причем даже по смыслу соответствующее - выполнение команды xfce4-popup-clipman.

понедельник, 28 сентября 2015 г.

zypper: обновление пакетов

Список репо, в котором наведен порядок:
zypper lr
#  | Псевдоним          | Имя                          | Включён | Обновление
---+--------------------+------------------------------+---------+-----------
 1 | debug              | openSUSE-13.1-Debug          | Нет     | Нет       
 2 | editors            | editors                      | Да      | Да        
 3 | gnome-new          | GNOME:STABLE:3.12            | Да      | Да        
 4 | nvidia             | nVidia Graphics Drivers      | Да      | Да        
 5 | openSUSE-13.1-1.10 | openSUSE-13.1-1.10           | Нет     | Нет       
 6 | oss                | openSUSE-13.1-Oss            | Да      | Да        
 7 | packman-e          | packman-essentials           | Да      | Нет       
 8 | packman-m          | packman-multimedia           | Да      | Нет       
 9 | repo-non-oss       | openSUSE-13.1-Non-Oss        | Да      | Да        
10 | update             | openSUSE-13.1-Update         | Да      | Да        
11 | update-debug       | openSUSE-13.1-Update-Debug   | Нет     | Нет       
12 | update-n.oss       | openSUSE-13.1-Update-Non-Oss | Да      | Да        
13 | x11-utils          | X11:utilites                 | Нет     | Нет       
14 | x11-xfce           | X11:xfce                     | Да      | Да 
В "экстремальных" для обычного пользователя случаях (все же привыкли к Ясту) ему придется иметь дело именно с zypper, да и в сложный случаях так быстрее. Поэтому для быстрого доступа к конкретному репо неплохо бы присвоить ему короткое имя - алиас. Это легко сделать такой командой:

zypper nr alias|name|URI new-alias

Механизм исключения репозитариев- увы, отсутствует, поэтому при обновлении из конкретных репозиториев следует их указывать явно (здесь-то и нужны короткие алиасы):

zypper up -r packman-e -r x11-xfce

Следует отметить, что применение патчей командой 'zypper patch' не требует указания репо, так как они все равно берутся из Update.

Откат на старую версию после неудачного обновления, если при запуске появляется что-то вроде:
    symbol lookup error: /usr/lib/libwebkit2gtk-3.0.so.25: undefined symbol: ...
- да элементарно!

zypper in -f -r update libwebkit2gtk-3_0-25

zypper бла-бла-бла
Будет обновлён до более старой версии следующий 1 пакет:
  libwebkit2gtk-3_0-25
Следующий 1 пакет изменит производителя:
  libwebkit2gtk-3_0-25  obs://build.opensuse.org/GNOME -> openSUSE
бла-бла-бла
Продолжить? [y/n/? выводит все параметры] (y): y

пятница, 11 сентября 2015 г.

Emacs: Agenda Calendar

Как обычно, вначале я не пользовался этим непонятным режимом, посчитав его чем-то ненужным. И очень зря! ;) Итак, перечислим часть возможностей и фичей по порядку:
  • команда org-agenda выводит приглашение и список "видов" (которые можно настрить, подробности ниже),
  • допустим мы нажали "a", выбрав этим вид За текущую неделю,
  • который представляет собой вертикальную временную шкалу с датами и заголовками событий,
  • по правому клику на событии содержимое нашего орг-файла прокручивается до соответствующей записи, и она разворачивается.
Необходимые, но очень краткие пояснения:
1. Все данные берутся из орг-файла (но не только), но для этого его первым делом нужно добавить в список с помощью комбинации "C-c ["
2. Чтобы событие появилось в буфере agenda, оно должно содержать дату в специальном формате, которая добавляется в один клик из "всплывающего календаря":


 - командой org-time-stamp.
3. "Виды", а точнее команды, которые отображаются в приглашении можно настроить абсолютно как угодно:
просмотр событий за неделю/месяц/год/-15..+15 дней от текущей даты и так далее (см. список переменных org-agenda-..),
можно например настроить показ записей со статусом TODO, а выполненные (DONE) скрыть из просмотра.

С таким мощным функционалом все прочие календари и планировщики, вроде Osmo, GTG или Gnome Calendar становятся абсолютно не-нуж-ны.


воскресенье, 6 сентября 2015 г.

Калькулятор в Whisker Menu


calc.sh: notify-send "Результат: " $(calc $1 $2 $3)

вторник, 1 сентября 2015 г.

Запуск emacsclient с произвольной темой

При создании нового фрейма (и соответственно нового окна) с помощью 'emacsclient -с' наследуются все родительские настройки, в том числе и цветовая тема. Можно конечно передать emacsclient`у в виде alist некоторые дополнительные параметры, например цвет фона окна, но тему целиком так передать не выйдет. Допустим, мне нужно, чтобы при открытии текстового файла из Thunar новое окно Emacs мимикрировало под "обычный текстовый редактор", ну и просто отличалось от основного окна - а если поменять только фон, то может оказаться сломана подсветка синтаксиса, например выйти синее на синем. Не вариант. Собственно, хинт:
  1. Установить load-theme-buffer-local.el
  2. Добавить в конфиг (add-hook 'server-switch-hook (lambda () (load-theme-buffer-local 'adwaita (current-buffer))))

понедельник, 3 августа 2015 г.

Заметил, что когда встречаю в тексте недорисованный смайлик типа Lol)) то недоумеваю - "а где открывающие скобки?"

суббота, 1 августа 2015 г.

gnome 2030

Скриншот из будущего :)
.. индусы, кетаезы, нигерийцы - вот это вот все ваш гном! ;)

воскресенье, 26 июля 2015 г.

Попалась тут фотка..

Действительно, кто не прослезится, увидев самоделку с Д226Б - тот не из наших. Реально так повеяло.. уж и забыл напрочь такое.

вторник, 14 июля 2015 г.

Учим Emacs хорошему тону :)

1. По умолчанию Emacs не закрывает временные (служебные) буферы, оставляя их висеть в списке. Возможно, я еще не достиг просветления и потому не понимаю, зачем оно нужно, но меня такое поведение категорически не устраивает. В прошлом посте была приведена функция 'rkill-buffers', которая закрывает все имхо ненужное, вот ей-то я и воспользуюсь снова:
(global-set-key (kbd "<escape>") (lambda ()
       (interactive)
       (keyboard-escape-quit)
       (rkill-buffers wf-buffers-group1)))
Клавиша Esc в первую очередь выполняет стандартную функцию отмены действия. Лично я вообще не сторонник заучивания каких-либо клавиш по умолчанию, особенно не совпадающих в разных приложениях (в Emacs это Ctrl+G, а не Esc, в Firefox- Ctrl+T вместо Ctrl+N, и так далее), и исключений обычно не делаю.

2. Не в той раскладке!
Если вместо Ctrl+B на английском вы печатаете Ctrl+И на русском (и комбинация Ctrl+И ни к чему не привязана), то Emacs вызовет функцию 'undefined', которая выводит информационное сообщение "<Key> is undefined". Можно ее слегка переопределить:
(defadvice undefined (around undefined-advice activate)
  (shell-command "xdotool key ISO_Next_Group")
  (message "Ru > En switched, try again!"))
чтобы в таком случае автоматически переключалась раскладка, в данном примере это сделано с помощью xdotool.

3. Полезная функция ;)
- поиск по собственному коду и конфигам: вначале она полезна потому, что изучаешь язык и многое еще не понимаешь до конца, а потом- потому что забываешь, что, как, где и зачем.
(defun mylispcode-search ()
  "Search string in Emacs *.el files"
  (interactive)
  (let ((q (read-string " > ")) (f "~/*.org ~/.emacs ~/.emacs.d/*.el"))                                                      
    (message (shell-command-to-string (concat "grep -h -A 1 -B 1 " q " " f)))))

UPD сентябрь 2015
Ну и правильный вариант "полезной функции", без всякого grep`а
(defun mylispcode-search ()
"Search string in Emacs *.el files"
(interactive)
(let ( (lf (directory-files "~/.emacs.d/misc_settings/" t nil nil)) f)
  (setq lf (cddr lf))   ;; remove "." and ".." links from list
  (add-to-list 'lf "~/.emacs")
  (generate-new-buffer "*SEARCH")
  (with-current-buffer "*SEARCH"
    (lisp-mode)
    (dolist (f lf)
      (insert (concat "\n  [" (format "%s" f) "] \n\n"))
      (insert-file-contents f)
      (goto-char (point-max))))
  (switch-to-buffer "*SEARCH")
  (goto-char (point-min))
  (re-search-forward (read-string ">> ") nil t)))

Emacs: удобное переключение между буферами

Emacs такая штука, что обычно в нем открыто много разный файлов одновременно. А тем более разных буферов (буфер вовсе не обязательно должен быть связан с конкретным файлом), между которыми нужно переключаться. Можно конечно это делать с помощью графического меню, но.. его может и не быть, или оно может быть, но при этом не быть мышки, которой легко кликнуть нужный пункт (скажем Emacs запущен в чоорной консоли). А еще в этом меню будет много лишнего (специальные буферы Help, Messages,..) Короче, ну его нафиг! Поэтому удобнее будет так:
(defvar wf-buffers-group1 "\\*\\(?:Help\\|Messages\\|scratch\\|Occur\\)\\*")

(global-set-key (kbd "C-b") (lambda()
         "List buffers"
         (interactive)
         (rkill-buffers wf-buffers-group1)
         (buffer-menu)
         (isearch-forward)
         ;; чтобы не жать Enter дважды
         (execute-kbd-macro (kbd "RET"))
         (rkill-buffers "\\*Buffer.List\\*")
         ))
Переключение к списку всех нужных буферов по привычной для меня комбинации Ctrl+B, после нажатия которой достаточно начать набирать имя требуемого буфера, а потом нажать Enter или Esc, или еще какую-нибудь клавишу. Или просто тупо кликнуть мышкой ;)
Функция 'rkill-buffers' (пере)оперделяет назойливое поведение kill-buffer, которая требует подтверждения закрытия любого буфера, кроме текущего:
(require 'cl)
(defun rkill-buffers (rexp)
  "Закрыть совпадающие буферы МОЛЧА"
  (flet ((kill-buffer-ask (buffer) (kill-buffer buffer)))
    (kill-matching-buffers rexp)))

Почему же так не сделано по умолчанию?- это Emacs, детка, тут каждый сам себе бог =)

Альтернативные варианты:
  • прокрутка колесом мышки на mode line - вполне юзабельно, если открыто не очень много файлов
  • tab bar mode - очевидно вкладки, вот не использую, ничего не могу сказать по поводу этого.
UPD июль 2015
Ну и отдельного упоминания заслуживает функция переключения между двумя буферами: текущим и предыдущим, после переключения на предыдущий он становится текущим, т. е. циклическое переключение:
(defun switch-to-previous-buffer ()
  (interactive)
  (switch-to-buffer (other-buffer (current-buffer) 1)))

Архивы: новая версия аудиоредактора ReZound 0.13.1 beta

[2013] .. после многолетнего перерыва, а я как-то прослоупочил))

Наблюдаю досадный баг: диалог выбора файлов пустой, открытие файла возможно только из командной строки. Зато пофикшены старые проблемы с PulseAudio (заявлена поддержка, не проверял) и руганью на отсутствующее /dev/dsp, см. опции компиляции.



вторник, 7 июля 2015 г.

Будь бдителен, товаришь!

Наигравшись с QCAD (в гуе по-прежнему куча недоделок, мелких, но весьма раздражающих), обратил внимание на мерзкую радугу у шрифтов. Ну Qt, чего хорошего можно ждать от этого тулкита, зачем-то полез в гугл и- ааа, в Firefox тоже! Гребаная радуга! Первая безумная мысль - монитор!??, вторая, чуть попозже- "Вот что делает со зрением многочасовое сидение за компом". Но нет ;) Это Firefox незаметно обновился до версии 39 из репо mozilla. Снес- даунгрейд до 38- нормальные шрифты. Мораль сей басни очевидна..

пятница, 26 июня 2015 г.

Эта запись тут может стать последней?

Кажется с сервисами гугла, особенно с blogger.com, пора начинать прощаться.

Последним звоночком стало даже не закрытие поиска по блогам (это произошло давно), а результаты одного поиска "google> запрос site:blogger.com" - во-первых, их довольно мало [1], ну а во-вторых, гугл навязчиво редиректит на Google+, который мне совершенно никак не вперся, и от дизайна которого у меня блевотные позывы.
[1] Но на ddg.gg их тоже мало, возможно из-за отказа гугла генерировать статические страницы и навязывания своего нового (уже старого) оформления на сплошном джаваскрипте. Куда же податься? Ну может быть Wordpress, но пока не решил.. мне лень что-то делать, несмотря на то, что что-то делать надо.

Попробовал Wordpress.com, это пипец. Чувачки хотят выжать бобла из каждой мелочи, никаких custom css нет и в помине (точнее есть только за деньги), подсветка синтаксиса ограничена самыми трешпопсовыми языками, при этом даже <pre> и того нет!

среда, 17 июня 2015 г.

MPV vs. Mplayer

Задача: просмотр видеоуроков по некоторому специализированному ПО. (Да, я вынужден признать, что изучать графический интерфейс приложения по книгам - занятие сродни изучению языка программирования на слух, совершенно бесполезно). Лучше всего тут покадровый просмотр, в качестве плеера берем Mplayer, открываем официальную документацию.. и через полчаса закрываем с нехорошими выражениями в адрес разработчиков, которые умудрились свалить ВСЕ в одну кучу, и похоже приложив все усилия, чтобы сделать ее абсолютно нечитабельной. Ффтопку! Вот и отличный повод попробовать MPV. Документация к нему тоже откровенно говоря хромает, но все же она гораздо более user-frienly. В итоге особых настроек и не понадобилось.

~/.config/mpv/input.conf
Esc quit
# RIGHT (LEFT) + Shift    Seek 1s    - по умолчанию

~/.config/mpv/config
fullscreen
osd-font-size=28
osd-duration=10000
osd-border-size=0
osd-color='#C94C00'
osd-bar-h=1

Еще один несомненный плюс MPV- если его запаузить и начать двигаться вперед/назад по кадрам (seek), то он сам по себе не переключится обратно в режим воспроизведения, в отличии от Mplayer (и о чем думали разработчики последнего?? да похоже ни о чем, они вообще не утруждали себя размышлениями о юзабилити).

среда, 10 июня 2015 г.

Gnome keyring: unlock login keyring

Баг: не разблокируется 'login keyring' после собственно логина.
Фикс:
  1. zypper install python-gnomekeyring
  2. в bash_profile xterm -geometry 40x2 -e "python ~/unlock-keyring.py"
  3. сабж (unlock-keyring.py):
#!/usr/bin/env python
import gnomekeyring
import getpass
gnomekeyring.unlock_sync(None, getpass.getpass('Password: '));

Минус данного решения в двойном вводе пароля, при логине и после него, но писать багрепорты для 13.1 мне еще более лень :)

* В journalctl этот гномобаг выглядит так:
...
The gnome keyring socket is not owned with the same credentials as the user login:
gkr-pam: couldn't unlock the login keyring
...

UPD август 2015

А теперь делаем все по взрослому ;)


Никаких левых питоноскриптов, просто дописать куда-нибудь в конфиг Emacs:
(require 'secrets)
(message "")
(sleep-for 1)
(message "Unlock login keyring")
(secrets-list-items "login")
и  при запуске Emacs запросит пароль к указанной связке ключей, и тем самым разблокирует ее [в случае ввода верного пароля конечно].

воскресенье, 7 июня 2015 г.

Screen locker`ы для Xfce

Стандартный slock показался мне неудобным и глючным. Альтернативы:
  • minilock - работает, все Ок, но настроить внешний вид можно только правкой исходников,
  • i3lock - збс! никаких претензий не имею.

суббота, 6 июня 2015 г.

Как бэкапить файлы на Dropbox?

Испробовал разные способы, и остановился на следующем: в папке ~/dropbox_sync создаем хардлинки (ln, а не ln -s!) на нужные локальные файлы. Все =) Плюсы:
  • никакого лишнего копирования не происходит,
  • после удаления файла в веб-интерфейсе Dropbox он останется на локальной машине в исходном расположении,
  • после удаления файла на локальной машине в исходном расположении он все равно останется в папке ~/dropbox_sync,
  • предыдущие версии доступны через веб-интерфейс (фича Dropbox!).

воскресенье, 31 мая 2015 г.

Горячие клавиши и расположение указателя мыши.

В Xfce повесить действие на любую клавишу элементарно. Допустим, нам нужен выпадающий [drop-down] терминал при нажатии на какую-нибудь функциональную клавишу, ну.. пусть для красоты это будет F10. Но вот незадача, эта же клавиша используется например в Emacs для вызова меню. Можно конечно переназначить эту клавишу во всех приложениях, но это как-то не труЪ. А можно поступить иначе: проверить, находится ли указатель мыши над рабочим столом или же над каким-то окном, и в зависимости от этого контекста выполнить (или не выполнять) команду. Проверка:
PointerOnDesktop() {
eval $(xdotool getmouselocation --shell) # Get X=, Y=, WINDOW=
WI="$(xdotool getwindowname $WINDOW)"
if [ "$WI" = "Рабочий стол" ]
then return 0
else return 1
fi
}
Причем в данном случае неважно, активно окно или нет, проверяются лишь координаты указателя мыши. В случае xfdesktop это упрощает жизнь, так как при перемещении курсора с окна на рабочий стол окно по-прежнему остается активным, если только пользователь не кликнул по десктопу.


Идея была хороша, но не работает! Надо смотреть глубже..

среда, 20 мая 2015 г.

Emacs: модульный конфиг

1. Разбивка по файлам

Со временем файл ~/.emacs может стать довольно большим, и даже не смотря на комментирование, найти и отредактировать нужное место, просто прокрутив его по памяти уже не получится. Зачем создавать себе проблемы, если файл можно разбить на несколько отдельных? И сохранить в одном только основные настройки, в другом например- привязки клавиш, а третий оставить для разных экспериментов. Но подходящего рецепта не было найдено даже на англоязычных сайтах, поэтому предлагаю простой "колхозный" вариант:
  1. Создаем каталог ~/.emacs.d/misc_settings, в котором и будут храниться файлы *.el с различными настройками,
  2. В конец ~/.emacs просто дописываем:
    (dolist (file (directory-files "~/.emacs.d/misc_settings/" 'absolute ".*\.el$"))
      (load-file file)) 

2. .. и их загрузка для редактирования.

Последовательная загрузка (первый ~/.emacs - если уже загружен, то следующий - если уже загружен, то следующий - ..) - это имеет смысл, особенно когда файлы располагаются в алфавитном порядке "по степени важности":
(defun load-cfg-files ()
  (interactive)
  (let ((files (directory-files "~/.emacs.d/misc_settings" t "\.el$")) (main "~/.emacs"))
  (add-to-list 'files main)
  (while (get-file-buffer (car files))
 (setq files (cdr files)))
    (find-file (car files))))

Естественно, повешено на F1.

вторник, 19 мая 2015 г.

X-plore File Manager

Двухпанельный файл-менеджер для андроида, с которым действительно удобно работать на планшете. Единственный как бы минус - не поддерживает перетаскивание файлов/папок. Впрочем, ни один олдскульный линуксовый двухпанельник такого тоже не умеет)) Фичи:
  • есть зачетная темная тема, которая ничем не хуже светлой,
  • закладки естественно в наличии, есть даже история последних открытых папок,
  • встроенные средства для просмотра файлов и работы с архивами,
  • естественно групповое выделение файлов/папок,
  • настраиваемые иконки для основных действий и настраиваемые аппаратные клавиши,
  • встроенный просмотр занятого объема накопителей, пофайлово в графическом виде ("кирпичиками"),
  • всякие дополнительные фичи, типа работы с удаленными серверами и сервисами вроде Dropbox или яндекс.диск.
Пробовал на 10ти дюймовом планшете, вот только встроенный поиск протестировать не успел.

четверг, 14 мая 2015 г.

Установил Firefox!

Да-да, после нескольких лет использования исключительно Оперы 12 установил Firefox (38). И мне понравилось! ;)

Некоторые заметки по первичной настройке с нуля:
  • в about:config лазил только 1 раз - увеличил скорость прокрутки страниц мышкой и отключил скрытые префикса 'http(s)://'
    mousewheel.acceleration.factor        50
    mousewheel.default.delta_multiplier_y 300
    browser.urlbar.trimURLs
    
  • т. к. устанавливал из репо mozilla, то русскую локализацию пришлось установить отдельно, с офсайта. Также как и русский словарь проверки орфографии,
  • сразу накатил все экстеншены, которые нужны по дефолту:


    - тут почти все, кроме разве что поиска для контекстного меню, заодно решил попробовать новомодный uBlock - очень даже ничего,
  • изменил стиль отображения всплывающей панели NoScript, чтобы было не слишком навязчиво и не дергало страницу вверх-вниз: userChrome.css:
    .noscript-bottom-notify {
    opacity: 0.7 !important;
    position: fixed;
    bottom: 0;
    } 
Вроде для начала и все.

UPD: установка русской локализации ломает переход на закладку в адресной строке!
Нэт. Просто не подтянулся пакет MozillaFirefox-translations-common-38.0-1.1, с ним все нормально с русским языком и работой браузера.

воскресенье, 10 мая 2015 г.

Qpdfview - очень хорошо.

Еще один хороший просмотрщик PDF: qpdfview 0.4.14


В принципе, есть все, что может потребоваться, горячие клавиши настраиваются, пометки-аннотации поддерживаются.

вторник, 28 апреля 2015 г.

Счетчик

Зачем-то добавил счетчик =) 

суббота, 25 апреля 2015 г.

Bash: массивы

Индексированные и ассоциативные массивы.


echo -e '\nИндексированный массив'
declare -a arrayI
arrayI[1]=/path/to/file1 
arrayI[2]=/path/to/file2
#
echo keys: ${!arrayI[@]}
echo values: ${arrayI[@]}
echo -e '\nАссоциативный массив'
declare -A arrayA
arrayA[one]=/path/to/file1
arrayA[two]=/path/to/file2
#
echo keys: ${!arrayA[@]}
echo values: "${arrayA[@]}"

вторник, 14 апреля 2015 г.

Еще пара "фишек" в ~/.emacs

(cua-mode t)
Включает копипаст стандартными комбинациями клавиш Ctrl+c, Ctrl+v и Ctrl+x
(ido-mode t)
Режим открытия/поиска файлов без диалогового окна, сразу в минибуфере - причем так оказалось гораздо удобнее.

Разбираемся с dired.


1. Убираем все "гнусные подробности" вроде прав доступа, оставляем только имена файлов: dired-details.el
(require 'dired-details)
(dired-details-install)

2. Добавляем фильтр-по-имени-файла:
(defun dired-show-only (regexp)
   (revert-buffer)
   (interactive "sFiles to show (regexp): ")
   (dired-mark-files-regexp regexp)
   (dired-toggle-marks)
   (dired-do-kill-lines))
и соответственно быструю клавишу "/" для него, которая будет активна только в dired-mode:
(add-hook 'dired-mode-hook
          (lambda () (local-set-key (kbd "/") #'dired-show-only)))
Ну вот теперь у нас все Ок.

четверг, 9 апреля 2015 г.

Org mode: цветные теги


Меню Options > Customize Emacs > All Setting Matching > "org tag faces"

- непосредственно в самом конфиге что-то править нет никакой необходимости. Пожалуй, подобной гибкостью не обладает ни одно другое приложение.

суббота, 4 апреля 2015 г.

Новости..

А WebKitGtk таки пилят! Заметно это на примере Midori- раньше полоса загрузки ползла несколько задумчиво, но вот обновил libwebkitgtk до последней доступной в репо версии для 13.1, и все не то чтобы залетало, но стало поприятнее.

В roadmap Xfce 4.14 серьезно заявлено переписывание ну просто всего на GTK3. Не могу сказать, что меня это радует: наблюдать со стороны, как гномеры накручивают очередные гайки забавно, испытывать на себе- ничуть.

С количеством сообщений в предыдущем посте я ошибся, по факту еще нет и сотни ;)

среда, 1 апреля 2015 г.

101!

Нашел свой старый бложек, в который постил разное в период с июля 2011 по апрель 2012, когда еще был тру-гномером :) Что самое смешное, нашел по запросу в гугле, на  2ой странице выдачи! Из чего можно сделать вывод, что не слишком-то я и изменился за последние 4 года. Не знаю даже, хорошо это или плохо. Плохо разве что тем, что особого развития не произошло - "обычный продвинутый йузер".. а может, и неплохо))

вторник, 31 марта 2015 г.

Liferea site scraping - если сайт не имеет RSS

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



  • прямое указание URL источника (не интересно),
  • добавление команды, вывод которой (stdout) Liferea и будет читать,
  • непосредственное указание адреса локального файла - это практически то же, что и предыдущий вариант, только без конвейера,
  • указание URL ресурса, который будет загружен и преобразован в ленту с помощью Фильтра преобразования - это для любителей Perl
Я предлагаю выбрать второй способ. Проще всего будет взять Xidel для получения нужных нам элементов сайта (с помощью XPath например) и написать небольшой bash-скрипт, который вставит их в xml-шаблон нашей ленты и выведет на stdout.

Совет вышел немного в стиле "Как нарисовать сову?", но на самом деле описывать все словами реально лень, выкладывать примеры- никакого смысла.

понедельник, 30 марта 2015 г.

Liferea.css

Liferea- старейший линуксовый агрегатор лент новостей, и поэтому он такой, какой есть, и никаких серьезных новшеств там не будет. Но иногда старине Ларсу хочется ненадолго повыдергивать то, чем он кодит- обнаружил в 1.10.14 "фичу":
при чтении очередной ленты грузится какой-то блок с картой, которого в ленте вообще-то нет и не было никогда, и который мне нахрен не сдался. Если вырубить javascript - то  грузится все равно, но уже пустой прямоугольник, занимающий больше половины области просмотра. Ну нахрена так делать, а??
Порылся в исходниках, нашел как это отключить, и за одно еще шрифты в порядок привести (в гуе такой настройки не найдете, нет ее там):
body {
font-size: 15px !important;
font-family: "Droid Sans";
}
#mapdiv {
display: none !important;
}
Короче, низачет! Почему бы тогда не юзать например QuiteRSS? А не хочу, там разработчики тоже с придурью, выяснил при общении с ними. 

среда, 11 марта 2015 г.

Просмотр [и редактирование] PDF в Xfce

В Xfce- это важно, т. к. у нас тут не кеды и никаких Окуляров нет.
Можно использовать zathura, но это только для просмотра, а если нужно подправить размеры, удалить поля на страницах, добавить заметки или даже комфортный поиск по документу - увы-с. Поэтому придется рассмотреть другие инструменты, и наверно лучший- это Master PDF Editor, бесплатный для некоммерческого использования.


Основные возможности видны из скриншота, панели для расширенного редактирования отключены, т. к. мне такой функционал  не требуется, а нужна банальная пакетная обработка страниц + заметки + поиск.

Для теста взят файлик на 20Мб - инструкция к станку, с картинками. На моем двухядерном камне результаты следующие:

  • обрезка всех страниц для удаления пустых полей со всех сторон страницы + сохранение документа - менее 10с, загрузка процессора ~ 50%
  • поиск слова в документе без учета регистра, 503 совпадения - в первый раз менее 8с, последующий поиск любого слова - практически мгновенно, т. е. содержимое документа кэшируется (эх, zathura, ты так не умеешь!)
В целом результаты отличные, как для просмотрщика, так и для редактора. Из минусов разве что единственный режим просмотра, 2 страницы на экран сабж не умеет.

вторник, 10 марта 2015 г.

Emacs сломался)))

.. или слишком много пива.
При включенном шифровании записи в Org Mode (crypt.el) и активной функции автосохранения буффера когда-окно-становится-неактивным (focus hooks) может показаться (beer), что 1. ты начисто забыл пароль либо 2. Emacs заглючил.
Однако это не так :) Просто Xfce вытаскивает окно ввода пароля в центр, и если главное окно на полэкарна, как у меня, то после ввода пароля мышка на секунду соскакивает на рабочий стол, а посклольку никаких изменений в нашей приватной записи не произошло, и автосохранение- включено, то Emacs мгновенно шифрует ее обратно. Так что юзер снова недоуменно пялится на "BEGIN PGP MESSAGE.." вместо собственно того, что он хотел увидеть)) Можно считать дополнительным уровнем секурности - ввел пароль, прочитал, сдвинул мышку в сторону- и все снова залочилось. 

суббота, 7 марта 2015 г.

Переключение рабочих мест: ipager

С древних времен привычка к крупному "пейджеру" рабочих мест, с большими иконками - в панели высотой 22px разместить такое не представляется возможным. Можно было использовать старый фокус с дополнительной прозрачной панелькой произвольной высоты, но решено было взять ipager. Оказалось, что найти исходники - задача нетривиальная, поэтому был скачан какой-то ros`овский rpm-пакет и привычным образом распотрошен)) Единственный исполняемый файл из него помещен в ~/bin (какие-либо дополнительные библиотеки отсутствуют, Ipager работает напрямую с Иксами), немного подправлен конфиг - размеры и расположение, и результат:


- 3 рабочих места, на последнем ничего нет. Перетаскивание окон мышкой между рабочими местами (workspaces) кстати работает.

Единственная тонкость: просто так в автозапуск не забросить, нужен простейший скрипт, задающий задержку для того, чтобы сначала полностью загрузилось Xfce.

UPD 11.03
Но не все так просто - иногда ipager стартует с радикально-чоорным бекграундом, вместо требуемого прозрачного. Разбираться в причинах пока лень, перезапускать?- тем более. Поэтому берем ImageMagick и пишем несложный скрипт, который делает скриншот, получает из него цвет пикселя с заданными координатами, и если он окажется черный- автоматически перезапускает сабж. Как-то так:
sleep 4
ipager -c ~/tools/pager/1.conf &
sleep 1
S=/tmp/root.png
import -window root $S
convert $S -format '%[pixel:p{1360,730}]' info:- | grep black && (killall ipager
sleep 1
ipager -c ~/tools/pager/1.conf &
)
exit 0

* speep`ы расставлены чисто по приколу))

вторник, 3 февраля 2015 г.

"fuzzy search" in bash

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


Быстрый поиск (по мере набора, или "инкрементальный") по файлопомойке, путь к которой передается в $1. Вместо Backspace выступает клавиша минус "-", так как с обработкой специальных клавиш в bash мне возится просто лень. Сляпано на коленке :)

Зачем вообще? Да, на том же гитхабе есть несколько готовых вариантов.. которые например тупо не отображают кириллицу в именах файлов или требуют Vim.

четверг, 22 января 2015 г.

Luakit - браузер, полностью управляемый с клавиатуры

Как и в случае с Textadept, настройка барузера осуществляется прямым редактированием исходного кода на Lua. В качестве движка используется WebkitGtk. Пример конфига для поиска выделенного текста на яндекс.картах:


В принципе, все элементарно, и данная функция написана просто по аналогии, и поэтому в код браузера придется заглядывать довольно часто. Из не решенных на данный момент проблем- только проблема с кириллическими шорткатами.

пятница, 16 января 2015 г.

lightdm & guest session

Всегда считал, что запрос пароля для гостевой сессии- та еще шизуха. С LightDM пришлось порядком повозится, так как в этой штуке беспарольный логин гостя средствами PAM настроить нельзя. Но, кажется, методом тыка подходящая конфигурация была подобрана.
Итак, есть lightdm-1.12.1, далее нужно создать пользователя 'guest' (Yast2 > Управление пользователями) и файл /etc/lightdm/lightdm.conf с таким содержимым:

[SeatDefaults]
autologin-user=guest
autologin-user-timeout=10
user-session=xfce
 
Как это работает?
  1. При старте ничего выбирать не нужно, и через 10 секунд Гость автоматически входит в систему. 
  2. При переключении пользователя командой dm-tool switch-to-greeter произойдет то же самое (логин через 10 секунд). 
  3. При использовании команды dm-tool switch-to-user guest автовхода не будет, но во всех этих случаях при выборе гостевой сессии (а в последнем она будет выбрана в соответствии с командой автоматически) поле ввода пароля исчезает.
Конечно это не очень чистый хак, но такой способ требует наименьших телодвижений от пользователя OpenSUSE.

среда, 14 января 2015 г.

Xfce Task Manager 1.1.0

"Косметическое" обновление менеджера задач Xfce. Теперь он выглядит так:


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

Конечно же понятно, что достаточно открыть терминал и запустить htop.. но и такой (графический) менеджер задач тоже должен быть в любом приличном DE, и должен быть удобным.

понедельник, 5 января 2015 г.

Textadept

Узнал о Textadept случайно, когда искал альтернативу Emacs`у для работы с файлами, подобными такому. В рунете встречается описание "быстрый и минималистичный" - действительно, в интерфейсе Textadept можно скрыть панель вкладок, отключить полосы прокрутки и в итоге получить просто-окошко с меню и текстом. Больше это "описание" ничего не описывает, поэтому добавлю еще про его фичи:
  • широкий функционал по умолчанию: дополнение текста, автоматическая вставка парных символов, сниппеты, встроенная командная строка, поддержка тем оформления и т. д.
  • гибкость настроек и расширяемость под конкретные задачи пользователя за счет конфига, по сути представляющего собой скрипт на Lua
  • есть даже возможность запуска в консоли/терминале (textadept-curses)
Все понять и настроить можно даже без знания Lua, чтобы писать несложные функции у меня ушло несколько часов на ознакомление с документацией, в основном из-за отсутствия примеров, вроде такого:
keys['f7'] = function()
-- sh select var
buffer.search_anchor()
buffer.search_next(buffer, buffer.FIND_REGEXP,'$[0-9a-zA-Z_]+')
end

четверг, 1 января 2015 г.

Very long lines

Оказывается, команда file может сказать о файле и такое:
HTML document, UTF-8 Unicode text, with very long lines
Столкнулся с этим, когда на дампе обычной html-страницы наличные текстовые редакторы (diakonos, Emacs) стали тормозить, а попытка поиска по регулярным выражениям загоняла их в полный ступор, после чего оставалось лишь прибить процесс. Простейший скрипт на bash показал, что некоторые строки в файле имеют длину более пяти тысяч символов (йандекс рулит!).

Осталось выяснить на досуге, является ли это фундаментальным ограничением, или найдется ПО, способное такое переварить. В крайнем случае можно и порезать, но это не путь джедая))

Следующие Предыдущие Главная страница

Blogger Template by Blogcrowds