Jump to page: 1 2 3
Thread overview
Geany IDE Kod Tamamlama
Oct 23, 2011
Ronin
Oct 24, 2011
zafer
Oct 24, 2011
Ronin
Oct 24, 2011
zafer
Nov 01, 2011
Ronin
Nov 02, 2011
zafer
Nov 02, 2011
Ronin
Nov 02, 2011
zafer
Nov 04, 2011
zafer
Dec 02, 2011
Ronin
Dec 04, 2011
zafer
Mar 15, 2012
Salih Dinçer
Mar 15, 2012
zafer
Jun 22, 2012
huseyin
Jun 22, 2012
zafer
Jun 23, 2012
huseyin
trileri KelimeMatik'e hazır
Dec 05, 2011
zafer
Dec 12, 2011
zafer
October 23, 2011

Merhaba arkadaşlar. Öncelikle herkese geçmiş olsun. Terör, kriz, deprem hepsi üst üste geliyor.

Ubuntu 11.10 kullanıyorum, geany kurdum D için. D nin de en son sürümünü digital mars dan indirmiştim. Kod tamamlama işini yapamıyorum. Biliyorum esasında geany veya ubuntu forum/liste lerine yazmam gerekirdi. Aktif kullanan arkadaşlar olduğundan önce buraya sormayı uygun buldum.

Şirkette windows makinada geany gayet güzel çalışıyordu D için. Yeni ubuntu, yeni sürüm D sorun çıkardı. Önerilerinizi rica ediyorum. Konu hakkında fikri olan var mı?
Saygılar.

Edit: Tags dosyaları bu işi hallediyormuş fakat D için olanını bulamadım. Hayalleniyorum sanırım. İşyerinde acaba C mi kodladım diye düşünmeye başladım. Kolay gelsin.

Edit2: http://www.geany.org/manual/0.14/index.html#generating-a-global-tags-file sanırım yapmam gereken burada yazıyor :)

Edit3: Yapamadım. Biraz daha uğraşayım. Bu arada çözüm önerilerinizi bekliyorum. Saygılar.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 24, 2011

Selamlar Ronin,

Sanırım D için ısınma turları atıyorsun :) Doğrusu buna çok sevindin deneyimli arkadaşlarla çok daha güzel projeler ortaya çıkarabiliriz.

Alıntı:

>

Ubuntu 11.10 kullanıyorum, geany kurdum D için. D nin de en son sürümünü digital mars dan indirmiştim. Kod tamamlama işini yapamıyorum. Biliyorum esasında geany veya ubuntu forum/liste lerine yazmam gerekirdi. Aktif kullanan arkadaşlar olduğundan önce buraya sormayı uygun buldum.

Bence doğru olanı yapmışsın, D dili ile uğraşan birinin bu forumdaki çözüme ulaşması Ubuntu forumlarındaki genel programlama alanı altındaki çözümleri ayıklayıp ulaşmasından çok daha kolay ve hızlı olur. Ayrıca bazen birimizin çaktığı küçük bir kıvılcım diğerlerinin elinde bir yangına dönüşebiliyor. (Bu biraz Newton ve elma ilişkisi gibi)

Bende Geany kullanıyorum, hem Windows (Windows7) hemde Linux (Debian6) ortamında diğer bir çok aracı denedim ama en sonunda buna karar verdim. Kod tamamlama özelliği olduğunu okumuştum ama bende bu özelliği aktif hale getirememiştim. Zaten küçük programlar yazdığım ve D ile ilgilenmek istediğim için üzerinde çok uğraşmadan normal şekilde kullanıma devam ediyordum. Bu arda şu tag olayınada bakmış hatta nette biraz araştırma yapmış ama hiç bir şey anlamamış ve onunda peşini bırakmıştım. Ancak senin mesajın kafama düşen elma misali bir anda kod tamamlama, geany ve tags arasındaki bağlantıyı kurmamı sağladı. Bazen sizede olur mu bilmiyorum. Kafamfa bir anda herşey netleşmeye başladı. Neyse daha fazla uzatmadan konuya dönelim.

