2011-12-13 3 views
0

Как некоторые из вас, кто использует GNU/Emacs для разработки на Android, вы, несомненно, знаете, что в последних Android-инструментах есть new xml formatter. Я использую отличную nxml-режим для редактирования XML, так как ... Я редактировать XML-файлы;) и я очень счастлива с ним, но ... как я могу настроить Nxml Атрибут отступа переменной, документация говорит:Настроить отступ GNU/Emacs 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? Я просто ничего не нашел в документации и погуглить не удалось ...

Update:

Комментарий помогает мне понять, что я не ясно. Таким образом, вот пример того, что 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 режим поведения отступа):

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

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

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

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

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

Приветствия,

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

+0

Можете ли вы показать некоторые примеры XML? Я не понимаю, что вы подразумеваете под «резервными ошибками», для которых автономный атрибут выравнивается по первому атрибуту, когда этот находится в той же строке, что и элемент ». – mzjn

+0

Вопрос обновлен с фрагментами XML;) Извините, я должен был поместить их сначала ... – Renaud

ответ

1

Безразлично Похоже, это поведение легко модифицируется, поскольку оно, по-видимому, жестко закодировано в функции 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, чтобы сделать это поведение легко настраиваемым в будущем.

+0

Спасибо, я попробую это и сообщите, если мне удастся заставить его работать (и проверить ваш ответ;)) – Renaud

Смежные вопросы