Отступ Objective-C в Emacs - PullRequest
       12

Отступ Objective-C в Emacs

3 голосов
/ 06 августа 2009

Я использую Emacs для редактирования своего кода Objective-C. Отступ по умолчанию выглядит следующим образом:

    NSTimer *timer =
        [NSTimer timerWithTimeInterval:1.0
                 target:self
                 selector:@selector(callback:)
                 userInfo:nil 
                 repeats:YES];

Я бы хотел, чтобы Emacs делал отступ для кода, подобного XCode, то есть для выравнивания с двоеточиями:

    NSTimer *timer =
        [NSTimer timerWithTimeInterval:1.0
                                target:self
                              selector:@selector(callback:)
                              userInfo:nil 
                               repeats:YES];

Есть ли надежда добиться этого?

Ответы [ 3 ]

6 голосов
/ 08 августа 2009

Что-то не так с c-lineup-ObjC-method-call-colons для objc-method-call-cont в c-offsets-alist?

6 голосов
/ 07 августа 2009

Я немного взломал это и стал ближе, но он еще не полностью функционален. Решение, которое я имею, состоит в том, чтобы добавить запись в align-rules-list, чтобы простой M-x align справился с задачей. Проблема в том, что вам нужно дважды запустить align, чтобы заставить его работать.

(obj-c-colons
 (regexp . "^\\(\\s-*[^:]+\\):")
 (justify . t)
 (repeat . t)
 (modes obj-c-mode)) ;; <= Replace with actual name of major mode

На самом деле я не знаю, как называется режим target-c, поэтому вам придется заменить obj-c-mode на то, что этот режим на самом деле называется. Вы можете добавить это к align-rules-list с помощью:

(add-to-list 'align-rules-list
             '(obj-c-colons
               (regexp . "^\\(\\s-*[^:]+\\):")
               (justify . t)
               (repeat . t)
               (modes obj-c-mode)))

На данный момент вы должны выполнить align дважды; первый раз выстроится только так:

 NSTimer *timer =
        [NSTimer timerWithTimeInterval:1.0
                              target:self
                            selector:@selector(callback:)
                            userInfo:nil
                             repeats:YES];

Обратите внимание, что двоеточия - это два символа слишком далеко слева. Второй align исправит это. Не спрашивай меня почему.

Существует много всего, что происходит с командой align, поэтому выяснить это сложно. Надеюсь, кто-то придумает способ улучшить это. В любом случае, посмотрите на соответствующую страницу EmacsWiki для получения дополнительной информации о выравнивании.

0 голосов
/ 23 декабря 2011

Существует режим Objective C, который делает это здесь

Вот как это выглядит как

...