LINUX.ORG.RU

Статья «Emacs с удобствами».


0

0

Новая статья о Emacs. По сути, продолжение статьи "Точки Emacs" (которая со времени первой публикации очень сильно изменилась). Кроме общих приколов содержится информация о компиляции в Emacs, о ECB, которая превращает Emacs в более полную интегрированную среду разработки программ (и не только программ) и о взаимодействии Emacs с CVS. Кажется это первый более-менее подробный материал о ECB на русском. Есть скриншоты с примерами. Проводится идеология экономии пальцевых усилий в работе и предлагается возможное подспорье.

Всякая конструктивная критика яростно ;) приветсвуется. Благодаря ЛОРу первая статья была радикально переработана и улучшена за что всем огромное спасибо.

>>> Сама статья "Emacs с удобствами"

★★★

Проверено: Demetrio ()

Ответ на: комментарий от LX

>Очень бы хотелось увидеть подобную статью, про то, как прикрутить GDB >к Emacs Имеется ввиду расстановка breakpoints, watch ну и подобные >вещи.

А ты в меню tools Debuger не находил?

gdb давно прекручен.

anonymous
()
Ответ на: комментарий от anonymous

Вот новая версия:

(defun my-complex-replace (b e)
  "Complex replace."
  (interactive "r")

  (let (ost nst nrepls)
    (unwind-protect
        (progn
          (narrow-to-region b e)
          (setq ost (buffer-substring (point-min) (point-max)))
          (message "Press `C-M-c'(or whatever) when you finished.")
          (recursive-edit)
          (setq nst (buffer-substring (point-min) (point-max)))
          (delete-region (point-min) (point-max))
          (insert ost))
      (widen))

    (save-excursion
      (goto-char (point-min))
      (setq nrepls 0)
      (while (search-forward ost nil t)
        (setq nrepls (1+ nrepls))
        (replace-match nst))
      (unless (zerop nrepls)
        (message "Total %d replaces." nrepls))
      )
    ))

но чтобы был виден текст во время модификации это немного сложнее и
различно для GNU Emacs и XEmacs .. нужно использовать overlay(GNU 
Emacs) или extent(XEmacs) .. к тому же если еще сказать что нельзя 
выходить за рамки региона то тут надо пользовать 
atomic-extents(XEmacs) ..   не знаю как обстоят дела с этим в GNU 
Emacs

lg ★★
()
Ответ на: комментарий от lg

> Вот новая версия:

Отлично. Спасибо. Уже можно использовать. Только курсор почему-то ставится в левый верхний угол окна и я не вижу строк которые выше. Рецепт про поля из статьи поможет?

> но чтобы был виден текст во время модификации это немного сложнее и различно для GNU Emacs и XEmacs ..

Мне для GNU Emacs. Но если даже тебе это сложно то и на том спасибо.

> если еще сказать что нельзя выходить за рамки региона

А вот это совсем не нужно.

anonymous
()
Ответ на: комментарий от hbee

> А как насчёт цветного diff'а с автофолдингом одинаковых частей, наподобие vimdiff? :)

Не до конца понятно, что именно имелось в виду...

Если нужен режим облегчающий правку или просто прыжки по уже готовому diff'у -- то diff-mode

Если же "визуальный" front-end к diff'у -- то ediff (ediff (он же ediff-files), ediff-buffers, ediff-directories, и т.д. и т.п.)

awn
()
Ответ на: комментарий от anonymous

мсье знает толк в извращениях

> Имакс замечательная среда разработки. Единственный конкурент для него под Вынь - это MultiEdit.

Не, это VS + vim с OLE extension.

Dselect ★★★
()
Ответ на: комментарий от anonymous

> Просто похоже процент настоящих программеров в форуме стремится к
> нулю. Имакс замечательная среда разработки. Единственный конкурент для
> него под Вынь - это MultiEdit. Кто знает что это такое - меня поймет.
1. Уровень програмиста не определяется используемым редактором (помнишь чем Левша блоху подковал? А знаешь что были времена, когда писали в ed - они типа были отстоем и дурачьем?)
2. MultiEdit ИМХО сильно уступает vslick'у.
3. Vim вполне сопоставим с emacs, разве что подходы к одному и тому же разные.

PS: А всем говорящим о пальцатостях и каменных веках или про рулезы и саксы - дружно пересаживаться на ed.

eXOR ★★★★★
()
Ответ на: комментарий от bzImage

2bzImage