Bilgi sahibi olmadan fikir sahibi olamayacağımıza göre önce bilgi verelim. Anladıklarımı aktarıyorum. Geany kod tamamlama özelliği için adına tags (http://wiki.geany.org/tags/start) dediği bir sistem kullanıyor. Bu sistemde ilgili dilin kütüphane dosyalarında bulunan fonksiyon, yapı v.s tanımlar uzantısı tags olan bir dosya içerisine ekleniyor. Bu şekilde örneğin d.tags isimli bir dosya elde ediliyor. Anladığım kadarıyla bu dosyanın iki farklı formatı var. Detay burada : http://www.geany.org/manual/current/index.html#global-tags-file-format

Böyle bir dosyayı elle oluşturmak tabi ki çok zahmetli ancak bu konuda Geany bize tagmanager isimli bir sistem ile yardımcı oluyor. Bu sistem temelde sizin gösterdiğiniz dosya içindeki bilgileri ayıklayıp bundan tags uzantılı bir dosya oluşturuyor. Dolayısıyla tamamlanacak kelimeler için gerekli tags dosyasını elde etmiş oluyorsunuz. Kullanımı:

C:\Geany\bin>geany -g D:\phobos.d.tags C:\dmd2\src\phobos\std\*.d

Bu satırı cmd üzerinde çalıştırdığımda d sürücüsünde phobos.d.tags isimli bir dosya oluştu. Bu dosya ile phobos içerisinde tanımlı bilgileri tags dosyası olarak elde etmiş oldum. Bundan sonrası nispeten kolaydı Geany >> Araçlar yolunda bulunan "Biçim Yükle" komutu ile Geanye tags dosyamı gösterdim ve kullanmaya başladım. Her ne kadar gelişmiş IDE araçları kadar güçlü olmasada iş görür bir tamamlama elde ettim.

Bundan sonraki adımda ise tags dosyasını her açılışta seçmek yerine sistemin tanıması için bazı ayarlar yapmak gerekiyordu. Bunun için tag dosyamızı Geanynin konfigürasyon klasörü içinde bulunan tags klasörüne kopyalamamız gerekiyor. Linuxdaki dağınık dosya yapısından dolayı Geany konfigürayon klasörünü her defasında uzunca bir süre arıyorum. Windowsda bu nispeten daha derli toplu genelde program files içindeki ilgili klasörde dosyaları bulmak mümkün ama bu sefer windowsda beni uğraştırdı. Bu arada uğraşmak istemeyenler için Geanynin küçük bir özelliğinden bahsetmek istiyorum. Üst (Çek) menüden Yardım >> Hata Mesajları bölümünü seçtiğinizde karşınıza bir ekran geliyor. Burada Geany ile ilgili bir çok bilgi mevcut örneğin şu bilgiye o ekrandan ulaştım.

12:15:49: Geany INFO : User config dir: C:\Users\Zafer\AppData\Roaming\geany

Bu küçük ama kullanışlı bilgiyide verdiktan sonra, yapılacak son şey phobos.d.tags dosyasını konfigürasyon klasörü içinde bulunan tags klasörüne kopyalıyoruz. Ardından yine "Biçim Yükle" diyerek konfigürasyon klasöründen tags dosyamızı yüklüyoruz. Geanyi kapatıp açıyor ve test ediyoruz Hepsi bu kadar.

Ben dosya içerisine phobos kütüphanesini ekledim ama başka kelimelerde eklenebilir. Ayrıca yine dilin kendi kelimleri while, foreach gibi kelimeleride dosyaya eklemek gerekiyor. Ronin ilgilenirsen dosyayı birlikte geliştirelim yada sen böyle eklemeler yaparsan bir kopyasınıda bana göndermeni rica ediyorum. Hatta Geany için güzel bir tags dosyası oluşturup geliştiricilere iletsek çok daha güzel olur. Ne dersin?

Bu dosyayı oluşturamadım, bunları anlamadım veya sadece dosyayı alıp yoluma devam etmek istiyorum diyenler için phobos için hazırladığım dosyayı şurdan indirebilirsiniz: http://www.zafercelenk.net/d_tags.zip

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 24, 2011

Çok teşekkür ederim Zafer hocam. Ben import klasörünü almayı denedim sürekli. Olaylara geniş bakmak konusunda bu yaşta olmama rağmen halen kendimi geliştiremedim. Bu da küçük bir öz eleştiri olsun. Teşekkürler.

Dosyayı beraber geliştirmek konusunda ne yapabiliriz ? Geany içindeki parser neye göre çalışıyor onu bilsek sanırım olur. Kaynak kodlarına bakmak lazım gelirse bakalım. İhtiyacımız var diye düşünüyorum.

Edit: Tags için birden fazla klasör ve ayrı ayrı dosya uzantısı gösterebilsek sanırım sorun büyük oranda çözülmüş olurdu. Komut satırından ona uğraştım biraz fakat bir sonuç elde edemedim. Akşam eve gittiğimde tekrar bakmayı düşünüyorum.

Edit2: En küçük fırsatta tekrar ne yapabileceğimi düşünüyorum. Bende çareyi her kütüphanenin dosyalarını ayrı ayrı işlemekte buldum. Daha düzgün birşey elde edebilirsem, ben de göndereyim. Yaptığım işlem C taglarının kullanımı gibi bir sonuca gitmediği için üzgünüm lakin yine de bayağı fonksiyon geldi şu an.

D diline ait rezerve edilmiş kelimeler yok dediğiniz gibi. Biraz daha araştırarak çözerim sanırım. Saygılar.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

October 24, 2011

Alıntı (Ronin):

>

Çok teşekkür ederim Zafer hocam. Ben import klasörünü almayı denedim sürekli. Olaylara geniş bakmak konusunda bu yaşta olmama rağmen halen kendimi geliştiremedim. Bu da küçük bir öz eleştiri olsun. Teşekkürler.

Rica ederim Ronin, senin sayende bende kod tamamlama özelliğine kavuştum, aslında benim sana bir teşekkür borcum var sen olmasan tags konusunu çoktan unutmuştum. Öz eleştiri yapmak iyidir ama bence sen iyisin :)

