About Blog Dev | Alfa Romeo SZ Conkeror wishlist

All articles, tagged with “emacs”

Conkeror. Кошерный браузер.

Я думаю, что большое количество людей слышали, видели, а то и сами пробовали расширения для Файрфокса, которые облегчают работу с ним с клавиатуры: Hit-o-hint, Firemacs, Vimperator. Я как-то пытался пользоваться каждым из них, но у них было одно общее свойство - я ни к одному не смог привыкнуть. :) А вот Conkeror оказался совсем другим делом - я пользуюсь уже второй день и, несмотря на недостатки, очень доволен.

 continue reading

Но мы же люди!

А они - мультяшки

Emacs tabbar

Какое-то время назад я писал про то, как я переключаю буферы в Emacs’е. Но в конце-концов меня задолбало отсутствие табов и я решил поставить и разобраться в таббаре (я его раньше ставил, но он раздражал своим внешним видом и странным поведением :)).

Самая неочевидная штука заключается в том, что брать его надо однозначно из CVS, потому что файлик, который лежит в виде релиза на SF, просто-напросто на 3 года старше CVS’ового.

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

Вот настройки:

;;;;;;;;;
;; Tabbar

(require 'tabbar)

(global-set-key [C-S-tab] 'tabbar-backward-tab)
(global-set-key [C-tab] 'tabbar-forward-tab)

(set-face-foreground 'tabbar-default "LightSteelBlue")
(set-face-background 'tabbar-default "DarkSlateGray")
(set-face-foreground 'tabbar-selected "pale green")
(set-face-bold-p 'tabbar-selected t)
(set-face-attribute 'tabbar-button nil :box '(:line-width 1 :color "gray72"))

(setq tabbar-buffer-groups-function
      (lambda () 
        (list
         (cond
          ((find (aref (buffer-name (current-buffer)) 0) " *") "*")
          (t "All Buffers"))
         )))

(tabbar-mode)
;; tabbar end
;;;;;;;;;;;;;

tabbar-buffer-groups-function - раскидывает все буферы по двум группам: все, начинающиеся с пробела или астериска - в *, остальные - в All buffers. За функцию спасибо Хейзу, потому что я сам не осилил написать. ;)

Ну а тут лежит весь мой .emacs.

UPD. Функция группировки, конечно, порядочно усовершенствовалась со времени написания этого поста…

Emacs

Ясное дело, любой человек, который достаточно плотно общается с компами - ищет себе подходящий редактор. Но если у большинства людей эта проблема не стоит достаточно остро, у программистов вообще IDE обычно есть, то для никсового админа редактор - основной инструмент производства. И лидером у большинства из них является vim, который хоть и модальный, но зато после небольшого разбирательства очень простой и лёгкий (быстро запускающийся) редактор. Есть, конечно, некоторое количество отступников - которые используют, к примеру, joe (превед, Антонз ;), или там еще какой jed/nano/etc.

Особняком стоит Emacs, который создавался как инструмент для программиста - но в действительности он содержит столько удобных вещей, что является реально удобным инструментом. Раньше я его использовал в основном только как почтовый клиент да xml-редактор, а потом забросил - уж больно тяжко запускался. Но тут пришлось редактировать файлики с кодом, а нормальных редакторов на замену найти не могу (из лучшего - EmEditor и SCiTE, но они оба и в подмётки :)), потому достал емаксище с полки.

Ну и заодно зашёл на emacswiki.org, который, как оказалось, достаточно сильно обновился. Ну я и решил сюда позаписывать на всякий случай всякие удобные фичи.


Первым делом - переключалка буферов. Кинуть в load-path, и написать в конфиг такую вот фигню:

(require 'prh-bufsw)
(setq stesla-hated-buffer-regexps '("^ " "*Buffer" "^\\*trace" "^\\*tramp" "^\\*"))
(pc-bufsw::bind-keys [C-tab] [C-S-tab])
(pc-bufsw::bind-keys [f12] [f11])
(setq pc-bufsw::quite-time 1)

Переопределяю тут регулярное выражение, маскирующее лишние буферы (я себе убрал все, что начинаются на *), плюс биндятся стандартные по другим программам клавиши C-tab/C-S-tab и, для удобства, F11 и F12. Ну и ставится таймаут на время показывания списка буферов переключаемых в 1 секунду.

Вот с такой штукой в минибуфере будет появлятся список буферов (которые не попали под исключающие правила), среди которых будет выделен текущий выбранный.


Теперь немножко GnuServ’е. Это такая дрянь, которую я не знаю, где скачать, и у меня сильно дурной инет, для того чтобы выкладывать. Называется gnuserv.exe и gnuclientw.exe. Плюс gnuserv.el.

В .emacs пишется (require 'gnuserv), и Емакс запускается программой gnuclientw.exe. Теперь будет один емакс, а всё остальное - его фреймы. Что быстро. ;)

Плюс можно сделать так, чтоб не появлялось их большое количество, а всё открывалось в одном (первом) фрейме.

(defadvice server-find-file (before server-find-file-in-one-frame activate)
    "Make sure that the selected frame is stored in `gnuserv-frame', and raised."
    (setq gnuserv-frame (selected-frame))
    (raise-frame))

(defadvice server-edit (before server-edit-in-one-frame activate)
    "Make sure that the selected frame is stored in `gnuserv-frame', and lowered."
    (setq gnuserv-frame (selected-frame))
    (lower-frame))

Эти функции заодно и поднимают его окошко наверх, когда в каком-то тотале его повесишь на F4. И нажмёшь эту кнопку. ;)


Теперь - парочка полезных комбинаций клавиш.

  • M-z - спрашивает символ, и удаляет до его первого появления в тексте дальше. С префиксом - удаляет до н-ного (соответственно, можно и до негативного - удалить назад).
  • C-M-k - удаляет так сказать завершённую фразу. Ну, к примеру, от кавычки до соответствующей кавычки. Или от открывающей скобки до соответствующей ей закрывающей скобке.
  • C-u M-! - вставляет результат исполнения шелл-команды в текущий буфер.
  • C-u M-| - берёт выделенный регион как stdin для программы, и заменяет его её stdout’ом.

Всякая фигня, которую я написал, чтоб было веселее жить. ;)

;; kill current buffer
(defun prh:kill-current-buffer ()
    (interactive)
    (kill-buffer (current-buffer)))

(global-set-key (kbd "C-x w") 'prh:kill-current-buffer)

;; set right ;) font and maximizes
(defun prh:ajust-frame ()
  "Ajusts current frame to display properties"
  (interactive)
  (set-default-font "-outline-Unifont-normal-r-normal-normal-16-120-96-96-c-*-*")
  (w32-send-sys-command 61488))

(global-set-key [C-f12] 'prh:ajust-frame)

И собственно разные неочевидные фичи.

  • Всякие замены при выделенном регионе производятся конкретно над ним.

Позже, может, еще допишу. Да и выложу конфиги + всякую всячину.

Text Editors

Выбор текстового редактора - это однозначно очень напряжная штука.

Помню, когда-то давно, окончилось это где-то на первом курсе - я использовал Aditor, и был вполне доволен. Но как раз и отказался от него потому, что как раз начал в консольке рыться - на вииях, и начал использовать vim. Угу, некоторое время я его даже на своём компе в качестве дефолтного редактора держал, пока случайно не попал на EmEditor - и вот эта штука у меня прижилась надолго. <!—more—>

Примерно через год (несколько больше двух лет назад - в марте вроде это было) Хейз с Дымом заразили меня Емаксом. И до конца того семестра я точил и точил свой конфиг. ;) Отлично помню обмен удачными находками в конфигах, потраченными на это дело выходными, ну и так далее. ;) В результате получился довольно удобный конфиг, плюс на некоторое время прекратили своё существование (в качестве моих утилит, естественно ;) mutt и vim. Плюс пытался заменить EmEditor, который упорно сопротивлялся. ;)

После того произошло еще много чего, в том числе и полгода jed’а в никсах, но сейчас всё опять по-прежнему: vim в качестве редактора в консоли, EmEditor в качестве редактора по дефолту в винде и Emacs в качестве ньюсо/почточиталки - и, естественно, редактора.

Но у них у всех есть свои недостатки:

  • Emacs - ну тут понятно. Это был бы идеальный вариант, если бы он не весил в озухе туеву хучу мегов. Или хотя бы запускался быстро. Но - увы - оно толстое и прожорливое, что в качестве почитать почту катит - я его один раз запускаю, но в качестве редактора всяких конфигов и мелких файлов - аж никак.

  • vim - его модальность последнее время меня всё больше и больше достаёт. С одной стороны - удобно, что вроде как комбинации клавиш проще, с другой - я и так Емаксовые знаю неплохо, а Ctrl-K мне в виме не хватает. ;) А времени на редактирование уходит больше

  • EmEditor - это в принципе отдельная история, и он не подходит для редактирования конфигов (под никсами не работает ;), но его, похоже, тоже нужно менять.

И я, перещупав кучу редакторов, так и не смог найти такой, который бы понравился. :( Ну вот какой редактор в никсах есть, чтоб нормально работал со скринами, чтоб имел нормальные бинды, ну и был достаточно функционален в стиле “заменить всё в этом выделении”? Такое вообще реально?