воскресенье, 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- нормальные шрифты. Мораль сей басни очевидна..

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

Blogger Template by Blogcrowds