Alıntı (Ronin):

>

Dosyayı beraber geliştirmek konusunda ne yapabiliriz ? Geany içindeki parser neye göre çalışıyor onu bilsek sanırım olur. Kaynak kodlarına bakmak lazım gelirse bakalım. İhtiyacımız var diye düşünüyorum.

Doğrusu azmine hayran kaldım. Açıkcası ben Geanynin kaynak kodları arasına girmeyi gözüme kestiremiyorum. Neticede ikimizde çalışıyoruz ve çok vakti olan insanlar değiliz sanırım. Ben biraz daha basit bir şey düşünmüştüm yavaş yavaş geliştireceğimiz ve zamanla eksiksiz hale gelecek D için hazırlanmış bir tag dosyası, daha detaylı bir işe girmek istemiyorum çünkü yürütemediğimiz projeler bizim hevesimizi kırar ve bunu istemeyiz sanırım?

Alıntı (Ronin):

>

Edit: Tags için birden fazla klasör ve ayrı ayrı dosya uzantısı gösterebilsek sanırım sorun büyük oranda çözülmüş olurdu. Komut satırından ona uğraştım biraz fakat bir sonuç elde edemedim. Akşam eve gittiğimde tekrar bakmayı düşünüyorum.

Edit2: En küçük fırsatta tekrar ne yapabileceğimi düşünüyorum. Bende çareyi her kütüphanenin dosyalarını ayrı ayrı işlemekte buldum. Daha düzgün birşey elde edebilirsem, ben de göndereyim. Yaptığım işlem C taglarının kullanımı gibi bir sonuca gitmediği için üzgünüm lakin yine de bayağı fonksiyon geldi şu an.

D diline ait rezerve edilmiş kelimeler yok dediğiniz gibi. Biraz daha araştırarak çözerim sanırım. Saygılar.

Uğraşlarından anladığım kadarıyla bu işi ciddiye alıyorsun. Eğer gerçekten D için eksiksiz bir tags dosyası hazırlama projesi için gereken azim, kararlılık ve zamana sahipsen birlikte bir yol haritası çıkarıp birlikte çalışalım. Sanırım Ali'de bu konuda bize destek verecektir. Benimde kafamda bazı fikirler var. Sende tamam diyorsan birlikte devam edelim yok ben dosyamı hazırladım bu işimi görür diyorsan bir kopyada bana gönderirsen mutlu olurum :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 02, 2011

