In che modo un editor di codice può suggerire in modo efficace a livello di annidamento del codice, senza utilizzare il rientro? [chiuso]


233

Ho scritto un editor di testo XML che fornisce 2 opzioni di visualizzazione per lo stesso testo XML, uno rientrato (virtualmente), l'altro giustificato a sinistra. La motivazione per la vista giustificata a sinistra è di aiutare gli utenti a "vedere" i caratteri degli spazi bianchi che stanno usando per il rientro del testo in chiaro o del codice XPath senza interferenze dal rientro che è un effetto collaterale automatizzato del contesto XML.

Voglio fornire indizi visivi (nella parte non modificabile dell'editor) per la modalità giustificata a sinistra che aiuterà l'utente, ma senza essere troppo elaborata.

Ho provato a usare solo le linee di collegamento, ma sembrava troppo affollato. Il meglio che ho trovato finora è mostrato in uno screenshot simulato dell'editor qui sotto, ma sto cercando alternative migliori / più semplici (che non richiedono troppo codice).

indicazione del livello di annidamento dell'editor di codice

[Modificare]

Prendendo l'idea della mappa di calore (da: @jimp) ottengo questa e 3 alternative - etichettate a, bec:

Idee iniziali

La sezione seguente descrive la risposta accettata come una proposta, riunendo idee da una serie di altre risposte e commenti. Poiché questa domanda è ora wiki della community, non esitare ad aggiornarlo.


NestView

Il nome per questa idea che fornisce un metodo visivo per migliorare la leggibilità del codice nidificato senza utilizzare il rientro.

Linee di contorno

Il nome per le linee diversamente ombreggiate all'interno di NestView

inserisci qui la descrizione dell'immagine

L'immagine sopra mostra NestView utilizzato per aiutare a visualizzare uno snippet XML. Sebbene XML sia utilizzato per questa illustrazione, qualsiasi altra sintassi del codice che utilizza l'annidamento potrebbe essere stata utilizzata per questa illustrazione.

Una panoramica:

  1. Le linee di contorno sono ombreggiate (come in una mappa di calore) per comunicare il livello di annidamento

  2. Le linee di contorno sono inclinate per mostrare quando un livello di annidamento viene aperto o chiuso.

  3. Una linea di contorno collega l'inizio di un livello di annidamento alla fine corrispondente.

  4. La larghezza combinata delle linee di contorno offre un'impressione visiva del livello di annidamento, oltre alla mappa di calore.

  5. La larghezza di NestView può essere ridimensionabile manualmente, ma non dovrebbe cambiare quando cambia il codice. Le linee di contorno possono essere compresse o troncate per mantenere questo risultato.

  6. Le righe vuote vengono talvolta utilizzate come codice per suddividere il testo in blocchi più digeribili. Tali linee potrebbero innescare comportamenti speciali in NestView. Ad esempio, è possibile ripristinare la mappa di calore o utilizzare una linea di contorno del colore di sfondo o entrambi.

  7. È possibile evidenziare una o più linee di contorno associate al codice attualmente selezionato. La linea di contorno associata al livello di codice selezionato verrebbe maggiormente enfatizzata, ma anche altre linee di contorno potrebbero 'illuminarsi' in aggiunta per aiutare a evidenziare il gruppo nidificato contenente

  8. Diversi comportamenti (come la piegatura del codice o la selezione del codice) possono essere associati al clic / doppio clic su una linea di contorno.

  9. Parti diverse di una linea di contorno (bordo anteriore, medio o finale) possono avere comportamenti dinamici diversi associati.

  10. Le descrizioni comandi possono essere visualizzate su un evento al passaggio del mouse su una linea di contorno

  11. NestView viene aggiornato continuamente man mano che il codice viene modificato. Laddove la nidificazione non sia ben bilanciata, è possibile formulare ipotesi in merito alla conclusione del livello di nidificazione, ma le linee di contorno temporanee associate devono essere evidenziate in qualche modo come avvertenza.

  12. È possibile supportare i comportamenti di trascinamento delle linee di contorno. Il comportamento può variare in base alla parte della linea di contorno trascinata.

  13. Funzionalità comunemente presenti nel margine sinistro come la numerazione delle linee e l'evidenziazione del colore per errori e cambiamenti di stato potrebbero sovrapporre NestView.

Funzionalità aggiuntiva

La proposta affronta una serie di questioni aggiuntive: molte sono al di fuori dell'ambito della domanda originale, ma un utile effetto collaterale.

Collega visivamente l'inizio e la fine di una regione nidificata

Le linee di contorno collegano l'inizio e la fine di ciascun livello nidificato

Evidenziando il contesto della linea attualmente selezionata

Quando viene selezionato il codice, è possibile evidenziare il livello del nido associato in NestView

Differenziazione tra regioni di codice allo stesso livello di nidificazione

Nel caso di XML è possibile utilizzare tonalità diverse per spazi dei nomi diversi. I linguaggi di programmazione (come c #) supportano regioni denominate che potrebbero essere utilizzate in modo simile.

Dividere le aree all'interno di un'area di nidificazione in diversi blocchi visivi

Le linee extra vengono spesso inserite nel codice per facilitare la leggibilità. Tali linee vuote potrebbero essere utilizzate per ripristinare il livello di saturazione delle linee di contorno del NestView.

Vista codice multi-colonna

Il codice senza rientro rende più efficace l'uso di una vista a più colonne poiché è meno probabile che siano necessari il ritorno a capo automatico o lo scorrimento orizzontale. In questa vista, una volta che il codice ha raggiunto il fondo di una colonna, scorre nel successivo:

inserisci qui la descrizione dell'immagine

L'uso oltre a fornire semplicemente un aiuto visivo

Come proposto nella panoramica, NestView potrebbe fornire una gamma di funzioni di modifica e selezione che sarebbero sostanzialmente in linea con quanto previsto da un controllo TreeView. La differenza fondamentale è che un tipico nodo TreeView ha 2 parti: un espansore e l'icona del nodo. Una linea di contorno NestView può avere fino a 3 parti: un apri (inclinato), un connettore (verticale) e una chiusura (inclinata).


Sulla rientranza

NestView viene presentato insieme a complementi di codice non indentati, ma è improbabile che sostituisca la vista di codice indentata convenzionale.

È probabile che qualsiasi soluzione che adotti un NestView fornirà un metodo per passare senza interruzioni tra viste di codice indentate e non indentate senza influire sul testo del codice stesso, inclusi i caratteri di spazi bianchi. Una tecnica per la vista rientrata sarebbe la "formattazione virtuale", in cui viene usato un margine sinistro dinamico al posto di caratteri di tabulazione o spazio. Gli stessi dati a livello di annidamento utilizzati per il rendering dinamico di NestView potrebbero anche essere utilizzati per una vista rientrata dall'aspetto più convenzionale.

Stampa

Il rientro sarà importante per la leggibilità del codice stampato. Qui, l'assenza di caratteri tab / space e un margine sinistro dinamico significa che il testo può avvolgere sul margine destro e mantenere comunque l'integrità della vista rientrata. I numeri di riga possono essere utilizzati come marcatori visivi che indicano dove il codice è racchiuso tra le parole e anche la posizione esatta del rientro:

inserisci qui la descrizione dell'immagine

Schermo immobiliare: piatto contro rientro

Rispondere alla domanda se NestView utilizza preziose proprietà dello schermo:

Le linee di contorno funzionano bene con una larghezza uguale alla larghezza del carattere dell'editor di codice. Una larghezza NestView di 12 caratteri può quindi ospitare 12 livelli di annidamento prima che le linee di contorno vengano troncate / compresse.

Se una vista rientrata utilizza 3 larghezze di carattere per ciascun livello di annidamento, lo spazio viene risparmiato fino a quando l'annidamento non raggiunge 4 livelli di annidamento, dopo questo livello di annidamento la vista piatta presenta un vantaggio salvaspazio che aumenta con ogni livello di annidamento.

Nota: un rientro minimo di 4 caratteri di larghezza è spesso raccomandato per il codice, tuttavia XML spesso gestisce con meno. Inoltre, la formattazione virtuale consente di utilizzare meno rientri poiché non sussiste il rischio di problemi di allineamento

Di seguito è mostrato un confronto delle 2 viste:

inserisci qui la descrizione dell'immagine

Sulla base di quanto sopra, è probabilmente corretto concludere che la scelta dello stile di visualizzazione si baserà su fattori diversi dal settore immobiliare dello schermo. L'unica eccezione è quella in cui lo spazio dello schermo è un premio, ad esempio su un netbook / tablet o quando sono aperte più finestre di codice. In questi casi, NestView ridimensionabile sembrerebbe essere un chiaro vincitore.

Casi d'uso

Esempi di esempi reali in cui NestView può essere un'opzione utile:

  1. Dove lo schermo immobiliare è un premio

    un. Su dispositivi come tablet, blocchi note e smartphone

    b. Quando si mostra il codice sui siti Web

    c. Quando più finestre di codice devono essere visibili contemporaneamente sul desktop

  2. Laddove un rientro consistente degli spazi bianchi nel testo all'interno del codice è una priorità

  3. Per la revisione di codice profondamente nidificato. Ad esempio, dove le lingue secondarie (ad esempio Linq in C # o XPath in XSLT) potrebbero causare livelli elevati di annidamento.

Accessibilità

Le opzioni di ridimensionamento e colore devono essere fornite per aiutare le persone con disabilità visive e anche per soddisfare le condizioni ambientali e le preferenze personali:

inserisci qui la descrizione dell'immagine

Compatibilità del codice modificato con altri sistemi

Una soluzione che incorpora un'opzione NestView dovrebbe idealmente essere in grado di eliminare i caratteri di tabulazione e spazio (identificati come aventi solo un ruolo di formattazione) dal codice importato. Quindi, una volta rimosso, il codice potrebbe essere reso in modo ordinato in entrambe le viste giustificate a sinistra e rientrate senza modifiche. Per molti utenti che si affidano a sistemi come la fusione e strumenti diff che non sono consapevoli degli spazi, questa sarà una delle maggiori preoccupazioni (se non uno stop-show completo).


Altre opere:

Visualizzazione del markup sovrapposto

Una ricerca pubblicata da Wendell Piez , datata 2004, affronta il problema della visualizzazione del markup sovrapposto, in particolare LMNL . Ciò include la grafica SVG con significative somiglianze con la proposta NestView, come tale, sono riconosciute qui.

Le differenze visive sono chiare nelle immagini (sotto), la distinzione funzionale chiave è che NestView è inteso solo per XML o codice ben nidificati, mentre la grafica di Wendell Piez è progettata per rappresentare la nidificazione sovrapposta.

inserisci qui la descrizione dell'immagine

La grafica sopra è stata riprodotta - con gentile concessione - da http://www.piez.org

fonti:

  1. Verso il markup ermenutico
  2. Mezzi passi verso LMNL

6
Non ho una vera risposta per te, solo opinione. Guardando i tuoi esempi, B è la mia scelta preferita. Si distingue per me perché la "mappa di calore" in realtà segue il rientro invece di rispecchiarlo come il primo esempio e C fanno. A segue anche il rientro effettivo, ma B è più simile a quello che vedresti quando l'xml effettivo viene rientrato. Il secondo esempio è semplicemente troppo "solido" per i miei gusti.
Marjan Venema,

4
Preferirei io stesso il codice rientrato. Non sei sicuro di quale sarebbe il vantaggio? Mi sto perdendo qualcosa di ovvio? (Davvero non intendo che questo sembri negativo.)
Chris,

9
Non riesco a capire quanto sia meglio prendere un margine enorme sul 100% delle linee rispetto a prendere solo il margine necessario per ogni linea.
John Gietzen,

1
@John Gietzen. L'obiettivo non è quello di salvare lo schermo immobiliare (anche se questo può essere l'effetto in molti casi). È per consentire un controllo più stretto dei caratteri degli spazi bianchi quando ciò è importante: sarebbe comunque fornita una vista rientrata (ma virtuale, senza usare i caratteri di riempimento).
pgfearo,

3
Sto votando per chiudere questa domanda come fuori tema perché è una domanda UX ma troppo vecchia per migrare.
maniaco del cricchetto

Risposte:


104

Ho cercato di rispondere alla mia domanda qui, ma questo sta incorporando l'idea della mappa di calore di @jimp e anche l'idea di "renderlo più XML-ish" da @Andrea:

inserisci qui la descrizione dell'immagine

Eventualmente, i colori nella mappa di calore insieme alle linee angolari aiutano a disegnare l'occhio tra i tag di inizio e fine; la rimozione dei separatori di linea orizzontale migliora il "flusso" dall'inizio alla fine. Quando l'utente seleziona con un elemento, la parte corrispondente nella mappa di calore può essere evidenziata in qualche modo, forse con un bordo luminoso (come mostrato).

Modifica Ho deciso di procedere con questo, probabilmente ci saranno opzioni utente per i colori. Uno screenshot 'pronto per la produzione':

inserisci qui la descrizione dell'immagine

E per confronto ... la vista rientrata alternativa:

inserisci qui la descrizione dell'immagine

Modifica ora, per il caso più nidificato: testare le mie abilità di disegno ...

inserisci qui la descrizione dell'immagine


1
Sembra grandioso ! Buon lavoro. Ma come sarà quando ci sarà più rientro?
Loïc Lopes,

1
@Louhike Grazie! Sì, è al massimo a 4 livelli e non voglio allungare di più il margine sinistro - quindi comprimerò sempre più la larghezza delle barre verticali a livelli di annidamento più alti - un po 'come una mappa di contorno, si spera.
pgfearo,

2
@Louhike. Ho aggiunto un'immagine aggiuntiva per mostrare come potrebbero apparire le cose con 9 livelli di annidamento: dopo circa 15 livelli sarebbe probabilmente necessario unire le barre centrali, magari usando un riempimento sfumato.
pgfearo,

10
Questo è semplicemente fantastico. +1 per portare la modifica del codice e l'interfaccia utente al livello successivo. Qualcuno con un account dovrebbe pubblicarlo su Hacker News /.o su r / programmazione.
Konrad Rudolph,

2
Mi chiedevo come sarebbe con la barra laterale capovolta in senso orizzontale ... imgur.com/u5mNi
chanux

24

Un'idea potrebbe essere quella di provare ad aggiungere 3D al testo. Aumenta / diminuisci la dimensione del carattere in base al livello a cui si trova.

Ad esempio, questo codice:

inserisci qui la descrizione dell'immagine

Assomiglierebbe a questo:

inserisci qui la descrizione dell'immagine

Potrebbe essere fastidioso lavorare perché perde l'allineamento fisso della dimensione del testo su diversi livelli. Un'altra idea; cambia la saturazione di ogni livello:

inserisci qui la descrizione dell'immagine

Quanto bene regge qualcosa di veramente profondo? Non sono sicuro...

In realtà mi piace molto la tua idea di visualizzazione di grondaie; è facile raggruppare le cose. Forse combinato con una di queste idee sembrerà ancora migliore, o molto più scadente. ;)


Qualche tempo fa ho fatto una mappa di calore che mostrava l'ambito in C. Potrebbe essere divertente guardare il brainstorming:

inserisci qui la descrizione dell'immagine

Allineato a sinistra:

inserisci qui la descrizione dell'immagine


2
È allettante tentare di fare qualcosa con il testo, ma è difficile farlo senza distrarre lo sviluppatore mentre scrivono o subito dopo. Le modifiche che influiscono sull'altezza del carattere causano problemi - probabilmente tolleriamo di vedere il nostro codice andare su e giù anche meno da un lato all'altro. Mi piace la tua idea di sfumare il codice, ma questo dovrebbe essere sottile in quanto voglio provare a mantenere le cose ordinate.
pgfearo,

2
ma sarebbe fantastico per gli ambienti di insegnamento!
jcolebrand,

Il suggerimento sulla dimensione del carattere è stranamente avvincente, ma posso vedere i suoi svantaggi. Perché non ridurre il carattere poiché l'ambito è nidificato più profondamente - questo contribuirebbe a scoraggiare l'annidamento profondo (anche se causerebbe problemi in cui l'annidamento profondo è in realtà una soluzione ragionevole)
Peter

2
la mappa di calore è in realtà molto migliore nella visualizzazione dell'ambito rispetto alla visualizzazione dell'ambito allineata a sinistra (la soluzione di @ pfgearo)
Sandeep,

@Sandeep. Concordo sul fatto che in molti casi si tratta di una soluzione migliore, soprattutto quando si rivede il codice anziché modificarlo. I vincoli tecnici (come si spera nella domanda) mi rendono difficile modificare il colore di sfondo con l'attuale controllo che sto usando. In effetti, ho usato il lato sinistro della mappa di calore in questa risposta, ma con i bordi inclinati verso l'area modificata per aiutare ad attirare l'occhio. Un problema con uno sfondo di testo colorato è che la leggibilità / contrasto si perde in alto livelli di nidificazione.
pgfearo,

21

Basta modificare la tua idea originale e passare dai quadrati alle capsule. Penso che queste versioni (compresa la tua originale) siano più facili da leggere perché sono meno complesse di quella che mostra l'annidamento attraverso l'annidamento degli elementi di visualizzazione. Penso che gli elementi dell'albero trasmettano le informazioni in un modo più semplice e intuitivo.

capsule

Penso che la sinistra sia ottima per mostrare direttamente il rientro, mentre la destra è migliore nel trasmettere una relazione nidificata.


2
Preferisco la morbidezza delle tue capsule, tuttavia sembrano troppo distaccate dal testo, ho bisogno di qualcosa che sia più coerente e che offra una visione più chiara di quali siano le parti che la contengono.
pgfearo,

9

La mia idea:

L'annidamento sembra più un annidamento. La larghezza orizzontale di ogni strato non deve essere così ampia.


Penso che ciò che stai proponendo sia essenzialmente lo stesso della risposta (ispirata da altri) che ho dato ma senza le linee inclinate. Penso che le linee inclinate aiutino ad attirare l'occhio tra l'apertura e la chiusura migliore. La larghezza non è un vero problema perché (come mostrato nell'immagine a 9 livelli) la larghezza della linea verticale è indipendente dalla larghezza della linea inclinata, quindi le linee verticali possono essere compresse.
pgfearo,

Sì, pg- ho notato che dopo aver pubblicato. Sono topograficamente identici per immaginarsene. È una questione di gusti, suppongo, ma la mia versione mi dice semplicemente "annidamento" in un modo in cui la tua versione non lo fa. Forse questa funzione potrebbe sfoggiare entrambi e consentire all'utente di scegliere.
broc7,

8

Adoro l'idea. Il mio suggerimento di mantenere "occupato" sarebbe di usare i gradienti invece dei quadrati. Ridurrebbe le linee. Forse colori diversi per un rientro estremo.

Direi che tutto quello che hai è fantastico, anche se un po 'complicato per i miei gusti.

I miei commenti: sono stato costantemente alle prese con il modo in cui l'IDE di Visual Studio esegue il rientro. Mi piacerebbe usare qualcosa di simile o una variazione.

Quindi immagina quel collegamento senza le linee e in linea con il tuo codice / codice xml corrente.


Sì, le idee continuano a evolversi. Le immagini nella risposta che ho inviato (piuttosto che la mia domanda) sono meno bloccate perché hanno pendenze iniziali / finali, sto prendendo in considerazione l'uso di gradienti (ma leggermente diverso) anche per attenuare leggermente le cose. Sono con te sui diversi colori, per il rientro elevato, ma anche per evidenziare cose come commenti o errori. E poi c'è l'evidenziazione dinamica, per mostrare l'attuale contesto / debugging ... la difficoltà sarà nel giudicare quando fermarsi.
pgfearo,

5

Dato che hai detto che la visualizzazione deve esistere nel margine non modificabile (a sinistra?), Credo che significhi che la visualizzazione non può essere mescolata o nascosta dietro il codice.

Forse una mappa di calore nella colonna di sinistra, con colori più luminosi che indicano una rientranza più profonda? Rendi il margine di dimensioni fisse, con una visualizzazione come quella che hai (aspettati di andare da sinistra a destra come il rientro) che utilizza in modo dinamico tutto lo spazio dato in base al rientro massimo determinato dalla profondità del DOM.

Se tu fossi disposto a diramare nella regione dell'editor, suggerirei qualcosa di molto simile, ma come sfondo del documento. L'area ombreggiata sarebbe dove sarebbero gli spazi bianchi se il rientro fosse abilitato. In questo caso, utilizzerei un colore chiaro, solido, in contrasto con l'evidenziazione del testo.


@jimp Sì, la visualizzazione non può essere con o dietro il codice - per quanto mi piacerebbe provare questo, le mie capacità / piattaforma di programmazione renderebbero questo troppo complesso. I colori di sfondo nell'editor stesso sono di nuovo difficili, ma questo mi dà l'idea che potrei provare diverse tonalità di colore di primo piano. Proverò una barra da sinistra a destra e una mappa di calore anche come suggerisci.
pgfearo,

+1 per l'idea della mappa di calore (Y) .. e potrei suggerire che il livello di annidamento sia all'interno del colore per le persone con esigenze visive speciali (come daltonismo).
M.Sameer,

@jimp. Ho aggiornato la mia domanda per illustrare la tua idea della mappa di calore, che mi piace, ma penso di aver sbagliato la cosa da sinistra a destra ...
pgfearo,

@pgfearo Sono contento che le mie idee siano state utili! Sulla base di ciò che vedo tu abbia fatto, penso che mi piacerà meglio l'L & F da destra a sinistra. Mi dispiace di non aver avuto la possibilità di ricontrollare prima d'ora (weekend intenso). Dato che hai fatto così tanti progressi, commenterò solo la risposta che hai postato sopra.
jimp,

@pgfearo Spiacenti, non ho abbastanza reputazione per commentare la tua risposta! Pubblicherò alcuni pensieri sulla tua risposta una volta ottenuto quel privilegio, speriamo presto!
jimp,

3

jGRASP lo fa usando un marcatore visivo a margine:

inserisci qui la descrizione dell'immagine

Riconosce persino quando si utilizza un loop e utilizza un diverso tipo di linea per rappresentare quel loop interno.

Ho pensato di sottolineare come fa un editor esistente.


5
A mio avviso troppo rumoroso ma comunque una buona idea.
Konrad Rudolph,

Ho cercato questo, e la documentazione del sito implica che lo screenshot proviene da un visualizzatore di codice, è un diagramma, non un editor di codice. Inoltre, concesso che non ci siano caratteri di riempimento, ma è comunque una vista rientrata. Sto cercando soluzioni semplici che non richiedano il rientro del codice, per i motivi indicati nella domanda. Detto questo, JGrasp sembra uno strumento eccellente per migliorare la comprensibilità del codice.
pgfearo,

JGrasp dovrebbe essere un editor di codice nella mia scuola e l'abbiamo usato nella nostra introduzione al corso di informatica, era l'editor di codici raccomandato. Ha strumenti per aiutarti a compilare ed eseguire il tuo programma, ma non è elegante come Eclipse o Netbeans. Ma è leggermente diverso da quello che hai descritto come uno scopo non molto generale ed è solo consapevole della sintassi di Java.
ash,

3

Non è una cattiva idea ma dover fare riferimento al margine sinistro per vedere chiaramente i miei blocchi potrebbe diventare un po 'fastidioso. Non sta nemmeno pensando al settore immobiliare dello schermo o a come potrebbero apparire le cose se la struttura diventa molto profonda.

Poiché la motivazione è aiutare gli utenti a "vedere" i caratteri degli spazi bianchi che stanno usando per il rientro, potresti semplicemente mostrare loro i caratteri degli spazi bianchi.

Non sto parlando di speciali personaggi visivi come marcatori di paragrafo, ma solo momenti salienti. Spazi in giallo, schede in verde (o qualsiasi altra cosa)

Per il problema del margine / annidamento, puoi semplicemente spostare il margine per ciascun blocco. Non c'è nulla che dica che il margine deve essere una linea retta.

Sono sicuro che questa non è una nuova idea.

Qualcosa come questo:

XML di esempio che mostra lo spostamento del margine sinistro e lo spazio bianco evidenziato


Con la vista rientrata, il piano è di illuminare gli spazi in modo dinamico, simile alla tua idea. Inoltre, ricorda che in una vista piatta 30 livelli di annidamento occupano lo stesso spazio di 1 livello, rientrato, sarebbe fuori dal bordo dello schermo, questo è uno dei motivi per cui gli sviluppatori hanno la possibilità di scegliere le viste.
pgfearo,

1
Sì, è per questo che ho detto che non era una nuova idea. Tuttavia, se il livello di rientro è logaritmico o dinamico in base al livello al quale sto modificando, non avresti il ​​problema di cui stai parlando. Anche se fosse semplicemente fissato a 1 spazio, non sarebbe fuori dallo schermo. Non saresti nemmeno a metà strada nemmeno con un vecchio display da 80 caratteri. Sì, con alcune di queste idee 30 livelli occupano lo stesso spazio di 1 livello, ma quando guardi alcuni di questi non risparmi spazio sul solo rientro, indentano semplicemente il tutto e aggiungono un po 'di fantasia.
Justin Ohms,

Ohm. Ora c'è una sezione sullo schermo immobiliare nella domanda (questa è una wiki della comunità e tutto il resto), questo include un confronto di schermate. Se potessi aggiornare questa sezione con le tue osservazioni sarebbe fantastico. Ti prego di accettare che sono un grande fan delle viste rientrate (che lavora nel mondo XML e tutto il resto), ecco perché ho trascorso gli ultimi 6 mesi o più a perfezionare la tecnica di formattazione virtuale in cui il rientro è gestito dal sistema. Se c'è una cosa che ho imparato, è che agli sviluppatori piace una scelta, quindi la visualizzazione piatta.
pgfearo,

In prima lettura, mi mancavano le tue idee su larghezze di rientro dinamiche: questa potrebbe essere una funzione potente. Aumenta la possibilità anche di avere un rientro del codice mentre il resto è piatto, non sono sicuro di come funzionerebbe in pratica ma è facilmente testato - con il mio progetto, la logica di rientro è ancora invocata anche per la vista piatta, è solo che il moltiplicatore è impostato su 0. Quindi è proprio questo moltiplicatore che deve essere modificato. Buona chiamata.
pgfearo,

2

Perché non aprire e chiudere le parentesi?

  1. Il rientro significa contenimento: (e) significano esattamente questo per i programmatori.
  2. (e) sono ciascuno un singolo carattere: la barra di sinistra rimarrà molto sottile.
  3. Gli elementi vuoti sono facilmente individuabili: use () sulla stessa riga.
  4. Il contenuto di un elemento non ha bisogno di un indizio visivo: uno spazio vuoto è molto meglio.
  5. La posizione del cursore a destra può essere abbinata al blocco contenitore a sinistra: aggiungi dinamicamente un colore ai caratteri nella colonna con (e)
  6. Potresti renderlo più XML usando <e>, che sembrano migliori a distanza.

Alcune idee utili: proverò ad incorporarle, in particolare il bit XML. Inoltre, c'è un bel po 'di dinamica, e probabilmente potrei aggiungerne un po' di più - senza che diventi troppo prepotente.
pgfearo,

2

Vim può già fare qualcosa di simile, anche se non abbastanza carino.

Esistono vari modi per eseguire la "piegatura del codice" in Vim. Uno di questi si basa su regole di piegatura della sintassi. Al termine, il codice può essere piegato utilizzando una struttura di struttura nidificata e "FoldColumn" può essere utilizzato per fornire una rappresentazione grafica (in realtà "basata sui caratteri" con "|" e "-" caratteri) del "foldlevel" .

Il foldcolumn può fornire la rappresentazione di annidamento indipendentemente dal metodo foldmethod, ma il metodo basato sulla sintassi è quello che sarebbe probabilmente appropriato per quello che vuoi. Non sono sicuro che ci siano regole di piegatura pre-fatte basate sulla sintassi là fuori per xml da qualche parte, immagino che ci possano essere.


L'editor che sto progettando deve essere integrato in un sistema molto più grande con una GUI in cui Vim, o qualsiasi strumento di terze parti non viene preso in considerazione, per motivi tecnici e di licenza. Tuttavia, sono interessato a come Vim affronterà questo aspetto, quindi indagherò - si spera che abbiano schermate nella documentazione. Sì, la grafica basata sui personaggi può funzionare fino a un certo punto - ne ho preso uno per la ricerca. La piegatura del codice può essere eseguita dal margine sinistro, ma è anche fornita una vista ad albero di struttura sincronizzata.
pgfearo,

@pgfearo: potresti consultare il protocollo NetBeans di Vim. È pensato per essere utilizzato per incorporare Vim all'interno di un IDE, senza problemi di licenza.
greyfade,

@greyfade - Temo che ci siano problemi di licenza, almeno con il mio progetto attuale, perché è chiuso e io avrei bisogno della facilità (anche se non l'ho usato) per modificare l'origine Vim senza preoccupazioni GPL. A parte questo, il protocollo sembra interessante.
pgfearo,

1

Penso che tu sia sulla strada giusta con le opzioni B e C: includi sia la larghezza che la colorazione della mappa di calore. Mi piace l'opzione B più di C al momento, perché è meno invadente (sia ampia e diluita, o stretta e intensa, piuttosto che il blocco molto pesante nel mezzo di C) Uno svantaggio è che con quell'opzione devi ricostruisci l'intero grafico se inserisci un livello da qualche parte. Penso che potresti rendere i blocchi molto più piccoli, 1 o 2 px sarebbero probabilmente sufficienti. Non deve essere molto, deve solo essere distinguibile. Soprattutto quando ci si aspetta che le persone utilizzino l'editor molte volte, è più facile lavorare con effetti discreti e più sottili perché non distraggono così tanto.

Una cosa che è importante quando si utilizza un editor di sorta è però evidenziare l'ambito attuale: quando si seleziona una linea nell'editor, è necessario vedere esattamente quali elementi contiene e dove si ferma. Potresti anche evidenziare l'albero (di quali elementi è figlio). Penso che sia un problema separato che deve essere affrontato e pensato e avrà più influenza su come gli utenti valuteranno la loro esperienza con l'editor.


Ora ho inviato una risposta che penso incrociata con la tua ma coincide casualmente nella tua idea di evidenziare l'ambito attuale (con un bordo luminoso) ?. Sono d'accordo sul fatto che i blocchi dovrebbero essere meno invadenti, gli effetti qui sono esagerati per aiutarmi con il mio disegno e quindi anche renderli ok su uno screenshot ridotto.
pgfearo,

1

Una cosa che non ho visto menzionato è ciò che puoi fare con la tonalità in aggiunta all'effetto di saturazione su cui sembra che tu abbia optato per. Il mio consiglio è di cambiare il colore del nido in cui si trova il puntatore. Ciò renderebbe più semplice per l'utente distinguere quali linee fanno parte del nido, rispetto ai fratelli lungo il percorso.

Quando si implementano elementi basati sulla tonalità, tenere presente il daltonismo e selezionare i colori universalmente distinguibili o offrire alcune opzioni tra cui scegliere.


Ciò evidenzia, penso, che c'è ancora molto da fare per aggiungere dettagli all'implementazione di questo modello. Sì, mi sento più a mio agio nell'utilizzare i toni per evitare problemi di consapevolezza del colore, ma a condizione che siano disponibili opzioni, sono d'accordo che contribuirà ad aggiungere una dimensione aggiuntiva. Poiché questa domanda è ora un wiki della comunità, proverò a inviare un wireframe per vedere se altri vogliono contribuire con immagini che sono variazioni sul tema - le preferenze probabilmente varieranno tra le diverse classi di utilizzo, sintassi del linguaggio e contesto dinamico.
pgfearo,

0

Un'opzione, che finora potrebbe essere utilizzata insieme agli altri suggerimenti, sarebbe quella di utilizzare una descrizione comandi sul margine sinistro che mostra il percorso della linea usando la notazione XPath. Gli strumenti "inspect element" del browser (ad esempio Firebug, quello integrato in Chrome) spesso fanno qualcosa di simile ma in una barra di stato.


Mi stavo solo concentrando su questo controllo, ma una "barra degli indirizzi XPath" con il navigatore "breadcrumb" funziona ed è incorporata nell'editor, così come una vista ad albero degli elementi sincronizzata.
pgfearo,

0

Forse potresti avere una vista compressa per la mappa di calore (dal post originale) con solo una colonna di colori e i numeri di profondità. Ciò consentirebbe loro di sapere quanto sono profondi e dare loro più spazio sullo schermo per l'xml. Sembra una vittoria per me.

Sono preoccupato se ci saranno abbastanza differenze di colore per annidare profondamente le cose.


Il supporto per livelli elevati di nidificazione è una priorità. Ma c'è solo così tanto che l'occhio deve vedere (e può accettare) in qualsiasi momento, quindi oltre un certo livello, sto prendendo in considerazione la fusione dei colori, per dare un'impressione di profondità e solo evidenziare i livelli chiave. Quindi controllerò la tua idea per quando i livelli di nidificazione sono alti.
pgfearo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.