Sunday, March 16, 2014

mini notes: emacs | modes και whitespaces, trailing whitespaces, indentation

Το emacs ειναι σιγουρα ενα εργαλειο το οποιο δεν το μαθαινεις over a night. Αν καταφερεις ομως να ασχοληθεις και μαθεις καποια πράγματα, δυσκολα ξανακοιτάς πίσω.

Σ'αυτο το κειμενο θα δουμε μερικα κολπάκια για να κανουμε ευκολα τη κατάλληλη διαμόρφωση ενος κειμένου ή του κώδικα. Γιατι είναι σημαντικό αυτο? Ο λόγος ειναι οτι τα λειτουργικα και ο κάθε editor "διαβάζει" διαφορετικά τις αλλαγές γραμμής και τα κενά. Ακόμα και ο ιδιος editor μπορει να ειναι διαφορετικα σεταρισμένος. Ετσι, οταν στέλνεις ενα κείμενο να εμφανίζετε διαφορετικα απο τον εναν στον αλλο. Σε ενα project που πολλοι πειραζουν το ιδιο αρχειο, το σωστο είναι να κρατάνε την ιδια διαμόρφωση.

Επισης σε καθε γλώσσα υπάρχουν διαφορετικοι κανόνες για code styling, κατι που βοηθάει γενικοτερα την καλυτερη αναγνωση του κωδικα. Η οπως σε άλλες γλωσσες ειναι καθοριστικο χαρακτηριστικο, μέρος της δομής της γλώσσας.

Modes

Το emacs συμπεριλαμβάνει διαφορα modes. Τα modes καθορίζουν διαφορετικές συμπεριφορες και features. Ουσιαστικα ειναι βιβλιοθήκες Lisp  libraries που επεκτείνου, διαμορφώνουν και βελτιώνουν τον emacs. Οταν θα ανοιξετε ενα αρχειο με και το σωσετε με την αναλογη καταληξη o emacs θα φορτωσει και το αναλογο mode, το οποιο μπορουμε να δουμε στα δεξια της status bar. Οι περισσοτερες γλωσσες θα πρεπει να αναγνωρίζονται.

Πριν προχωρησω καποια πραγματα για οσους κανουν τα πρωτα βηματα. Οταν θελουμε να εκτελεσουμε μια λειτουργια και αν δεν θυμόμαστε το συνδιασμο πλήκτρων η μονη περιπτωση να εκτελεσεις μια εντολη ειναι ο συνδιασμος M-x και της εντολης. M==Meta==Alt || Esc. Οταν δινουμε M-x μπορουμε να αρχισουμε να πληκτρολογουμε μια εντολη και με το <ΤΑΒ> να εμφανιστουν ολες οι εντολες που συμπληρωνουν τη συγκεκριμενη λεξη που ξαχνουμε. Δοκιμαστε να σωσετε ας πουμε την εντολη indent και πατηστε tab.

highlight-changes-mode

Πες λοιπον οτι ανοιγεις ενα αρχειο example.pyκαι γραφεις ενα κομματι κωδικα. Το σωνεις και μετα απο καιρο το ξανανοιγεις. Αν θες τωρα να παρακολουθεις τις αλλαγες που κανεις σε συγκριση με το υπαρχων κειμενο, guess what?? Υπαρχει συγκεκριμένο mode. M-x highlight-changes-mode. Καντε τωρα μια αλλαγη και θα δειτε να εμφανιζετε με κοκκινο χρωμα καθως επεξεργαζεστε το κειμενο. Παρατηρηστε οτι στη status bar επισης εμφανιζεται η ενδειξη +chg

Απο τη στιγμη που εχει ενεργοποιηθει το συγκεκριμένο mode μπορεις να κανεις και αλλα. Με το highlight-changes-rotate-faces αλλαζει τα χρωματα στις αλλαγες που εχουν γινει. Δοκιμαστε να κανετε ξανα αλλαγες και ξανατρεξτε highlight-changes-rotate-faces για να δειτε πως συμπεριφερετε.

Μπορεις να πας στη προηγουμενη αλλαγη με highlight-changes-previous-change ή στην επομενη με highlight-changes-next-change. Αν θες να απενεργοποιησεις για λιγο το συγκεκριμενο mode πατας highlight-changes-remove-highlight, Το status bar τωρα εμφανιζει την ενδειξη -chg.

whitespaces

Ας πουμε οτι εχουμε αυτο το κειμενο:

my $h = { alpha => 1,
<TAB><TAB><SPC><SPC>beta => 2,
<TAB><TAB><SPC><SPC>gamma => 3
<TAB><TAB>};
if ($items->{beta} < 3) {
<TAB>do_something();
}
 
 
αυτο θα εμφανιζεται καπως ετσι:

my $h = { alpha => 1,
          beta => 2,
          gamma => 3
        };
if ($items->{beta} < 3) {
    do_something();
}
 
Νομιζω τωρα μπορείτε να δωσετε ευκολα την εντολη

M-x whitespace-mode

Αμεσως θα δειτε καποια σημαδακια που υποδουλωνουν tabs, κενα(whitespaces),τελος γραμμης και διαφορα αλλα. Θα μπούμε τωρα στην ενοια του region. Region ειναι η επιλεγμενη περιοχη που μαρκαρουμε. Για να επιλεξεις μια περιοχη πατας Ctrl+spacebar με τον κερσορα απο το σημειο που θες και τον πας μεχρι εκει που θες να μαρκαρεις. Με αυτον τον τροπο μπορουμε να σβησουμε ευκολα οσα κενα εχουμε μεσα στο κειμενο καταλαθος. Η εντολη για αυτο ειναι M-x whitespace-cleanup ή whitespace-cleanup-region. Αν ειναι ενεργοποιημένο το mode για τις αλλαγες, θα δειτε αμεσως και που εχετε κενα και ποια διαγραφηκαν.

trailing whitespaces

Υπαρχει και η delete-trailing-whitespace που μπορει να διαγραψει ολα τα trailing whitespaces χωρις μαρκαρισμα. Επισης με ενεργοποιημενο το  whitespace-mode και το highlight-changes-mode ειναι εμφανεις οι αλλαγες. Αμεσα και γρηγορα.

indentation

Τωρα ισως εχετε και κάποια tabs μπροστα απο καθε γραμμή για τη σωστη στοιχηση. Κατα βαση ο emacs χρησιμοποιει tabs και spaces. Μπορειτε να ορισετε να χρησιμοποιει μονο το ενα απο τα δυο σαν προεπιλογη, να τα αλλαξετε αναλογα με την περισταση, ή να ορισετε ενα αρχειο μεμονομενα να συμπεριφερετε αναλογα.

Ας πουμε για να ορισουμε απο default να χρησιμοποιει μονο spaces, ανοιγουνε το αρχειο ~/.emacs και προσθετουμε στο τέλος:

(setq-default indent-tabs-mode nil)
 
Ο emacs χρεισιμοποιει 8 spaces/tab. Για να αλλαξει αυτο μονιμα σε 4 χαρακτηρες, παλι στο αρχειο .emacs μπορει να μπει:
 
(setq tab-width 4)

Επιλεγοντας ενα region και δινοντας M-x untabify μετατρεπεις τα tabs σε spaces. Αυτο είναι όλο. Μπορειτε να βρειτε πολυ περισσότερα και να κολήσετε. Γενικα το να πεις για το emacs ειναι ενα μεγαλο κεφαλαιο. Αλλα ειναι και ενα ιδιοφυες εργαλειο που μπορεις να κανεις απιστευτα πραγματα. Μεχρι και να παιξεις παιχνιδια.