Biraz uğraştım konu hakkında. Vakit buldukça bakıyorum. El yordamı ile bu dosyayı oluşturmak için artık geliştirici listesine mail atmayı düşünüyorum. Şöyle 3-4 saat boşluk bulsam yapacağım.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 02, 2011

Alıntı (Ronin):

>

Konu adı: Başarısız denemeler

Kişisel gelişime takmış tiplerden değilim ama ne zaman yukarıda senin yazdığın gibi cümleler görsem aklıma hep şu söz gelir.

Alıntı:

>

Edison başarısız denemeleri için şöyle diyordu: "Elektriğin nasıl üretilemeyeceğinin bir yolunu daha buldum".

Diğer taraftan bende bir itirafta bulunayım. :blush: Yukarıdaki mesajımda her nekadar kaynak kodlara bulaşmak istemiyorum desemde senin azmin ve kararlılığın benide ateşledi sanırım, ve bir kaç gün sonra dayanamadım ve şuradaki https://github.com/geany/geany/tree/master/tagmanager tagmanager kaynak kodlarını incelemeye başladım. Amacım tagmanager'in tag kodlarını oluşturuken kullandığı algoritmayı anlamak ve bu algoritmayı temel alıp D dilinde benzer bir tag jenaratörü geliştirmekti ama maesef çözemeyince vazgeçtim. Belki tek başıma işin içinden çıkamadım bilmiyorum. Sen konuya mesaj yazmayınca seninde bıraktığını düşündüğüm için bende yaptıklarımla ilgili bir mesaj bırakmadım.

Eğer hala bu konu ile uğraşıyorsan sende benim gibi tek başına uğraşıp sonrada bıkıp bırakabilirsin :) İstersen birlikte düşünelim belki benim çözemediğim tagmanager algoritmasınıda çözeriz. Yada kodladığın bişeyler varsa nete koy birlite bakalım. Belki birlikte uğraşarak bir çözüm buluruz. Bence denemeye değer ;-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 02, 2011

Yok hocam bırakmış değilim, çünkü kullanmayı amaçlıyorum. Sadece boş zaman işi olduğu için hareketlilik olmaması normal. Tag dosyalarını çıkardım fakat daha önceden de yazdığım gibi içerisinde tüm ifade ve kütüphaneler yok. Visual Studio ile hazırlanmış bir ide vardı ona bakmıştım en son. Onda düzgün çalışıyordu mesela.

Sanırım Geany IDE de kod tamamlama özelliği hızlı gelsin diye böyle bir yola başvurmuşlar. Normalde, diğer editörler, import/include edilen dosyanın fonksiyon ve değişkenlerini kendisi buluyor. Bu biraz uzun sürebiliyor tabi. Özellikle eclipse bu hız konusunda sabıkalı.

Dediğim gibi, işlerden ve ailemden arta kalan zamanda buna bakacağım. Aklımda bir yol haritası yok, eğer böyle bir planlama ortaya koyabilirsek, işbirliği yapabiliriz. Sizin göz attığınız şeylere ben bakmam, siz de aynı şekilde ve böylece fazladan iş gücü kaybı yaşamamış oluruz.

