newLisp è un linguaggio cross-platform, e trovare un ottimo editor, flessibile e relativamente semplice da usare, che sia pure esso stesso cross-platform non è stata una cosa facile. Alcuni editor sono fantastici ma non sono cross-platform, altri sono un pò “duri” da gestire (comandi solo da tastiera, linguaggi di scripting per macro e plugin proprietari, etc…), altri ancora sono fantastici ma avete bisogno di MOLTO tempo per imparare a gestirli a dovere. Dopo varie ricerche ho scelto Scite, un ottimo cross platform editor (anche se c’è da fare un pò di fine-tuning per quanto riguarda le configurazioni interne).
Sono stato ancora più felice quando ho scoperto che Kazimir, nel suo blog, aveva pubblicato un file per fare syntax highlight e quant’altro in Scite! L’ho quindi subito scaricato e mi sono messo al lavoro per personalizzare il mio Scite editor, creando il mio ambiente di lavoro “perfetto” (il file “properties” originale di Kazimir lo potete trovate a questo indirizzo: http://kazimirmajorinc.blogspot.com/2008/06/lispproperties-for-scite.html).
Studiando un pò mi sono poi accorto che Scite permette di scrivere delle macro in LUA (non in newLisp purtroppo
). Questo permette di raggiungere ottimi livelli di personalizzazione dell’editor. In questo articolo pubblicherò il mio file properties di Scite. Ogni volta che apporterò modifiche/aggiornamenti su tale file, o creerò scripts/plugins, li pubblicherò qui, con la categoria: Scite Editor. Partendo quindi dal file properties generato da Kazimir, l’ho modificato ed esteso un pò.
CODICE SORGENTE DEL FILE “LISP.PROPERTIES”
# Define SciTE settings for Newlisp files. view.whitespace=0 whitespace.fore=#333333 split.vertical=0 strip.trailing.spaces=1 strip.trailing.tabs=1 reload.preserves.undo=1 # Indentation use.tabs=1 tab.size=4 tab.indent=1 backspace.unindents=1 indent.opening=1 indent.closing=1 indent.size=4 indent.auto=1 indent.automatic=1 view.indentation.guides = 1 view.indentation.examine = 3 highlight.indentation.guides = 1 # Editor starting position and size. position.left=10 position.top=10 position.width=600 position.height=400 # Right edge edge.column=80 edge.mode=1 edge.colour=#AAAAAA # Sizes and visibility in edit pane line.margin.visible=1 line.margin.width=4 margin.width=14 fold.margin.width=14 fold.margin.colour=#007F00 fold.margin.highlight.colour=#007F00 # caret caret.fore=#FF0000 caret.width=3 caret.period=500 selection.back=#FF0000 file.patterns.lisp=*.lsp;*.lisp filter.lisp=LISP (lsp lisp)|$(file.patterns.lisp)| lexer.$(file.patterns.lisp)=lisp # Lisp build in functions keywords.$(file.patterns.lisp)= $ \ $ ! != $ $0 $1 $10 $11 $12 $13 $14 $15 $2 $3 $4 $5 $6 $7 $8 $9 \ $args $idx $it $main-args % & * + - / : < << <= = > >= >> ? @ \ class MAIN NaN? Tree abort abs acos acosh add address amb and \ append append-file apply args array array-list array? asin asinh \ assoc atan atan2 atanh atom? base64-dec base64-enc bayes-query \ bayes-train begin beta betai bind binomial bits callback case \ catch ceil change-dir char chop clean close command-event cond \ cons constant context context? copy copy-file cos cosh count \ cpymem crc32 crit-chi2 crit-z current-line curry date date-value \ debug dec def-new default define define-macro delete delete-file \ delete-url destroy det device difference directory directory? div \ do-until do-while doargs dolist dostring dotimes dotree dump dup \ empty? encrypt ends-with env erf error-event error-number error-text \ eval eval-string exec exists exit exp expand explode factor fft \ file-info file? filter find find-all first flat float float? floor \ flt for for-all format fv gammai gammaln gcd get-char get-float \ get-int get-long get-string get-url global global? if if-not ifft \ import inc index int integer integer? intersect invert irr join \ lambda? last legal? length let letex letn list list? load local \ log lookup lower-case macro? main-args make-dir map mat match max \ member min mod mul multiply name net-accept net-close net-connect \ net-error net-eval net-interface net-listen net-local net-lookup \ net-peek net-peer net-receive net-receive-from net-receive-udp \ net-select net-send net-send-to net-send-udp net-service net-sessions \ new nil nil? normal not now nper npv nth null? number? open or \ ostype pack parse pipe pmt pop pop-assoc post-url pow pretty-print \ primitive? print println prob-chi2 prob-z process prompt-event \ protected? push put-url pv quote quote? rand random randomize \ read-buffer read-char read-expr read-file read-key read-line \ real-path ref ref-all regex regex-comp remove-dir rename-file \ replace reset rest reverse rotate round save search seed seek \ select semaphore sequence series set set-locale set-ref set-ref-all \ setf setq sgn share signal silent sin sinh sleep slice sort source \ spawn sqrt starts-with string string? sub swap sym symbol? symbols \ sync sys-error sys-info tan tanh throw throw-error time time-of-day \ timer title-case trace trace-highlight transpose trim true true? \ unify unique unless unpack until upper-case uuid when while \ write-buffer write-char write-file write-line xml-error xml-parse \ xml-type-tags zero? | ~ \ word.chars.lisp=$(chars.alpha)$(chars.numeric)_-<>.#+@$%^&=*!?`§ word.characters.$(file.patterns.lisp)=$(word.chars.lisp) comment.block.lisp=; comment.box.start.lisp=; comment.box.middle.lisp=; comment.box.end.lisp=; comment.stream.start.lisp=;111 comment.stream.end.lisp=;222 # White space style.lisp.0=fore:#00FF00,back:#000000,size:10 # Line Comment style.lisp.1=fore:#FFFF66,back:#000000,size:10 # Number style.lisp.2=fore:#7F7FFF,back:#000000,size:10 # Keyword style.lisp.3=fore:#FFCF00,back:#000000,size:10 # Unknown style.lisp.4=back:#FFFFFF # Quoted identifier style.lisp.5=fore:#00FF00,back:#333344 # String style.lisp.6=fore:#7FFFFF,back:#000000 # End of line where string is not closed style.lisp.7=back:#FFFFFF,back:#000000 # Unknown style.lisp.8=back:#FFFFFF,back:#000000 # Identifiers style.lisp.9=fore:#00FF00,back:#000000 # Operators style.lisp.10=fore:#FF7FFF,back:#000000 # -- syntax style.lisp.11=back:#FFFFFF # Undefined or unknown styles style.lisp.12=back:#00FF00 style.lisp.13=back:#FFFF00 style.lisp.14=back:#FFFF00 style.lisp.15=back:#FFFF00 style.lisp.16=back:#FFFF00 style.lisp.17=back:#FFFF00 style.lisp.18=back:#FFFF00 style.lisp.19=back:#FFFF00 style.lisp.20=back:#FFFF00 style.lisp.21=back:#FFFF00 style.lisp.22=back:#FFFF00 style.lisp.23=back:#FFFF00 style.lisp.24=back:#FFFF00 style.lisp.25=back:#FFFF00 style.lisp.26=back:#FFFF00 style.lisp.27=back:#FFFF00 style.lisp.28=back:#FFFF00 style.lisp.29=back:#FFFF00 style.lisp.30=back:#FFFF00 style.lisp.31=back:#FFFF00 # Default selected text COLORS. selection.back=#FFFFFF selection.alpha=80 # Monospace per default font.base=font:Courier,size:10 font.small=font:Courier,size:10 font.comment=font:Courier,size:10 font.code.comment.box=$(font.comment) font.code.comment.line=$(font.comment) font.code.comment.doc=$(font.comment) font.text=font:times,size:10 font.text.comment=font:Courier,size:10 font.embedded.base=font:Courier,size:10 font.embedded.comment=font:Courier,size:10 font.monospace=font:Courier,size:10 font.vbs=font:Courier,size:10 # Code completion autocompleteword.automatic=1 autocomplete.choose.single=0 lexer.$(file.patterns.flash)=lisp autocomplete.flash.ignorecase=1 # Default style.lisp.32=fore:#FF0000,back:#000000,size:10 # Line number style.lisp.33=back:#00FF00,fore:#000000,size:10 # Brace highlight style.lisp.34=back:#007f00,fore:#FFFF00,size:10 # Brace incomplete highlight style.lisp.35=back:#7f0000,fore:#FFFF00,size:10 # Control characters style.lisp.36=back:#000000;fore:#FF00FF,size:10 # Indentation guides style.lisp.37=fore:#A00000,back:#000000,size:10 # Braces are only matched in operator style # braces.lisp.style=10 # TOOLS command.go.$(file.patterns.lisp)=cmd /K "newlisp -c -s 400000 $(FilePath)" command.go.subsystem.$(file.patterns.lisp)=2 command.name.0.$(file.patterns.lisp)=Go (Output Box) command.0.$(file.patterns.lisp)=cmd /K "newlisp -c $(FilePath)" command.subsystem.0.$(file.patterns.lisp)=0 command.name.1.$(file.patterns.lisp)=Newlisp REPL (Command Window) command.1.$(file.patterns.lisp)=cmd /K "newlisp" command.subsystem.1.$(file.patterns.lisp)=2 command.name.2.$(file.patterns.lisp)=Newlisp REPL (Output) command.2.$(file.patterns.lisp)=cmd /K "newlisp" command.subsystem.2.$(file.patterns.lisp)=0 command.help.$(file.patterns.lisp)="C:/Program Files (x86)/newlisp/manual_frame.html" command.help.subsystem.$(file.patterns.lisp)=2
Cosa da, e soprattutto: come si usa?!
- Scaricate Scite dalla sua home page (trovate il link anche nell’apposita sezione di questo blog).
- Aprite il file lisp.properties. Nota per gli utenti Linux: il file non può essere modificato come utente normale, quindi entrate in modalità root con il comando “sudo”, oppure con il comando “su”.
- Fate un backup del “vecchio” file lisp.properties (quello che andremo a sostituire).
- Sostituite il file appena aperto con quello che ho pubblicato.
- Salvate il tutto. Chiudete Scite e riaprite. Poi…
- … poi aprite un file newLisp (estensione “.lsp”).
Ecco come si presenta Scite con il file newLisp aperto:
Questo file “properties” permette di avere, in Scite, le seguenti funzionalità:
- Highlight della sintassi.
- Highlight delle parentesi tonde.
- Highlight dell’indentazione.
- Code completion (CARLO-ENTER).
- Eliminazione (pulizia) degli spazi e TABE in eccesso sulla riga (quelli oltre l’ultimo carattere scritto).
- Indentazione automatica.
- Possibilità di personalizzare la posizione iniziale e la dimensione dell’editor allo start-up.
- Posizionamento del “right edge” (linea sottile che mostra il bordo destro dell’editor – default al carattere 80). Possibilità di personalizzare il suo colore.
- Possibilità di personalizzare i colori del cursore e la sua frequenza di lampeggio.
- Per default, viene impostato il carattere di tipo MONOSPACE.
Rispetto alle impostazioni di Kazimir, ho modificato alcune combinazioni di colori e fonts. Sono scelte molto personali, quindi fate la vostra!
Una breve spiegazione sul file
Vorrei mettere in evidenza alcune parti del file, così che voi potrete personalizzarlo a vostro piacere.
view.whitespace=0
Serve per poter mostrare dei piccoli puntini al posto degli spazi (potete così mettere “in evidenza” gli spazi).
strip.trailing.spaces=1
strip.trailing.tabs=1
Configura Scite per eliminare SPAZI e TABS alla fine di ogni riga. Per esempio: <Questa è una riga di esempio > Gli spazi alla fine della riga verranno eliminati.
use.tabs=1
tab.size=4
tab.indent=1
Questi parametri indicano che il TAB può indentare il codice. Ogni TAB include 4 caratteri di indentazione.
backspace.unindents=1
Il tasto BACKSPACE permetterà di eliminare un livello di indentazione del codice.
indent.size=4
indent.auto=1
indent.automatic=1
Dettagli sull’indentazione stessa. E’ automatica (quindi ad ogni pressione del tasto ENTER il cursore si posiziona al livello di indentazione corretto rispetto al precedente, e non all’inizio della riga).
view.indentation.guides = 1
view.indentation.examine = 3
highlight.indentation.guides = 1
Mostrano le linee guida di indentazione.
# Editor starting position and size.
position.left=100
position.top=30
position.width=600
position.height=400
Autoesplicativo! Posizione e dimensioni iniziali dell’editor. Suggerimento: questo codice, se volete che venga eseguito ogni volta che si apre l’editor (e non solo per files newLisp), mettetelo in SciTEGlobal.properties
# Right edge
edge.column=100
edge.mode=1
edge.colour=#AAAAAA
Limite destro di scrittura: posizione (colonna 100), attivato (edge.mode=1) e con colore grigio.
# Sizes and visibility in edit pane
line.margin.visible=1
line.margin.width=4
margin.width=14
fold.margin.width=14
fold.margin.colour=#007F00
fold.margin.highlight.colour=#007F00
Caratteristiche del bordo a sinistra dell’editor, cioè la parte in cui compare il numero di riga, i bookmarks, etc…
caret.fore=#FF0000
caret.width=3
caret.period=500
Caratteristiche del cursore: in particolare caret.width rappresenta lo “spessore” del cursore in modo insert (cioè quando ha la forma di una linea verticale, come una pipe).
# Default selected text COLORS.
selection.back=#FFFFFF
selection.alpha=80Quando selezionate del testo, usando per esempio il mouse, tale selezione compare come se fosse “evidenziata”. Questi sono i parametri di tale evidenziazione. Nel mio codice ho posto un colore di evidenziazione bianco (#FFFFFF) ma con un coefficiente di trasparenza di 80 (0-255).
# Monospace per default
L’intero blocco è necessario per indicare a Scite di usare in ogni circostanza dei fonts MONOSPACE (personalmente detesto scrivere programmi con fonts proporzionali!).
# Code completion
autocompleteword.automatic=1
autocomplete.choose.single=0
lexer.$(file.patterns.flash)=lisp
autocomplete.flash.ignorecase=1
Parametri necessari per il code completion. L’opzione autocomplete.choose.single=0 indica al parser lessicale di non includere solo una opzione in output (come suggerimento), ma tutte le parole chiave che rispettano la parola scritta.
Anche stavolta siamo giunti al termine, alla prossima!
Commenti Recenti