Bir kod editörü girintiyi kullanmadan kod iç içe geçme seviyesini nasıl etkili bir şekilde etkileyebilir? [kapalı]


233

Biri girintili (neredeyse) diğeri sola dayalı, aynı XML metni için 2 görünüm seçeneği sunan bir XML metin düzenleyicisi yazdım . Sola dayalı bir görünüm için motivasyon, kullanıcıların, XML içeriğinin otomatik bir yan etkisi olan girintiden etkilenmeden, düz metin veya XPath kodunun girintisi için kullandıkları boşluk karakterlerini 'görmelerine' yardımcı olmaktır.

Kullanıcıya yardım edecek, ancak fazla ayrıntıya girmeden sola dayalı mod için görsel düzenleyici ipuçları (editörün düzenlenemez bölümünde) sunmak istiyorum.

Sadece bağlantı hatlarını kullanmayı denedim, ama bu çok meşguldü. Şimdiye kadar bulduğum en iyisi, aşağıdaki editörün sahte bir ekran görüntüsünde gösteriliyor, ancak daha iyi / daha basit alternatifler arıyorum (çok fazla kod gerektirmez).

kod editörü yerleştirme seviyesi göstergesi

[Düzenle]

Isı haritası fikrini alarak (from: @jimp) Bunu ve 3 alternatifi alıyorum - etiketli a, b ve c:

İlk fikirler

Aşağıdaki bölüm, bir dizi başka cevap ve yorumdan fikirleri bir araya getirerek, teklif olarak kabul edilen cevabı açıklamaktadır. Bu soru şu an topluluk wiki olduğundan, lütfen bunu güncellemekten çekinmeyin.


NestView

İç içe geçmiş kodun okunabilirliğini geliştirmek için girintiyi kullanmadan görsel bir yöntem sağlayan bu fikrin adı.

Kontur Çizgileri

NestView içindeki farklı şekilde gölgeli satırların adı

görüntü tanımını buraya girin

Yukarıdaki resimde, bir XML snippet'inin görselleştirilmesine yardımcı olmak için kullanılan NestView gösterilmektedir. Bu gösterim için XML kullanılmasına rağmen, bu gösterim için yuvalamayı kullanan diğer herhangi bir kod sözdizimi kullanılmış olabilir.

Genel Bakış:

  1. Kontur çizgileri, yuvalama düzeyini iletmek için (bir ısı haritasındaki gibi) gölgelendirilir

  2. Kontur çizgileri, bir yuvalama seviyesinin ne zaman açıldığını veya kapandığını göstermek için açılıdır.

  3. Bir kontur çizgisi, bir yuvalama seviyesinin başlangıcını ilgili uca bağlar.

  4. Birleştirilmiş kontur çizgileri genişliği, ısı haritasına ek olarak yuvalama seviyesinin görsel bir izlenimini verir.

  5. NestView'in genişliği manuel olarak yeniden boyutlandırılabilir olabilir, ancak kod değiştikçe değişmemelidir. Kontur çizgileri, bunu sürdürmek için sıkıştırılabilir veya kesilebilir.

  6. Boş satırlar bazen metni daha sindirilebilir parçalara bölmek için kod kullanılır. Bu tür çizgiler NestView'da özel davranışları tetikleyebilir. Örneğin, ısı haritası sıfırlanabilir veya arka plan rengi kontur çizgisi veya her ikisi de sıfırlanabilir.

  7. Seçili kodla ilişkilendirilmiş bir veya daha fazla kontür çizgisi vurgulanabilir. Seçilen kod seviyesi ile ilişkilendirilmiş kontur çizgisi en çok vurgulanır, ancak diğer iç kontur çizgileri de iç içe geçmiş grubun vurgulanmasına yardımcı olmak için ek olarak 'aydınlanabilir'

  8. Farklı davranışlar (kod katlama veya kod seçimi gibi), bir Kontur Çizgisine tıklamak / çift tıklamakla ilişkilendirilebilir.

  9. Bir kontur çizgisinin farklı bölümleri (ön, orta veya arka kenar) ilişkili farklı dinamik davranışlara sahip olabilir.

  10. Bir ipucu hattı üzerindeki araç ipucuları bir fare gezdirme olayında gösterilebilir

  11. NestView kodu düzenlendikçe sürekli güncellenir. Yuvalamanın iyi dengeli olmadığı durumlarda, yuva seviyesinin sona ermesi gereken yerlerde varsayımlar yapılabilir, ancak ilişkili geçici kontür çizgileri bir şekilde bir uyarı olarak vurgulanmalıdır.

  12. Kontur Çizgilerinin sürükle ve bırak davranışları desteklenebilir. Davranış, kontür çizgisinin sürüklenmekte olan kısmına göre değişebilir.

  13. Sol kenar boşluklarında yaygın olarak bulunan ve satır numaralandırması ve hatalar ve değişiklik durumu için renk vurgulama gibi özellikler NestView'ün üzerine yerleşebilir.

