Настройте отступ GNU / Emacs в режиме nxml. - PullRequest
1 голос
/ 13 декабря 2011

Как некоторые из вас, кто использует GNU / Emacs для разработки под Android, вы наверняка знаете, что в новейших инструментах Android есть новый XML-форматер . Я использую превосходный nxml-режим для редактирования xml, так как… я редактирую xml файлы;) и я очень доволен этим, НО… поскольку я могу настроить переменную Inxribute Indent Nxml, документация гласит:

Indentation for the attributes of an element relative to the start-tag. Hide   
This only applies when the first attribute of a tag starts a line.
In other cases, the first attribute on one line is indented the same
as the first attribute on the previous line.

Важно то, что существует запасной вариант, для которого автономный атрибут выравнивается по первому атрибуту, когда он находится на той же строке, что и элемент.

Можно ли изменить это поведение, чтобы получить совместимый с Android Tools отступ? Я просто ничего не нашел в документации и погуглил не удалось ...

Обновление:

Комментарий помогает мне понять, что я не ясен. Таким образом, вот пример того, что nxml-режим делает по умолчанию:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="org.foo.bar"
          android:versionCode="1"
          android:versionName="1.0">

  <uses-sdk android:minSdkVersion="8" />
  <application
      android:label="@string/app_name"
      android:icon="@drawable/ic_launcher">

    <activity
        android:name="Foo"
        android:label="@string/foo" />

    <activity android:name="Bar"
              android:label="@string/bar" />

  </application>

</manifest>

Что бы я хотел получить:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.foo.bar"
    android:versionCode="1"
    android:versionName="1.0">

  <uses-sdk android:minSdkVersion="8" />
  <application
      android:label="@string/app_name"
      android:icon="@drawable/ic_launcher">

    <activity
        android:name="Foo"
        android:label="@string/foo" />

    <activity android:name="Bar"
        android:label="@string/bar" />

  </application>

</manifest>

Первый случай (поведение отступа в режиме nxml по умолчанию):

  • атрибут package элемента manifest выровнен с xmlns:android decl
  • атрибут android:label элемента Bar activity выровнен с элементом android:name.

Второй случай (ожидаемый результат):

  • атрибут package элемента manifest выровнен с родительским элементом manifest плюс настраиваемое количество пробелов
  • атрибут android:label элемента Bar activity выравнивается по родительскому элементу плюс настраиваемое количество пробелов

Я просмотрел исходный код в режиме nxml и поведение отступа начинается с nxml-indent-line, но мне не удалось проследить за многими подпозвонками, чтобы увидеть, что defun следует настроить ... из-за отсутствия у меня знаний о lisp.

Вы могли видеть, что второй атрибут manifest не выровнен с первым

Приветствия

Renaud (с трудом справляется с огромной головной болью, чтобы соответствовать правилам кодирования и форматирования Android)

1 Ответ

1 голос
/ 14 декабря 2011

не похоже, что это поведение легко модифицируемо, так как кажется, что оно жестко запрограммировано в функции nxml-compute-indent-in-start-tag.соответствующий фрагмент кода выглядит следующим образом:

              (let* ((att (car atts))
                     (start (xmltok-attribute-name-start att)))
                (when (< start pos)
                  (goto-char start)
                  (setq off 0))))

вы всегда можете скопировать этот метод в свой собственный файл инициализации, закомментировать эти строки и загрузить определение функции после загрузки в режиме nxml (который переопределиторигинальная реализация).

Обратите внимание, что вы также можете отправить запрос на усовершенствование сопровождающим gnu emacs, чтобы в будущем это поведение было легко настраиваемым.

...