LINUX.ORG.RU

Emacs настройка отступов

 , ,


0

4

Привет всем.

Кто знает/помнит такие настройки Emacs, подскажите пож-ста, как настроить пользовательский конфиг, чтоб по клавише «Tab» он не умничал, перепрыгивая в позицию первого пробела верхней строки, а тупо (это я ляпнул «сгоряча») вставлял заданное количество заданных пробельных символов?

А то по «C-h a indent» вываливает кучу статей на чужом языке, где фиг что найдешь ;-)

а вот это не помогает

(setq-default tab-width          4)
(setq-default c-basic-offset     4)
(setq-default standart-indent    4)

---

спасибо активной помощи Zmicier.


перепрыгивая в позицию первого пробела верхней строки

Что?

а тупо вставлял заданное количество заданных пробельных символов?

Очень плохой выбор. Но тем не менее, чего тут помнить?

(define-key global-map (kbd "TAB") (kbd "C-u 4 SPC"))
Zmicier ★★★★★ ()
Ответ на: комментарий от Zmicier

Спасибо, немного обескуражен что через «define-key»! Как-то слишком радикально...

Может можно что-то в режиме скорректировать? Это у меня GNU Emacs 25.3.1 имеет такое поведение по-умолчанию при редактировании в том числе простого текста (*.txt):

...
администрирование системы под управлением...
                  - os linux ...
                ^^^

такой вот отступ втыкается табом - ведь не айс! Тут логичнее просто пару пробелов поставить.

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

Как-то слишком радикально

Сами попросили.

Может можно что-то в режиме скорректировать?

Можно, конечно. Только, хорошо было бы сказать, в каком. В text-mode, я так понял.

такой вот отступ втыкается табом - ведь не айс! Тут логичнее просто пару пробелов поставить.

На вкус и цвет все люди разные.

Мне, когда надо пару пробелов, логичнее нажать пару пробелов. А на табуляторе оставил бы M-x indent-relative — вещь весьма полезную.

Тем не менее, бога ради:

(defun insert-tab ()
  (interactive)
  (insert (if indent-tabs-mode "\t" (make-string tab-width ?\s) )))

(define-derived-mode noindent-text-mode text-mode "Noindent Text"
  :abbrev-table nil :syntax-table nil
  (setq-local indent-line-function #'insert-tab))

(add-to-list 'auto-mode-alist '("\\.txt\\'" . noindent-text-mode))

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

Это происходит только в тексте на русском?

В любом.

И в какой кодировке?

Современные версии ГНУ Емакса работают по-умолчанию только в одной кодировке — в своей собственной.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 2)
Ответ на: комментарий от bigov

А вообще — при редактировании простого текста помимо M-x indent-relative (из коробки косвенно назначена на TAB, он же C-i) еще может быть весьма полезна M-x tab-to-tab-stop (на M-i).

Возможно, вы на самом деле ее и ищете?

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Таки оно, спасибо.

А подскажите, символ «шарп» перед одинарной кавычкой в ваших примерах, это особенности движка форума или синтаксическая конструкция? При беглом просмотре доки по Имакс-лисп мне такой комбинации не попадалось.

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

Да, если это зацепить за хук на «plain text» - то как раз то, что надо. Странно, что до этого никто не додумался сделать так по дефолту. Впрочем, как вы упомянули выше - «на вкус...»

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

Всегда пожалуйста.

А не надо бегло просматривать, там индекс есть.

<f1> i m elisp i #'

Voila:

   The read syntax ‘#'’ is a short-hand for using ‘function’.  The
following forms are all equivalent:

     (lambda (x) (* x x))
     (function (lambda (x) (* x x)))
     #'(lambda (x) (* x x))

(info "(elisp) Anonymous Functions")

В данном случае оно не служит ничем, кроме как указанием читателю, что за символом скрывается именно функция. А вообще байт-компилятору это полезно знать.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 2)
Ответ на: комментарий от bigov

Да, если это зацепить за хук на «plain text» - то как раз то, что надо.

Пардон, что́ «это»? Я не советовал ничего, что непринужденно бы цеплялось за хук.

И вообще — цеплять что-то за хук text-mode’а надо очень осмотрительно — он предок чертовой кучи режимов.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

В том смысле, что я у себя в конфиге настроил для буфера, в котором открыт файл *.txt менять функционал для <tab> на

...
(tab-to-tab-stop)

Insert spaces or tabs to next defined tab-stop column.

Умный таб мне тут никчему. Как-то так.

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

я у себя в конфиге настроил для буфера, в котором открыт файл *.txt менять функционал для <tab> на

Сколько слов, а смысла не прибавилось. Неужели было проще все это писать, чем просто скопировать?

Если вы сделали что-то типа:

(define-key text-mode-map (kbd "TAB") #'tab-to-tab-stop)

— поздравляю, вы сломали, к примеру, html-mode. Я поэтому в примере выше и определял новый major mode.

Умный таб

Ха! Это какой из них умный?

indent-relative — около тридцати строчек. tab-to-tab-stop вместе со специально для нее написанными зависимостями — больше сотни.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.