Ek İşlevsellik

Teklif bir dizi ek konuyu ele alıyor - çoğu orijinal sorunun kapsamı dışında, ancak yararlı bir yan etki.

Yuvalanmış bir bölgenin başlangıcını ve sonunu görsel olarak bağlayan

Kontur çizgileri, iç içe geçmiş her seviyenin başlangıcını ve bitişini bağlar

Seçili olan hattın içeriğinin vurgulanması

Kod seçildikten sonra, NestView'deki ilişkili yuva seviyesi vurgulanabilir

Aynı yuva seviyesindeki kod bölgeleri arasında ayrım

XML durumunda, farklı ad alanları için farklı tonlar kullanılabilir. Programlama dilleri (c # gibi) benzer şekilde kullanılabilecek adlandırılmış bölgeleri destekler.

Yuvalama alanı içindeki alanları farklı görsel bloklara ayırma

Ekstra satırlar genellikle okunabilirliği sağlamak için koda eklenir. Bu tür boş çizgiler, NestView'ın kontür çizgilerinin doygunluk seviyesini sıfırlamak için kullanılabilir.

Çoklu Sütun Kod Görünümü

Girintisiz kod, çok sütunlu görünümün kullanımını daha etkili kılar, çünkü sözcük kaydırma veya yatay kaydırmanın gerekme olasılığı daha düşüktür. Bu görünümde, kod bir sütunun altına ulaştığında, diğerine geçer:

görüntü tanımını buraya girin

Yalnızca görsel yardım sağlamanın ötesinde kullanım

Genel olarak önerildiği gibi, NestView olabilir TreeView denetimden beklenen büyük ölçüde uyumlu olacaktır düzenleme ve seçim bir dizi özellik sağlar. Temel fark, tipik bir TreeView düğümünün 2 bölümden oluşmasıdır: bir genişletici ve düğüm simgesi. Bir NestView kontur çizgisinde en fazla 3 parça olabilir: bir açıcı (eğimli), bir bağlayıcı (dikey) ve bir kapalı (eğimli).


Girintide

Girintili olmayan kod tamamlayıcılarla birlikte sunulan NestView, ancak geleneksel girintili kod görünümünü değiştirmesi muhtemel değildir.

Bir NestView uygulayan herhangi bir çözümün, beyaz boşluk karakterleri de dahil olmak üzere herhangi bir kod metnini etkilemeden girintili ve girintili olmayan kod görünümleri arasında sorunsuz bir şekilde geçiş yapma yöntemi sunması olasıdır. Girintili görünüm için bir teknik, sekme veya boşluk karakterleri yerine dinamik bir sol kenar boşluğunun kullanıldığı 'Sanal Biçimlendirme' olacaktır. NestView'ü dinamik olarak oluşturmak için kullanılan aynı iç içe geçmiş veriler, daha geleneksel görünümlü girintili görünüm için de kullanılabilir.

Baskı

Basılı kodun okunabilirliği için girinti önemli olacaktır. Burada, sekme / boşluk karakterlerinin ve dinamik bir sol kenar boşluğunun olmaması, metnin sağ kenarda sarılabileceği ve girintili görünümün bütünlüğünü koruyabileceği anlamına gelir. Satır numaraları, kodun kelime sarıldığı yeri ve ayrıca girintinin tam konumunu belirten görsel işaretler olarak kullanılabilir:

görüntü tanımını buraya girin

Ekran Emlak: Düz Vs Girintili

NestView'ün değerli ekran gayrimenkulünü kullanıp kullanamadığı sorusunu ele almak:

Kontur çizgileri, kod düzenleyicinin karakter genişliğiyle aynı genişlikte çalışır. Bu nedenle, 12 karakter genişliğindeki NestView genişliği, kontur çizgileri kesilmeden / sıkıştırılmadan önce 12 iç içe geçme düzeyi alabilir.

Girintili görünümde her iç içe geçme düzeyi için 3 karakter genişliği kullanılıyorsa, iç içe geçme 4 iç içe geçme düzeyine ulaşana kadar boşluk kaydedilir; bu iç içe geçme düzeyinden sonra düz görünümün her iç içe geçme düzeyiyle artan bir yer kazandıran avantajı vardır.

Not: Kod için genellikle en az 4 karakter genişliğinde bir girinti önerilir, ancak XML genellikle daha azıyla yönetir. Ayrıca, Sanal Formatlama hizalama sorunları olmadığından daha az girintiye izin verir

2 görünümün karşılaştırması aşağıda gösterilmiştir:

görüntü tanımını buraya girin

Yukarıdakilere dayanarak, görünüm stili seçiminin ekran gayrimenkulünden başka faktörlere bağlı olacağı sonucuna varılması muhtemelen adil. Bunun tek istisnası, örneğin bir Netbook / Tablet'te veya çok sayıda kod penceresi açıkken ekran alanının premium olduğu durumdur. Bu durumlarda, yeniden boyutlandırılabilir NestView açık bir kazanan gibi görünmektedir.

Durumlarda kullanın

NestView'ün kullanışlı bir seçenek olabileceği gerçek dünya örneklerine örnekler:

  1. Ekran gayrimenkul bir prim olduğu yerde

    a. Tablet, not defteri ve akıllı telefon gibi cihazlarda

    b. Web sitelerinde kod gösterilirken

    c. Birden fazla kod penceresinin masaüstünde aynı anda görünmesi gerektiğinde

  2. Kod içindeki metnin tutarlı boşluk boşluk girintisi öncelikli ise

  3. İç içe geçmiş kodu incelemek için. Örneğin, alt dillerin (örneğin, C #'daki Linq veya XSLT'deki XPath) yüksek yuva düzeylerine neden olabileceği durumlarda.

Ulaşılabilirlik

Görme bozukluğu olan kişilere yardımcı olmak ve ayrıca çevresel koşullara ve kişisel tercihlere uyacak şekilde yeniden boyutlandırma ve renk seçenekleri sağlanmalıdır:

görüntü tanımını buraya girin

Düzenlenen kodun diğer sistemlerle uyumluluğu

Bir NestView seçeneğini içeren bir çözüm, ideal olarak, içe aktarılan koddan baştaki sekme ve boşluk karakterlerini (yalnızca biçimlendirme rolüne sahip olarak tanımlanır) çıkarabilir. Daha sonra, bir kez soyulduktan sonra, kod hem sola dayalı hem de girintili görünümlerde değişiklik yapılmadan düzgün bir şekilde oluşturulabilir. Beyaz boşluktan haberdar olmayan birleştirme ve farklı aletler gibi sistemlere dayanan birçok kullanıcı için bu büyük bir endişe kaynağı olacaktır (tam bir gösteri durdurucu değilse).


Diğer işler:

Örtüşen İşaretlemenin Görselleştirilmesi

2004'ten itibaren Wendell Piez tarafından yayınlanan araştırma , örtüşen işaretlemenin, özellikle LMNL'nin görselleştirilmesi sorununu ele almaktadır . Bu, NestView önerisine benzerlik gösteren SVG grafiklerini içerir, çünkü burada onaylanmıştır.

Görüntülerde (aşağıdaki) görsel farklar açıktır, temel işlevsel fark, NestView'ın yalnızca iyi yuvalanmış XML veya kod için tasarlandığından, Wendell Piez'in grafikleri örtüşen yuvalamayı temsil etmek üzere tasarlanmıştır.

görüntü tanımını buraya girin

Yukarıdaki grafikler, http://www.piez.org adresinden - izin alınarak - çoğaltılmıştır.

Kaynaklar:

  1. Hermenutik İşarete Doğru
  2. LMNL'ye doğru yarım adımlar

6
Sana gerçek bir cevabım yok, sadece görüş. Örneklerine baktığımda, B benim tercihim. Bu benim için öne çıkıyor çünkü "heatmap" aslında ilk örnek ve C gibi yansıtmak yerine girintiyi takip ediyor. A ayrıca gerçek girintiyi izler, ancak B daha çok gerçek xml girintili olduğunda göreceğinize benzer. İkinci örnek, benim zevkime göre basitçe "katı" dır.
Marjan Venema

4
Girintili kodu kendim tercih ederim. Bunun faydasının ne olacağından emin değil misiniz? Belli bir şeyi mi özlüyorum? (Gerçekten bunun olumsuz görünmesi niyetinde değiliz.)
Chris

9
Satırların% 100'ünde dev bir marj almanın, her bir hattın ihtiyaç duyduğu kadar marj almanın ne kadar iyi olduğunu göremiyorum.
John Gietzen

1
@John Gietzen. Amaç, ekran mülkünden tasarruf etmemek (çoğu durumda bunun etkisi olsa da). Önemli olduğunda boşluk karakterlerinin daha sıkı kontrol edilmesine izin vermek - girintili bir görünüm yine de sağlanabilir (ancak sanal, doldurma karakterleri kullanmadan).
pgfearo

3
Bu soruyu konu dışı olarak kapatmak için oy kullanıyorum çünkü bu bir UX sorusu, ancak taşımak için çok eski.
cırcır ucube

Yanıtlar:


104

Burada kendi soruma cevap vermeye çalıştım, ancak bu, @jimp'in ısı haritası fikrini ve @Andrea'dan 'onu daha fazla XML-ish yap' fikrini içeriyor:

görüntü tanımını buraya girin

Umarım, ısı haritasındaki renkler, açısal çizgilerle birlikte başlangıç ​​ve bitiş etiketleri arasında göz çekmeye yardımcı olur; Yatay çizgi ayırıcılarının sökülmesi baştan sona “akışı” iyileştirir. Kullanıcı bir elemanla seçim yaparken, ısı haritasındaki eşleşen kısım bir şekilde vurgulanabilir - belki de parlayan bir sınırla (gösterildiği gibi).

Düzenleme Bununla devam etmeye karar verdik, muhtemelen renkler için kullanıcı seçenekleri olması gerekecek. 'Üretime hazır' ekran görüntüsü:

görüntü tanımını buraya girin

Ve karşılaştırma için ... alternatif girintili görünüm:

görüntü tanımını buraya girin

Şimdi Düzenleyin , daha yoğun bir şekilde iç içe geçmiş bir durum için - çizim becerilerimi test etmek ...

görüntü tanımını buraya girin


1
Harika görünüyor ! Aferin. Ama daha fazla girinti olduğunda nasıl görünecek?
Loïc Lopes,

1
@Louhike Teşekkürler! Evet, 4 seviyede maksimuma çıkarıldı ve sol kenar boşluğunu daha fazla uzatmak istemiyorum - bu yüzden dikey çubukların genişliğini giderek daha yüksek yuvalama seviyelerinde artan bir şekilde sıkıştıracağım - umarım kontur haritası gibi.
pgfearo

2
@Louhike. İşlerin 9 yuva düzeyinde nasıl göründüğünü göstermek için fazladan bir resim ekledim - yaklaşık 15 seviyeden sonra, muhtemelen bir degrade dolgusu kullanarak orta çubukları birleştirmek gerekebilir.
pgfearo

10
Bu sadece şaşırtıcı. Kod düzenleme ve kullanıcı arayüzünü bir sonraki seviyeye taşımak için +1. Hesabı olan biri, Hacker News’e /.veya r / programlama’ya göndermelidir.
Konrad Rudolph

2
Kenar çubuğunun yatay olarak döndürüldüğünü nasıl göründüğünü merak ettim ... imgur.com/u5mNi
chanux

24

Bir fikir, metne 3D eklemeye çalışmak olabilir. Yazı tipi boyutunu, hangi düzeyde bulunduğuna bağlı olarak artırın / azaltın.

Örneğin, bu kod:

görüntü tanımını buraya girin

Bu gibi gözükürdü:

görüntü tanımını buraya girin

Farklı seviyelerde sabit metin-boyut uyumunu kaybettiği için çalışmak can sıkıcı olabilir. Diğer bir fikir; her seviyenin doygunluğunu değiştirin:

görüntü tanımını buraya girin

Bu gerçekten derin bir şeye ne kadar dayanıyor? Emin değil...

Aslında oluk görselleştirme fikrinizi çok seviyorum; şeyleri birlikte gruplamak kolaydır. Belki bu fikirlerden biriyle birleştiğinde, daha iyi görünecek ya da çok daha sarsıcı görünecektir. ;)


Kısa bir süre önce C'de kapsamı gösteren bir ısı haritası yaptım. Beyin fırtınası için bakmak eğlenceli olabilir:

görüntü tanımını buraya girin

Bağlantısızlar-sola:

görüntü tanımını buraya girin


2
Metinle bir şeyler yapmak için cazip gelmekle birlikte, bunu yazarken ya da hemen sonrasında geliştiricinin dikkatini dağıtmadan yapmak zordur. Yazı tipi yüksekliğini etkileyen değişiklikler sorunlara neden olabilir - muhtemelen kodumuzun bir yandan diğer yana daha az yukarı ve aşağı gitmesini görmemize izin veriyoruz. Kodu gölgelendirme fikrinizi beğendim, ancak işleri düzenli bir şekilde tutmak için denemek istediğimden bunun ince olması gerekir.
pgfearo

2
ama bu, ortamları öğretmek için harika olurdu!
jcolebrand

Yazı tipi boyutu önerisi garip bir şekilde zorlayıcı - Ben dezavantajları olsa görebilirsiniz. Kapsam, daha derinlemesine iç içe geçmiş olduğundan neden yazı tipini küçültmeyin - bu, derin iç içe geçmeyi engellemeye yardımcı olur (derin iç içe geçmenin aslında mantıklı bir çözüm olduğu sorunlara neden olsa da)
Peter

2
sıcaklık haritası aslında kapsamı görselleştirme konusunda sola hizalı kapsam görselleştirmesinden çok daha iyidir (@ pfgearo'nun çözümü)
Sandeep

@Sandeep. Bunun birçok durumda daha iyi bir çözüm olduğuna katılıyorum - özellikle de kodu düzenlemek yerine kodu gözden geçirirken. Teknik kısıtlamalar (soruya inşallah açıklandığı gibi) arkaplan rengini kullandığım kontrol ile değiştirmemi zorlaştırıyor. Etkili olarak, bu haritanın içinde ısı haritasının sol tarafını kullandım - ancak gözün içeri çekilmesine yardımcı olmak için kenarları düzenlenmiş alana doğru eğildi. Renkli bir metin arka planına sahip bir sorun, okunabilirlik / kontrastın daha yüksek düzeyde kaybolmasıdır. iç içe geçme seviyeleri.
pgfearo

21

Sadece orijinal fikrini değiştirip karelerden kapsüller arasında geçiş yap. Bence bu versiyonların (orijinaliniz dahil) okunması daha kolay, çünkü ekran elemanlarının iç içe geçmesini gösteren yuvalardan daha az karmaşık oldukları için. Ağaç unsurlarının bilgiyi daha basit ve sezgisel bir şekilde aktardığını düşünüyorum.

kapsüller

Bence sol doğrudan girintiyi göstermek için harika, sağında yuvalanmış bir ilişkiyi iletmek daha iyidir.


2
Kapsüllerin yumuşaklığını tercih ederim, ancak metinden çok ayrı görünüyorlar, daha uyumlu ve içerideki parçaların ne olduğu hakkında daha net bir görünüm veren bir şeye ihtiyacım var.
pgfearo

9

Benim fikrim:

İç içe geçme, iç içe geçmeye daha çok benzer Her katmanın yatay genişliğinin çok geniş olması gerekmez.


Bence önerdiğin şey aslında verdiğim cevapla aynı (diğerlerinden esinlenerek) aynı, ama eğimli çizgiler olmadan. Eğimli çizgilerin gözü aç ve kapat arasında daha iyi çekmeye yardımcı olduğunu düşünüyorum. Genişlik gerçek bir sorun değildir, çünkü (9 seviyeli resimde gösterildiği gibi) dikey çizgi genişliği eğimli çizgi genişliğinden bağımsızdır, bu nedenle dikey çizgiler sıkıştırılabilir.
pgfearo

Evet, pg- Gönderdikten sonra bunu farkettim. Topografik olarak özdeştiler - süslü olmak için. Sanırım bir zevk meselesi, ancak benim sürümüm, sürümünüzün yapmadığı bir şekilde bana "yerleştirme" diye bağırıyor. Belki bu özellik hem sporu hem de kullanıcının seçmesine izin verebilir.
broc7

8

Bu fikri çok seviyorum. "Meşgul" ifadesini düşük tutmama önerim, kareler yerine degradeler kullanmak olacaktır. Hatları keserdi. Aşırı girinti için belki farklı renkler.

Sahip olduğun her şeyin harika olduğunu söyleyebilirim, zevklerim için birazcık blok olsa.

Yorumlarım: Visual Studio IDE'nin girintileme biçimiyle sürekli mücadele ediyorum. Böyle bir şey veya bir varyasyon kullanmayı çok isterim.

Öyleyse bu bağlantıyı çizgiler olmadan ve mevcut xml / kodunuzla aynı çizgide olduğunu hayal edin.


Evet, fikirler hala gelişiyor. Gönderdiğim cevaptaki resimler (sorumu yerine) daha az bloklu çünkü ön / arka eğim var, işleri biraz kısmak için degradeler (ama biraz farklı şekilde) kullanmayı düşünüyorum. Farklı renkler için, yüksek girinti için değil, aynı zamanda yorumlar veya hatalar gibi şeyleri vurgulamak için yanınızdayım. Ve sonra, mevcut bağlamı / hata ayıklamayı göstermek için ... dinamik vurgulama var ... ne zaman duracağına karar vermede zorluk çekecek.
pgfearo

5

Görselleştirmenin düzenlenemeyen (sol?) Sınırda olması gerektiğini söylediğiniz için, görselleştirmenin kodun içindeyken veya arkasında olamayacağı anlamına geldiğine inanıyorum.

Belki de sol sütundaki ısı haritası, daha parlak renkler daha derin girintilere işaret ediyor? Marjı, DOM derinliği tarafından belirlenen maksimum girintiye göre verilen tüm boşluğu dinamik olarak kullanan (girintinin soldan sağa gitmesini bekleyin) gibi bir görselleştirmeyle sabit bir boyut yapın.

Editör bölgesine dallanmaya istekli olsaydınız, çok benzer bir şey öneririm, ancak belgenin arka planı olarak. Gölgeli alan, girintinin etkinleştirilmesi durumunda boşlukların olduğu yerde olacaktır . Bu durumda, vurgulanan metne zıt olan düz, açık bir renk kullanırdım.


@jimp Evet, görselleştirme kodun içinde veya arkasında olamaz - bunu denemeyi çok isterdim, kodlama becerilerim / platformum bunu çok karmaşık hale getirirdi. Editördeki arkaplan renkleri yine zordur, ancak bu bana farklı ön plan renk tonları deneyebileceğim fikrini veriyor. Soldan sağa doğru çubuğu deneyeceğim ve haritanızı da istediğiniz gibi ısıtacağım.
pgfearo

Isı haritası fikri için +1 (Y) .. ve görsel özel ihtiyaçları olan insanlar için (renk körlüğü gibi) yuvalama düzeyinin rengin içinde olmasını önerebilirim.
M.Sameer


@pgfearo Fikirlerimin faydalı olmasına sevindim! Gördüklerinize göre, sağdan sola L&F'den daha çok hoşlandığımı düşünüyorum. Üzgünüm, daha önce tekrar kontrol etme şansım olmadı (yoğun bir haftasonu). Çok fazla ilerleme kaydettikten sonra, yukarıda gönderdiğiniz cevap hakkında yorum yapacağım.
jimp

@pgfearo Hata! Cevabınıza yorum yapmak için yeterli itibarım yok! Bu ayrıcalığa sahip olduğumda cevabınızla ilgili bazı düşüncelerimi yayınlayacağım, umarım yakında!
jimp

3

jGRASP bunu kenar boşluğunda görsel bir işaretleyici kullanarak yapar:

görüntü tanımını buraya girin

Bir döngü kullandığınızı bile algılar ve bu iç döngüyü temsil etmek için farklı türde bir hat kullanır.

Sadece bir editörün bunu nasıl yaptığını göstereceğimi düşündüm.


5
Bence çok gürültülü ama yine de iyi bir fikir.
Konrad Rudolph

Buna baktım ve site documententatin, ekran görüntüsünün bir kod düzenleyiciden değil, bir kod görüntüleyiciden geldiğini ima ediyor. Ayrıca, doldurma karakterleri yoktur, ancak yine de girintili görünümü verilir. Soruda verilen sebeplerden dolayı kod girintisini gerektirmeyen basit çözümler arıyorum. Bununla birlikte, JGrasp kod anlaşılırlığını geliştirmek için mükemmel bir araç gibi görünüyor.
pgfearo

JGrasp'ın okulumda bir kod editörü olması gerekiyordu, onu bilgisayar bilimleri dersine girişte kullandık, önerilen kod editörüydü. Programınızı derlemeye ve çalıştırmanıza yardımcı olacak araçlara sahiptir, ancak Eclipse veya Netbeans kadar şık değildir. Ancak, genel amacı olarak tanımladığınızdan biraz uzaktır ve java'nın sözdiziminin gerçekten farkındadır.
ash

3

Kötü bir fikir değil ama bloklarımı açıkça görebilmek için sol kenar boşluğuna atıfta bulunmak biraz can sıkıcı olabilir. Bu, ekran gayrimenkulünü veya yapının çok derinleşmesi halinde neye benzeyeceğini düşünmüyor bile.

Motivasyon, kullanıcıların girinti için kullandıkları boşluk karakterlerini 'görmelerine' yardımcı olmak olduğundan, onlara yalnızca boşluk karakterlerini gösterebilirsiniz.

Paragraf işaretleri gibi özel görsel karakterlerden bahsetmiyorum, sadece vurgulamaktadır. Sarı renkteki boşluklar, yeşil renkteki sekmeler (veya her neyse)

Kenar boşluğu / iç içe geçme sorunu için, her blok için kenar boşluğunu taşıyabilirsiniz. Kenar boşluğunun düz bir çizgi olması gerektiğini söyleyen hiçbir şey yoktur.

Bunun yeni bir fikir olmadığından eminim.

Bunun gibi bir şey:

sol kenar boşluğunu ve vurgulanan boşlukları gösteren örnek xml


Girintili bakış açısı ile plan, fikrinize benzer şekilde boşlukları dinamik olarak aydınlatmaktır. Ayrıca, düz görünümde 30 seviyeli iç içe geçmenin, 1 seviyeyle aynı alanı kapladığını, girintili olduğunu, ekranınızın dışına çıkacağını unutmayın, bu nedenle geliştiricilerin görünüm seçimi yapmasının bir nedeni budur.
pgfearo

1
Evet, bu yüzden yeni bir fikir olmadığını söyledim. Ancak, girintinin seviyesi şu anda düzenlediğim seviyeye göre logaritmik veya dinamik ise, hakkında konuştuğunuz bir problem olmaz. Sadece 1 alanda sabitlenmiş olsa bile, ekran dışında olmazdı. 80 karakterlik eski bir göstergede bile yarı yolda olmazdın. Evet, bu fikirlerden bazıları ile 30 seviye 1 seviye ile aynı boşluğu alır, ancak bunlardan bazılarına baktığınızda sadece girintiliğe göre yer kalmaz, sadece her şeyi girintiler ve süslü grafikler eklerler.
Justin Ohms

Ohm. Şimdi, söz konusu sitede emlak alanında bir bölüm var (bu bir topluluk wiki ve tümü), buna ekran görüntüsü karşılaştırması da dahildir. Bu bölümü kendi gözlemlerinizle güncelleyebilseniz harika olurdu. Lütfen, girintili görünümlerin (XML dünyasında ve hepsinde çalışan) mega hayranı olduğumu kabul edin, bu yüzden son 6 ay veya daha fazla harcadım, girintinin sistem tarafından yönetildiği sanal biçimlendirme tekniğini mükemmelleştirmek için harcadım. Yine de öğrendiğim bir şey varsa, geliştiriciler bir seçim gibi - bu nedenle düz görünüm.
pgfearo

İlk okumada, dinamik girintili genişliklerle ilgili fikirlerinizi özledim - bu güçlü bir özellik olabilir. Gerisi düzken girintili bazı kodlara sahip olma olasılığını arttırıyor, bunun pratikte nasıl işe yaradığından emin değil, ancak kolayca test edilebiliyor - projemde, girinti mantığı düz görünüm için bile çağrılıyor, sadece çarpan 0 olarak ayarlanmıştır. Bu yüzden ayarlanması gereken sadece bu çarpandır. İyi karar.
pgfearo

2

Neden parantezleri açıp kapatmıyorsunuz?

  1. Girinti, içerme anlamına gelir: (ve) tam olarak programcılar için olan anlamına gelir.
  2. (ve) her biri tek bir karakterdir: sol çubuk çok ince kalacaktır.
  3. Boş elemanlar kolayca farkedilebilir: aynı satırda () kullanın.
  4. Bir elemanın içeriği görsel bir ipucuna ihtiyaç duymaz: bir boşluk daha iyidir.
  5. Sağdaki imleç konumu soldaki içeren blok ile eşleştirilebilir: (ve) ile sütuntaki karakterlere dinamik olarak renk ekleme
  6. Bir mesafeden daha iyi görünen <ve> kullanarak daha XML-ish yapabilirsiniz.

Bazı faydalı fikirler - bunları, özellikle de XML-ish bitini dahil etmeye çalışın. Ayrıca, dinamik olarak süren bir bit var ve muhtemelen biraz daha ekleyebilirim - çok zorlayıcı olmadan.
pgfearo

2

Vim çok da olmasa da benzer bir şey yapabilir.

Vim'de "kod katlama" yapmanın çeşitli yolları vardır. Bunlardan biri sözdizimi katlama kurallarına dayanır. Bu yapıldığında, kod iç içe geçmiş bir anahat yapısı kullanılarak katlanabilir ve "FoldColumn", "| .

Katlı sütun, kattofordan bağımsız olarak yuvalama gösterimi verebilir, ancak sözdizimi tabanlı yöntem, muhtemelen ne istemeniz için uygun olan yöntemdir. Bir yerde xml için önceden yapılmış sözdizimi tabanlı katlama kuralları olup olmadığından emin değilim, sanırım olabilir.


Tasarladığım editör, teknik ve lisans gerekçeleriyle Vim'in veya herhangi bir üçüncü taraf aracının dikkate alınmadığı bir GUI ile daha büyük bir sisteme entegre edilecek. Bununla birlikte, Vim'in bununla nasıl başa çıkacağını merak ediyorum, bu yüzden araştırmaya devam edecek - umarım belgelerde ekran görüntüleri vardır. Evet, karakter tabanlı grafikler bir dereceye kadar çalışabilir - Araştırma için bir tane alay ettim. Kod katlama sol kenardan yapılabilir, ancak senkronize edilmiş bir anahat ağacı görünümü de sağlanır.
pgfearo

@pgfearo: Vim'in NetBeans protokolüne bakabilirsiniz. Herhangi bir lisans sorunu olmadan Vim'i bir IDE'nin içine yerleştirmek için kullanılır.
greyfade

@greyfade - En azından şu anki projemle ilgili lisans sorunları var, çünkü kapalı kaynak ve GPL kaygıları olmadan Vim kaynağını değiştirmek için (kullanmasam bile) kolaylıklara ihtiyacım olacak. Bu bir yana, protokol ilginç görünüyor.
pgfearo

1

B ve C seçenekleriyle doğru yolda olduğunuzu düşünüyorum: hem genişlik hem de ısı haritası renklendirmesini ekleyin. Şu anda B seçeneğini C'den daha fazla seviyorum, çünkü daha az müdahalecidir (C'nin ortasındaki çok ağır bloktan ziyade geniş ve seyreltilmiş veya dar ve yoğun) Bir yere bir seviye eklerseniz grafiğin tamamını yeniden oluşturun. Bence blokları çok daha küçük yapabilirsin, 1 veya 2 px muhtemelen yeterli olacaktır. Çok olması gerekmiyor, sadece ayırt edilebilir olması gerekiyor. Özellikle insanların editörü birçok kez kullanması beklenirken, göze çarpmayan, daha ince efektlerle çalışmak daha kolaydır çünkü dikkatleri dağılmaz.

Bir tür editör kullanırken önemli olan şey şu anki kapsamı vurgulamaktır: editörde bir satır seçerken, hangi unsurları içerdiğini ve nerede durduğunu görmeniz gerekir. Ağacı bile vurgulayabilirsiniz (hangi unsurların bir çocuğu). Bunun, ele almayı ve düşünmeyi gerektiren ve kullanıcıların editörle olan deneyimlerini nasıl derecelendireceği konusunda daha fazla etkisi olacak ayrı bir konu olduğunu düşünüyorum.


Şimdi sizinkine çarptığımı düşündüğüm bir yanıt gönderdim ancak tesadüfen mevcut kapsamı vurgulama fikrinizle (parlayan bir sınırla) fikrinize bağlı mıyım? Blokların daha az rahatsız edici olması gerektiğine katılıyorum, çizimlerime yardımcı olmak için efektler burada abartılıyor ve böylece küçültülmüş bir ekran görüntüsünde iyi sonuç veriyorlar.
pgfearo

1

Bahsetmediğim bir şey, üzerinde durmuş gibi göründüğünüz doygunluk etkisinin üstüne tonla yapabilecekleriniz. Önerim, işaretçinin bulunduğu yuvanın rengini değiştirmektir. Bu, kullanıcının hangi hatların yuvanın bir parçası olduğunu ayırt etmesini kolaylaştıracaktır.

Tona dayalı öğeleri uygularken, lütfen renk körlüğünün bilincinde olun ve evrensel olarak ayırt edilebilen renkleri seçin veya insanların seçmesi için birkaç seçenek sunun.


Bu, bence, bu kalıbın uygulanmasına ayrıntı eklemek için hala yapılabilecek çok şey olduğunu düşünüyorum. Evet, renk farkındalığı sorunlarından kaçınmak için tonları kullanmaktan daha rahatım, ancak seçenekler mevcutsa, bunun ekstra bir boyut eklenmesine yardımcı olacağını kabul ediyorum. Bu soru şu anda bir topluluk wiki olduğu için, başkalarının tema üzerinde çeşitlilik gösteren resimlere katkıda bulunmak isteyip istemediklerini görmek için bir tel kafes göndermeye çalışacağım - tercihler muhtemelen farklı kullanım sınıfları, dil sözdizimi ve dinamik bağlamda değişecektir.
pgfearo

0

Şimdiye kadar diğer önerilerle birlikte kullanılabilecek seçeneklerden biri, XPath notasyonu kullanılarak çizgiye giden yolu gösteren sol kenarda bir araç ipucu kullanmak olacaktır. Tarayıcı "kontrol elemanı" araçları (örneğin, Chrome'da yerleşik olan Firebug) sık sık benzer bir şey yapar ancak durum çubuğundadır.


Ben sadece bu kontrol üzerinde yoğunlaşıyordum, ancak 'breadcrumb' navigatörü olan bir 'XPath Konum Çubuğu' çalışıyor ve senkronize bir eleman ağacı görünümünde olduğu gibi editöre dahil edildi.
pgfearo

0

Muhtemelen, yalnızca bir renk sütunu ve derinlik sayıları ile ısı haritası için (orijinal yazıdan) daraltılmış bir görünüme sahip olabilirsiniz. Bu, onların ne kadar derin olduklarını bilmelerini ve xml için daha fazla ekranlı gayrimenkul vermelerini sağlar. Bana kazanmak gibi geliyor.

Her şeyi derinden yerleştirmek için yeterli renk farklılıkları olup olmayacağından endişe duyuyorum.


Yüksek seviyeli yuvalama desteği bir önceliktir. Ancak, gözün herhangi bir zamanda görmesi (ve içine çekmesi) gereken çok şey var, bu yüzden belirli bir seviyenin ötesinde, renkleri bir araya getirmeyi, sadece derinlik izlenimi vermek ve sadece vurgulanan kilit seviyeler düşünmeyi düşünüyorum. Bu yüzden iç içe geçme seviyelerinin ne zaman yüksek olduğuna ilişkin fikrinizi kontrol edeceğim.
pgfearo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.