Keşke Türkiyede de bu tür faydası olabilecek işler için şirketler, çalışanlarına zaman sağlasalar. Ben ancak arada, sırada çeviri yapıyorum gizli, kaçak (:

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 03, 2011

Bu otomatik tamamlama (intelligence + sense = intellisense) özelliğinin arka planda nasıl çalıştığını ve IDE'ler tarafından nasıl entegre edildiğini doğrusu bilmiyorum. Aslında bu konuda bilgimiz olsa belki yardımı olurdu. Neyse neticede bizim şimdi çözüm aradığımız konu D modüllerinin içinde bulunan metodları nasıl bir tag dosyası haline getirip Geany programına tanıtabileceğimiz. Hatta ilerleyen zamanda değişen D modül dosyalarını hızlı bir şekilde adapte edebilecek bir otomsyon tasarımını nasıl geliştirebiliriz konusu diye düşünüyorum.

Alıntı (Ronin):

>

Dediğim gibi, işlerden ve ailemden arta kalan zamanda buna bakacağım. Aklımda bir yol haritası yok, eğer böyle bir planlama ortaya koyabilirsek, işbirliği yapabiliriz. Sizin göz attığınız şeylere ben bakmam, siz de aynı şekilde ve böylece fazladan iş gücü kaybı yaşamamış oluruz.

Bizimde henüz bir yaşını doldurmuş küçük bir kızımız var dolayısıyla benimde fazla zamanım olmuyor. Yinede burada bulunmak, dışarıdaki herhangi birisi için önemsiz küçük bir projeyi beraber geliştirmek ve bu esnada yeni bir şeyler öğrenmenin tadını hiç bir yerde bulamıyorum. Bu sebeplerle sanırım bu projede tembel eğilimli bir proje olucak :) Ben bu tembelliği sevmeye başladım :)

Bu arada haklısın bir yol haritası yapalım. Ancak öncelikle tagmanagerin çalışma mantığını çözmemiz gerekiyor. Bunun için kodlardan ben bir yere varamadım. Sen baktın mı bilmiyorum? Acaba diyorum Geany geliştiricilerine bir e-posta gönderip tagmanager konusunda bilgi alabilir miyiz?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

November 04, 2011

Dünkü mesajımdan sonra tagmanager kodlarını daha dikkatli bir şekilde yeniden incelemeye karar verdim. Neticede şu metoda ulaştım.

Github deposundaki adresi : https://github.com/geany/geany/blob/master/tagmanager/tm_workspace.c#L275