>Есть с ecb одна засыпка. Я не знаю как отключить truncate в буфере редактирования. Настройки для остальных буферов в ecb есть, а для буфера редактирования - нет. :(

Для буфера редактирования все настройки делаются в .emacs так как по задумке этот буфер не должен отличаться от режима без ECB вообще. Для отключения автоматической обрубки строк посмотрите функцию turn-on-auto-fill, turn-off-auto-fill и переменную auto-fill.

Чтобы включить авто-заполнение (это ведь и есть то, что вы называете "транкейт"?) только для текстовой моды, у меня в .emacs есть команда:

(add-hook 'text-mode-hook 'turn-on-auto-fill)

atoku ★★★
() автор топика
Ответ на: комментарий от lg

2lg

>Положить текущую позицию в стек - `C-x <SPC>'

>Прыгнуть на позицию в вершине стека - `C-u C-x <SPC>'

У меня это не работает. Может это только для XEmacs?

atoku ★★★
() автор топика
Ответ на: комментарий от awn

> Недостаточно информации. Что понимать под "большим перемещением"? Например, 'beginning-of-buffer' ('M-<') и 'end-of-buffer' ('M->') запоминают старую позицию в mark-ring'е автоматически.

> См. info node 'Mark Ring' для деталей.

Почти то, что нужно. Только работает немного странно (непривычно): непонятное деление на локальную и глобальную историю, перемещение только по кругу, а не вперед-назад, забывает позицую, с которой вызываешь pop-mark (на нее можно вернуться только руками).

> Так же некоторые команды имеют своё собственное кольцо/стэк позиций. Например, если прыгаешь по тэгам ('find-tag' ('M-.'), 'tags-loop-continue' ('M-,')) -- то "пройти путь обратно" можно по 'pop-tag-mark' ('M-*').

Тоже непонятно, почему не используется одна история на все перемещения.

anonymous
()
Ответ на: комментарий от lg

> Положить текущую позицию в стек - `C-x <SPC>'

> Прыгнуть на позицию в вершине стека - `C-u C-x <SPC>'

У меня не работает. Нашел только `C-x C-SPC': C-x C-SPC runs the command pop-global-mark.

anonymous
()
Ответ на: комментарий от atoku

> Чтобы включить авто-заполнение (это ведь и есть то, что вы называете "транкейт"?) только для текстовой моды, у меня в .emacs есть команда:

Скорее всего надо toggle-truncate-lines.

anonymous
()
Ответ на: комментарий от anonymous

>У меня не работает. Нашел только `C-x C-SPC': C-x C-SPC runs the command pop-global-mark.

А чем не устраивает рекомендация из первой статьи? Только одна позиция запоминается, поэтому?

atoku ★★★
() автор топика
Ответ на: комментарий от atoku

> У меня это не работает

звиняйте хлопцы - это мои локальные биндинги которые я уже стал считать дефольтными :)

lg ★★
()
Ответ на: комментарий от anonymous

>> Чтобы включить авто-заполнение (это ведь и есть то, что вы называете "транкейт"?) только для текстовой моды, у меня в .emacs есть команда:

>Скорее всего надо toggle-truncate-lines.

Ага, надо. Вот только какого хрена ecb мне его включает? Без ecb - нет truncate с ecb - есть. Причем опции для отключения в буферах деревьев есть в вто для буфера редактирования - нет.

Набирать каждый раз или биндить клавиши не хочется. Вопрос так и остался. Какого хрена?

anonymous
()
Ответ на: комментарий от anonymous

>Набирать каждый раз или биндить клавиши не хочется. Вопрос так и остался. Какого хрена?

А хрен его знает. :)

atoku ★★★
() автор топика
Ответ на: комментарий от lg

>> У меня это не работает

>звиняйте хлопцы - это мои локальные биндинги которые я уже стал считать дефольтными :)

:) Прикол. А я намучился разбираться, почему у меня не работает.

atoku ★★★
() автор топика
Ответ на: комментарий от atoku

Emacs Wiki

2lg:

Вот, научился работать с Emacs Wiki. Я раньше, грешным делом, думал, что это только ты поддерживаешь русский Emacs wiki :) Впрочем, похоже это не очень далеко от истины ;)

atoku ★★★
() автор топика
Ответ на: комментарий от anonymous

>> См. info node 'Mark Ring' для деталей.

[skip]

>> Так же некоторые команды имеют своё собственное кольцо/стэк позиций. Например, если прыгаешь по тэгам ('find-tag' ('M-.'), 'tags-loop-continue' ('M-,')) -- то "пройти путь обратно" можно по 'pop-tag-mark' ('M-*').

> Тоже непонятно, почему не используется одна история на все перемещения.

Потому, что mark-ring -- локальный для каждого буфера, а pop-tag-mark прыгает и между буферами тоже.

Почему же "штатный" mark-ring столь "странен" -- этого сказать не могу. Скажем прямо, дальше одной позиции вглубь я им не пользуюсь и для скоростного "доступа к точкам" использую тэги, FuMe (Function Menu) и регистры. Причина -- для меня XEmacs в первую очередь мощная IDE, а уже во ворую редактор для "обычных человеческих" текстов.

awn
()
Ответ на: комментарий от anonymous

>> Скорее всего надо toggle-truncate-lines.

> Ага, надо. Вот только какого хрена ecb мне его включает? Без ecb - нет truncate с ecb - есть. Причем опции для отключения в буферах деревьев есть в вто для буфера редактирования - нет.

> Набирать каждый раз или биндить клавиши не хочется. Вопрос так и остался. Какого хрена?

А если хук на моду повесить и из него выключать? Костыль, конечно... Но...

Но с 33-й стороны может кто-то использующий ECB что-нибудь более "прямое" подскажет? (я лично никогда ECB не использовал -- не нужен)

awn
()
Ответ на: комментарий от atoku

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

anonymous
()
Ответ на: комментарий от awn

> Потому, что mark-ring -- локальный для каждого буфера, а pop-tag-mark прыгает и между буферами тоже.

В GNU Emacs есть еще global-mark-ring.

> Скажем прямо, дальше одной позиции вглубь я им не пользуюсь и для скоростного "доступа к точкам" использую тэги, FuMe (Function Menu) и регистры.

Понятно.

anonymous
()
Ответ на: комментарий от anonymous

to lg

2lg:

Hi! Thanks for note on my web page on wiki. I thought to translate a couple of materials from wiki to Russian. What would you advice to start from?

PS I could not leave a message on your page. Commitment was banned by wiki site.

atoku ★★★
() автор топика
Ответ на: комментарий от anonymous

>mcedit рулит. а все остальное - для пальцеватых

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

alphex_kaanoken ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.