LINUX.ORG.RU

установи auto-complete и auto-complete-clang либо company-mode
и если поставишь правильный символ — будет список членов, если не правильный — в минибуфере будет ошибка

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

иными словами можно, если сильно захотеть, но готового нигде не видел и самого как-то не тянет такое делать

Bad_ptr ★★★★★
()
int main()
{
FILE *pf=fopen("/home/$USER/myfile");

int ch;

while((ch=getch(pf))!=EOF)
{

 if(ch=='.')
 {
   ch=' ';
   printf("->")
 };

 printf("%c",ch);



};
return 0;
}

Dron ★★★★★
()
Последнее исправление: Dron (всего исправлений: 1)

Можно ли настроить emacs, чтоб он сам в подобных случаях заменял . на ->?

Автоматически все точки заменять? или имеется в виду по нажатию TAB? Во втором случае есть yasnippet.

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

автоматически или нет?

Не все точки, а только те, на месте которых должно быть ->.

Правила определите сами. вот набросок:

(add-hook after-change-functions 'my-replace)
(defun my-replace ()
  (when (= (char-before) ?.)
    (delete-backward-char)
    (insert "->")))

iVS ★★★★★
()

Kdevelop хоть и ужасен для меня, но он автоматических делает эту замену, емнип.

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

:)

Ну это же так быдлокод с примером ,ну давай добавим правила

int main()
{
FILE *pf=fopen("/home/$USER/myfile","r");

int ch;
int postbuff;
int point;
while((ch=getch(pf))!=EOF)
{

 if(ch=='.')
 {
    postbuff=getch(pf);
   
    if(postbuff!=0&&
       postbuff!=1&&
       postbuff!=2&&
       postbuff!=3&&
       postbuff!=4&&
       postbuff!=5&&
       postbuff!=6&&
       postbuff!=7&&
       postbuff!=8&&
       postbuff!=9&&
      )
   {
   point=1;
   ch=' ';
   printf("->");

   };
 };
   printf("%c",ch);

if(point==1)
{
 printf("%c",postbuff);
 postbuff=NULL;
 point=0;
 
};


};
return 0;
}


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

http://ru.wikipedia.org/wiki/Stdio.h FILE структура, содержащая информацию о файле или текстовом потоке, необходимую для выполнения её операций ввода и вывода.

И?

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

Осталось "самое простое" - найти объявление переменной чтобы определить, надо заменять или не надо.

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

Я старался :) И 2`ух зайцев с разу 1-он не работает 2-он ужасен.

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

Осталось «самое простое» - найти объявление переменной

Нужны специальные пакеты CEDET или, возможно, только Semantic. У последнего есть функции semantic-get-local-variables и semantic-get-all-local-variables. Но я никогда этим не пользовался.

P.S. А код-то я написал неправильный. вот корректный:

(defun my-replace (start stop len)
  (when (and (= (- stop start) 1)
             (= (char-before stop) ?.))
    (delete-backward-char 1)
    (insert "->")))
(add-hook 'after-change-functions 'my-replace)

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

Вот это

if(postbuff>9)
да. А там огого :)

Я просто надеялся будет срачка по этому коду, но чего то только ты и s9gf4ult заметили этот ужас.

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

будет срачка по этому коду

Очень толсто.

Даже если опустить тот факт, что этот код не работает и криво написан, он все равно делает не то.

По сабжу - плюсую QtCreator.

solovey ★★
()
Ответ на: комментарий от Dron
if(postbuff>9)

тогда уже

if (!isdigit(postbuff))

или

if (postbuff < (0 + '0') || postbuff > (9 + '0'))

и да, как ты собираешься обрабатывать вариант var1. ?

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

тогда уж !='1'. Но и это не будет работать, потому что я могу обозвать структуру abc123, и твоя прога сядеть в лужу.

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

Вот с таким кодом в конфиге работает как надо.

(defun my-replace (start stop len)
  (when (and (= (- stop start) 1)
             (= (char-before stop) ?.)
	     (string-match "\*" (semantic-ia-show-summary (- (point) 2))))
    (delete-backward-char 1)
    (insert "->")
  )
)
(add-hook 'after-change-functions 'my-replace)

Спасибо!

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

Вот с таким кодом в конфиге работает как надо.

А что делает semantic-ia-show-summary и откуда она берет информацию? Будет ли работать с typedef? Будет ли работать со smart pointers?

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

Возвращает объявление переменной под курсором. Если в объявлении есть * - значит надо заменять . на ->. Со smart pointers мой код работать не будет, для них надо другую regexp написать.

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

Как редактор лучше буду использовать редактор, а не мини-IDE.

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

Если в объявлении есть * - значит надо заменять

Можно проверять, что объявление начинается с *:

(string-match "\\`\\*" (semantic-ia-show-summary (- (point) 2)))

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

Она называется «Enable auto-replace fo '.' with '->' for pointer types».

Очевидно, что Eclipse при этом пользуется своим индексатором для семантики. Т.е. заменяться будет только для реально указателей. Для умных не работает т.к. они обычные классы и у них есть свой .

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

Для умных не работает т.к. они обычные классы и у них есть свой .

Неудобно кстати, в Visual Assist лучше сделано: там всегда заменяется для smart pointers, но по backspace '->' заменяется обратно на '.', если именно методы самого указателя нужны.

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

В eclipse для cmake и плагин не нужен, но у него абсолютно монструозный интерфейс и никакая скорость работы. Та же замена . на -> выполняется минимум полсекунды.

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

Т.е. работает оно так же, как сейчас у меня в емаксе.

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