gboolean tm_workspace_create_global_tags(const char *pre_process, const char **includes,
int includes_count, const char *tags_file, int lang)
{
#ifdef HAVE_GLOB_H
glob_t globbuf;
size_t idx_glob;
#endif
int idx_inc;
char *command;
guint i;
FILE *fp;
TMWorkObject *source_file;
GPtrArray *tags_array;
GHashTable *includes_files_hash;
GList *includes_files = NULL;
gchar *temp_file = create_temp_file("tmp_XXXXXX.cpp");
gchar *temp_file2 = create_temp_file("tmp_XXXXXX.cpp");

if (NULL == temp_file || NULL == temp_file2 ||
NULL == theWorkspace || NULL == (fp = g_fopen(temp_file, "w")))
{
g_free(temp_file);
g_free(temp_file2);
return FALSE;
}

includes_files_hash = g_hash_table_new_full (tm_file_inode_hash,
g_direct_equal,
NULL, g_free);

#ifdef HAVE_GLOB_H
globbuf.gl_offs = 0;

if (includes[0][0] == '"') /* leading \" char for glob matching */
for(idx_inc = 0; idx_inc < includes_count; idx_inc++)
{
 int dirty_len = strlen(includes[idx_inc]);
char *clean_path = g_malloc(dirty_len - 1);

strncpy(clean_path, includes[idx_inc] + 1, dirty_len - 1);
clean_path[dirty_len - 2] = 0;

#ifdef TM_DEBUG
g_message ("[o][%s]\n", clean_path);
#endif
glob(clean_path, 0, NULL, &globbuf);

#ifdef TM_DEBUG
g_message ("matches: %d\n", globbuf.gl_pathc);
#endif

for(idx_glob = 0; idx_glob < globbuf.gl_pathc; idx_glob++)
{
#ifdef TM_DEBUG
g_message (">>> %s\n", globbuf.gl_pathv[idx_glob]);
#endif
if (!g_hash_table_lookup(includes_files_hash,
globbuf.gl_pathv[idx_glob]))
{
char* file_name_copy = strdup(globbuf.gl_pathv[idx_glob]);
g_hash_table_insert(includes_files_hash, file_name_copy,
file_name_copy);
#ifdef TM_DEBUG
g_message ("Added ...\n");
#endif
}
}
globfree(&globbuf);
g_free(clean_path);
  }
  else
#endif
/* no glob support or globbing not wanted */
for(idx_inc = 0; idx_inc < includes_count; idx_inc++)
{
if (!g_hash_table_lookup(includes_files_hash,
includes[idx_inc]))
{
char* file_name_copy = strdup(includes[idx_inc]);
g_hash_table_insert(includes_files_hash, file_name_copy,
file_name_copy);
}
  }

/* Checks for duplicate file entries which would case trouble */
g_hash_table_foreach(includes_files_hash, tm_move_entries_to_g_list,
&includes_files);

includes_files = g_list_reverse (includes_files);

#ifdef TM_DEBUG
g_message ("writing out files to %s\n", temp_file);
#endif
if (pre_process != NULL)
write_includes_file(fp, includes_files);
else
append_to_temp_file(fp, includes_files);

g_list_free (includes_files);
g_hash_table_destroy(includes_files_hash);
includes_files_hash = NULL;
includes_files = NULL;
fclose(fp);

/* FIXME: The following grep command removes the lines
* G_BEGIN_DECLS and G_END_DECLS from the header files. The reason is
* that in tagmanager, the files are not correctly parsed and the typedefs
* following these lines are incorrectly parsed. The real fix should,
* of course be in tagmanager (c) parser. This is just a temporary fix.
*/
if (pre_process != NULL)
{
command = g_strdup_printf("%s %s | grep -v -E '^\\s*(G_BEGIN_DECLS|G_END_DECLS)\\s*$' > %s",
pre_process, temp_file, temp_file2);
#ifdef TM_DEBUG
g_message("Executing: %s", command);
#endif
system(command);
g_free(command);
g_unlink(temp_file);
g_free(temp_file);
}
else
{
/* no pre-processing needed, so temp_file2 = temp_file */
g_unlink(temp_file2);
g_free(temp_file2);
temp_file2 = temp_file;
temp_file = NULL;
}
source_file = tm_source_file_new(temp_file2, TRUE, tm_source_file_get_lang_name(lang));
if (NULL == source_file)
{
g_unlink(temp_file2);
return FALSE;
}
g_unlink(temp_file2);
g_free(temp_file2);
if ((NULL == source_file->tags_array) || (0 == source_file->tags_array->len))
{
tm_source_file_free(source_file);
return FALSE;
}
tags_array = tm_tags_extract(source_file->tags_array, tm_tag_max_t);
if ((NULL == tags_array) || (0 == tags_array->len))
{
if (tags_array)
g_ptr_array_free(tags_array, TRUE);
tm_source_file_free(source_file);
return FALSE;
}
if (FALSE == tm_tags_sort(tags_array, global_tags_sort_attrs, TRUE))
{
tm_source_file_free(source_file);
return FALSE;
}
if (NULL == (fp = g_fopen(tags_file, "w")))
{
tm_source_file_free(source_file);
return FALSE;
}
fprintf(fp, "# format=tagmanager\n");
for (i = 0; i < tags_array->len; ++i)
{
tm_tag_write(TM_TAG(tags_array->pdata[i]), fp, tm_tag_attr_type_t
| tm_tag_attr_scope_t | tm_tag_attr_arglist_t | tm_tag_attr_vartype_t
| tm_tag_attr_pointer_t);
}
fclose(fp);
tm_source_file_free(source_file);
g_ptr_array_free(tags_array, TRUE);
return TRUE;
}

C++ bilgim çok fazla değil ama yanılmıyorsam Geany bu metodu kullanarak bizim gösterdiğimiz adresteki dosyaların içindeki metodları ayıklayıp bunları bir tag dosyası haline getiriyor. Sende bir ara incelersen memnun olurum eğer aradığımız metod buysa sorunumuzun büyük bir kısmını çözdük demektir :) Sonrasında yapmamız gereken bu metodu anlayıp D ile kodlamak olacak ki sanırım bu işin en keyifli kısmı bu aşamada başlayacak :)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

December 02, 2011

Bayram, seyran, projeler, yeni yıl, hastalık derken uğrayamaz oldum. Boş vaktimde bu işe bakacağım inşallah.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2 3