среда, 29 июня 2016 г.

Ностальгическое: Opera 12 stuff

Парочка блокировщиков рекламы для Оперы_12, которые работают:
  • scriptweeder
  • NoAds Advanced 
и в сочетании со встроенным блокировщиком Оперы почти уделывают связку noscript+adblock.  Добавлять ссылки на них правда не вижу смысла.
У NoAds Advanced кстати в нижнем правом углу окна есть "невидимая" кнопочка. Также на просторах интернета еще находится двуязычный словарик проверки орфографии с незатейливым названием 'en-ru.zip' - и после этого уже вполне можно работать (исправив useragent на какой-нибудь модный конечно).

среда, 22 июня 2016 г.

tab-magic v. 0.2

Продолжаем попытки повесить на клавишу Tab в Emacs все действия сразу. Первое нажатие выравнивает строку согласно лексеру, второе- динамическое дополнение (dabbrev, если возможно), или переключение между окнами, если дополнение не было найдено. Также стоит запретить dabbrev искать по остальным открытым буферам - иначе не будет работать правильно.
(defun tab-magic ()
  "Разные контекстные действия для Tab"
  (interactive)
  (let ((len (- (line-end-position) (line-beginning-position))))
    (defvar dabbrev-state nil)
    (defun dabbrev-point ()
      (if (boundp 'dabbrev--last-expansion-location)
   (format "%s" dabbrev--last-expansion-location)
 nil))
    (defun work-w-code ()
      (setq dabbrev-state (dabbrev-point))
      (indent-for-tab-command)
      (if (= (- (line-end-position) (line-beginning-position)) len)
   (unwind-protect
       (call-interactively 'dabbrev-expand)
     (if (string= dabbrev-state (dabbrev-point))
  (other-window 1)
       (setq dabbrev-state (dabbrev-point))))))

    ;; Настройки отдельных режимов (пример)
    (cond ((minibufferp) (minibuffer-complete))
   ;; 1
   ((eq major-mode 'org-mode) (if (org-at-heading-p)
      (org-cycle)
           (other-window 1)))
   ;; 2
   ((eq major-mode 'emacs-lisp-mode) (work-w-code))
    
   ;; 3
   ((eq major-mode 'sh-mode) (work-w-code))
   ;; 4
   (t (other-window 1))
   )))

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

Gnome-keyring: инструменты командной строки и немного elisp`а

Собственно, и упомянутый ранее gkeyring не нужен. Да и синтаксис у него довольно прибабахнутый, все можно сделать проще и удобнее на elisp, с помощью secrets.el.

1. Посылаем запрос пароля:
bash_to_emacs () {
    echo -n $@ > ~/.bash_emacs && emacsclient -e '(read-bash-o)'
}
2. Принимаем:
(defvar bash-emacs nil)
(defun read-bash-o ()
  "Read Bash output; run in BASH script (emacsclient)"
  (let ((bp "~/.bash_emacs"))
    (with-temp-buffer
      (insert-file-contents bp)
      (setq bash-emacs (buffer-substring-no-properties (point-min) (point-max))))
    (with-temp-buffer
      (write-region (point-min) (point-max) bp))  ;; clear
    ))
3. Получаем сохраненный пароль:
pswd=$(emacsclient -e '(secrets-get-secret "keyring_name" bash-emacs)' | tr -d '"')
4.Profit! ;)

Конечно, вариант "общения" bash с Emacs вышел несколько упоротый, но мне опять же было лень лезть в дебри. 

Marker - _крутое_ автодополнение команд для bash

Признаюсь честно - мне нужно было дополнение длинных команд с кучей параметров (например, это опции архиватора dar) и было лениво разбираться со стандартным bash-completion. И в гугле нашлось вот это: https://github.com/pindexis/marker


Все подробности на гитхабе, только требуется Bash-4.3+, есть в репозитории shells 

пятница, 3 июня 2016 г.

Midori: и менеджер паролей.

Ну и то, чего не хватало- всего пара строк на bash:
#!/bin/sh
current="$(sqlite3 ~/.config/midori/history.db 'select uri from history ORDER BY date' | tail -1 | sed -e 's#/$##')"  #remove the appending slash
psw=$(gkeyring -k mozilla --output=secret --name "$current")
if ((${#psw} > 2))
then
    echo -n $psw | xsel -p -i
    notify-send -t 1500 -i midori "Midori-passwd" "Пароль отправлен в primary-буфер"
else notify-send -t 3500 -i dialog-warning  "Midori-passwd" "Для сайта \n${current:0:32} .. \nпароль не найден"
fi
exit 0
Используются пароли, уже сохраненные расширением Firefox "GNOME Keyring integration", т. к. использовать встроенную сохранялку паролей фокса как минимум неудобно.
Итак, все пароли уже в gnome-keyring, а gkeyring дает доступ к этой службе из консоли. Дальше- дело техники: вытаскиваем из истории Midory последнюю запись = URL последней (текущей) открытой страницы, кликаем иконку и получаем пароль в "мышиный" буфер (средний клик). Естественно, история посещений в Midori должна быть включена. И без всякого джаваскрипта! ;)

среда, 1 июня 2016 г.

Midori больше не падает! :)

Речь о devel-версии Midori-gtk3, и по сравнению с тем, что было раньше, это уже достижение. Собирал с дефолтными пакетами:

Midori 0.5.11 ((null)) Midori
GTK+ 3.16.7 (3.16.7)
Glib 2.44.1 (2.44.1)
WebKitGTK+ 2.4.10 (2.4.10)
libSoup 2.50.0
cairo 1.14.2 (1.14.2)
libnotify No
gcr 3.16.0
granite 0.3.1

В целом впечатления положительные, по сравнению с разжиревшим монструозным Firefox смотрится куда приятнее (а работает быстрее), возможность использования одноклавишных шорткатов для-чего-угодно просто супер. Набор расширений по умолчанию весьма неплох, там уже есть все то, что продвинутые пользователи первым делом и добавляют в браузер. И расширения в Midori это не какой-то убогий джаваскрипт, а обычные библиотеки .so.

Из минусов- крайне мееедленный процесс разработки, и впечатляющий список открытых багов :) Ну и необходимость ручного допила внешнего вида (gtk3.css), впрочем это можно считать и фичой. Также по старой "доброй" традиции в Webkit[GTK] аналог about:config отсутствует как класс, и вот незадача- до сих пор нет менеджера паролей (есть правда какой-то самописный у арчеводов, но я не смог его собрать).

Про шорткаты:
некоторые сайты, в т. ч. гугл, любят перехватывать ввод пользователя, и, следовательно, при не_заблокированных  js команды вида "клавиша без модификаторов" работать не будут -- лечится установкой userjs, который запрещает автофокус на поле ввода/поиска сайта.
Про ютуб:
в мой сборке не заработал, в причинах еще не разбирался, зато +5 к аскетизму и борьбе с прокрастинацией)))
Про кастомизацию внешнего вида:
gtk3.css получился примерно такой:
...
/* CUSTOM */
.notebook tab {
    padding: 6 6 6;
}
.notebook tab:active {
    background-color: #555;
    background-image: none;
}
.notebook tab:not(:active) {
    border-left: 1px solid #999;
    border-right: 1px solid #999;
}
.progressbar {
    background-color: #333;
    color: white;
    background-image: none;
    box-shadow: none;
    border-right: 1px solid #ADADAD;
    border-radius: 0px;
}
а для :hover ссылок (всплывающий URL ссылки) такой стиль:
a[href]:hover {
            text-decoration: none !important;
        }
        a[href]:hover:after {
            content: attr(href);
            position: fixed; left: 0px; top: 0px;
     margin: auto;
            padding: 4px 6px !important;
            max-width: 60%; overflow: hidden;
            white-space: nowrap; text-overflow: hidden;
            font:10pt sans-serif !important;
            background-color: #2D2D2D !important;
     border-top: 1px solid #F47E4E;
     /* border-radius: 0 0 6px 0; */
     color: white;
            opacity: 0.7;
            z-index: 9999;     
        }

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

Blogger Template by Blogcrowds