ΚΕΦΑΛΑΙΟ 17: Ο κειμενογράφος Emacs Όσο το vi (και οι κλώνοι του) είναι χωρίς αμφιβολία πανταχού παρών σε όλα τα όμοια με unix συστήματα, το Emacs έρχεται στη κατάλληλη στιγμή. Αντί να χρησιμοποιούνται διαφορετικά «πρότυπα», όπως το vi, χρησιμοποιεί το συνδυασμό των πλήκτρων ctrl + alt για την εισαγωγή των εντολών. Κατά τον ίδιο τρόπο μπορείτε να να χρησιμοποιείστε τον ίδιο συνδυασμό πλήκτρων και σε έναν επεξεργαστή κειμένου όπως και σε άλλες εφαρμογές για να εκτελέσετε συγκεκριμένες λειτουργίες. (Αν και εδώ πρέπει να σημειώσουμε ότι οι εντολές σπάνια αποκρίνονται. Γι αυτό ενώ πολλές μοντέρνες εφαρμογές χρησιμοποιούν το συνδυασμό των πλήκτρων ctrl c/x/v για αντιγραφή, αποκοπή και επικόλληση, το Emacs χρησιμοποιεί διαφορετικούς συνδιασμούς πλήκτρων και διαφοορετικούς μηχανισμούς γι αυτό.) Επίσης σε αντίθεση με το vi, το οποίο είναι ένας επεξεργαστής κειμένου και τίποτα παραπάνω, το Emacs είναι ένα πρόγραμμα με απεριόριστες δυνατότητες. Το Emacs είναι (το περισσότερο μέρος του) γραμμένο σε lisp, η οποία είναι μία πολύ δυνατή γλώσσα. Τα προγράμματα τα οποία γράφονται σε αυτή έχουν μια ιδιαιτερότητα, απότελουν μεταγλωττιστές της lisp για τον εαυτό τους. Αυτό ουσιαστικά σημαίνει ότι ο χρήστης μπορεί να επεκτείνει το Emacs και να γράψει εντελώς καινούρια προγράμματα στο Emacs. Συμπερασματικά το Emacs δεν είναι μόνο ένας επεξεργαστής κειμένου. Υπάρχουν πολλά επιπλέον διαθέσιμα πακέτα (πολλά απ αυτά έρχονται μαζί με το πρόγραμμα) τα οποία παρέχουν όλων των ειδών τις λειτουργίες. Πολλά απ αυτά έχουν στενή σχέση με την επεξεργασία κειμένου, όπου για το Emacs είναι ο βασικός ρόλος, το Emacs όμως δε σταματάει εκεί. Για παράδειγμα υπάρχουν αρκετά προγράμματα λογιστικών φύλλων για το Emacs, αρκετές βάσεις δεδομένων, παιχνίδια, ταχυδρομείο και news clients (το κορυφαίο είναι τα GNUs), κ.λ.π. Υπάρχουν δύο κύριες εκδόσεις του Emacs : το gnu Emacs (που είναι η έκδοση που έρχεται μαζί με το slackware) και το XEmacs. Το τελευταίο δεν είναι έκδοση για το Emacs που τρέχει στο X. Είναι γεγονός ότι και το Emacs αλλά και το XEmacs τρέχουν στη κύρια κονσόλα όσο και στο Χ. Το XEmacs ξεκίνησε ως εργασία για να τακτοποιήσει τον κώδικα του Emacs. Προς το παρόν, και οι δύο εκδόσεις αναπτύσσονται με ραγδαίο ρυθμό, και είναι γεγονός ότι μεταξύ των δύο ομάδων υπάρχη καλή επικοινωνία και συνεργασία. Γι αυτό το κεφάλαιο, είναι αδιάφορο ποια έκδοση Emacs χρησιμοποιείτε, διότι οι διάφορες εκδόσεις είναι αδιάφορες για έναν άλλο χρήστη. 17.1 ΑΡΧΙΖΟΝΤΑΣ ΤΟ EMACS Το Emacs μπορείτε να το αρχίσετε από το κέλυφος(γραμμή εντολών) απλά πληκτρολογώντας Emacs. Όταν τρέχεις το Χ περιβάλλον, τότε το Emacs θα εμφανιστεί με το δικό του Χ παράθυρο συνήθως και με μία μπάρα μενού στη κορυφή
Όπου μπορείτε να βρείτε τις πιο σημαντικές λειτουργίες. Στο ξεκίνημα, το Emacs θα σας δέιξει ένα μήνυμα καλωσορίσματος και μετά από λίγα δευτερόλεπτα θα σας μεταφέρει στο «scratch buffer» (βλ. 17.2). Επίσης μπορείτε να ξεκινήσετε το Emacs πληκρολογώντας : % Emacs /etc/resolv.conf Αυτό θα ξεκινήσει το Emacs φορτώνοντας το συγκεκριμένο αρχείο, αποφεύγοντας το μήνυμα καλωσορίσματος. ΠΛΗΚΤΡΑ ΕΝΤΟΛΩΝ Όπως αναφέραμε παραπάνω, το Emacs χρησιμοποιεί το συνδυασμό των πλήκτρων ctrl και alt για τις εντολές. Η συνηθισμένη σύμβαση είναι να γράφουμε με C-letter και M- letter αντιστοίχως. Οπότε το C-x σημαινει ctrl+x και το Μ-x σημαίνει alt+y (Το γράμμα Μ χρησιμοποιήται αντί του Α διότι παλαιότερα το πλήκτρο alt δεν ονομάζοταν έτσι, αλλά Meta key. Το Meta key τα είχε όλα και εξαφανίστηκε από τα πληκτρολόγια των υπολογιστών, και στο Emacs το alt key ανέλαβε τη λειτουργία του.) Πολλές εντολές στο Emacs περιλαμβάνουν ακολουθίες πλήκτρων και συνδιασμούς. Για παράδειγμα, C-x C-c(αυτό είναι ctrl+x ακολουθούμενο από ctrl-c) τερματίζει το Emacs, C-x C-s σώζει το τρέχων αρχείο. Να έχετε υπ όψη σας ότι C-x C-b δεν είναι το ίδιο με C-x b. Το πρώτο σημαίνει ότι το ctrl-x ακολουθείται από ctrl-b, ενώ το δεύτερο ότι το ctrl-x ακολουθείται απλά από το b. 17.2 Buffers
Στο Emacs, το σκεπτικό των «buffers» είναι βασικό. Κάθε φάκελος που ανοίγεται φορτώνεται σε ένα δικό του buffer. Επίσης, το Emacs έχει κάποια ειδικά buffers, τα οποία δεν περιέχουν φακέλους αλλά χρησιμοποιούνται για άλλα πράγματα. Τέτοια ειδικά buffers έχουν ονόματα που αρχίζουν και τελειώνουν με «*» αστερίσκο. Για παράδειγμα το buffer που δείχνει το Emacs όταν αρχίζει για 1 η φορά, είναι το λεγόμενο «scratch» buffer. Σε αυτό το buffer μπορείς να πληκρολογήσεις κείμενο, αλλά το κείμενο που θα πληκρολογηθεί δε θα σωθεί όταν κλείσει το Emacs. Υπάρχει ένα ειδικό buffer που χρειάζεται να ξέρετε γι αύτο και είναι το μίνι buffer. Αυτό το buffer περιέχει μόνο μία γραμμή και είναι πάντα στην οθόνη : είναι η τελευταία γραμμή του παραθύρου του Emacs, κάτω από τη μπάρα κατάστασης του τρέχων buffer. Το μίνι buffer υπάρχει εκεί που το Emacs δείχνει μηνύματα για το χρήστη, και είναι επίσης το μέρος όπου εκτελούνται εντολές που απαιτούν είσοδο από το χρήστη. Για παράδειγμα, όταν ανοίγεις ένα αρχείο το Emacs θα σε ρωτήσει για το όνομά του στο μίνι buffer. Η εναλλαγή από το ένα buffer στο άλλο γίνεται με την εντολή C-x b. Αυτό θα σε ρωτήσει για το όνομα του buffer (το όνομα ενός buffer είναι συνήθως το όνομα του αρχείου το οποίο επεξεργάζεσαι), και δίνει την προεπιλεγμένη επιλογή, που είναι συνήθως το buffer πού εργαζόσουν, πριν αλλάξεις ή δημιουργήσεις το τρέχων buffer που είσαι τώρα. Απλά πατώντας enter θα γυρίσει στη προεπιλογή. Αν θες να μεταφερθείς σε άλλο buffer και όχι στο προεπιλεγμένο από το emac, τότε απλά πληκτρολόγησε το όνομά του. Να έχεις υπ όψη σου ότι να χρησιμοποιήσεις την καλούμενη Tab-completion(ολοκλήρωση με Tab) : απλά πάτα τα πρώτα γράμματα του ονόματος του buffer και πάτα Tab, ύστερα από αυτό το Emacs θα ολοκληρώσει το όνομα του buffer. Η ολοκλήρωση με Tab δουλεύει παντού στο Emacs αρκεί να βγάζει νόημα. Μπορείς να πάρεις μια λίστα από ανοικτά buffers πατώντας C-x C-b. Αυτή η εντολή συνήθως χωρίζει την οθόνη στα δύο, εικονίζοντας το buffer που δούλευες στο πάνω μισό και το καινούριο buffer με όνομα * Buffer List* στο κάτω μισό. Αυτό το buffer περιέχει μία λίστα με όλα τα buffers, το μέγεθος και τις ρυθμίσεις, και τα αρχεία. Αν κάποιο από αυτά είναι επισκεπτούμενο όπως ονομάζεται στο Emacs. Μπορείς να ξεφορτωθείς τις δύο απεικονίσεις πατώντας C-x 1. Σημείωση: Με το Χ, τη λίστα των buffers μπορείτε να τη δείτε και από το Buffer menu στη μπάρα των menu. 17.4 MODES Κάθε buffer στο Emacs έχει ένα mode. Αυτά τα mode διαφέρουν από το vi : ένα mode σου λέει σε τι buffer είσαι μέσα. Για παράδειγμα, υπάρχει ένα text-mode για τα κανονικά αρχεία κειμένων, αλλά υπάρχουν και modes όπως το c-mode για σύνταξη
προγραμμάτων σε C, sh-mode για σύνταξη shell-scripts, latex-mode για σύνταξει αρχείων LATEX, mail-mode για σύνταξη e-mail και άλλων μηνυμάτων, κ.λ.π.. Το mode παρέχει ειδίκες προσωπικές ρυθμιζόμενες και άλλες λειτουργίες που είναι χρήσιμες για το είδος του αρχείου που επεξεργάζεσαι. Είναι δυνατό για ένα mode να αλλάξει τις λειτουργίες των πλήκτρων και τις εντολές. Για παράδειγμα, στο text-mode, το Tab απλά πάει το κέρσορα στο επόμενο Tab-stop, αλλά σε πολλά modes όσον αφορά τις προγραμματιστικές γλώσσες το Tab πάει το κέρσορα στο βάθος από εκεί που πρέπει να αρχίσει να γράφει ανάλογα με το μπλοκ κώδικα που είναι. Τα modes που αναφέρθηκαν παραπάνω καλούνται βασικά modes. To κάθε buffer έχει ένα βασικό mode. Επιπλέον το κάθε buffer μπορεί να έχει ένα ή περισσότερα επιλέον modes. Αυτά τα modes προσφέρουν επιπλέον λειτουργίες που μπορεί να είναι χρήσιμες για συγκεκριμένες λειτουργίες όσον αφορά τη σύνταξη. Για παράδειγμα αν πατήσεις το INSERT, ενεργοποιείς την overwrite-mode, όπου κάνει επικάλυψη. Υπάρχει ακόμα και η auto-fill-mode, όπου είναι ένας χρήσιμος συνδυασμός για το text-mode ή το latex-mode: προκαλεί τη κάθε γραμμή που γράφεις να αυτοσυμπληρώνεται ύστερα από ένα αριθμό χαρακτήρων. Χωρίς το auto-fill-mode, πρέπει να πατήσεις M-q για να συμπληρώσει τη παράγραφο.(επίσης μπορείς να χρησιμοποιήσεις το auto-fill-mode για τροποποιήσεις τη παράγραφο αφού έχεις βάλει μερικό κείμενο μέσα σ αυτή.) Ανοίγοντας Αρχεία Για να ανοίξεις ένα αρχείο στο Emacs, πληκτρολόγησε C-x C-f Το Emacs θα σε ρωτήσει για το όνομα του αρχείου, συμπλήρωσε τη διαδρομή (που συνήθως αρχίζει με /~). Αφού έχεις πληκτρολογήσει μερικώς το όνομα μπορείς να χρησιμοποιήσεις την ολοκλήρωση με Tab, το Emacs θα ανοίξει το αρχείο σε ένα καινούριο buffer το οποίο εμφανίζεται στην οθόνη. Σημείωση: Το Emacs θα δημιουργήσει ένα καινούριο buffer και δε θα φορτώσει το αρχείο στο ήδη υπάρχον. Για να δημιουργήσεις ένα καινούριο αρχείο στο Emacs, δε μπορείς να αρχίσεις να πληκτρολογείς αμέσως. Πρώτα πρέπει να δημιουργήσεις το buffer γι αυτό και να το ονοματίσεις. Αυτό το κάνεις πληκτρολογώντας C-x C-f και το όνομα του αρχείου, όπως όταν ανοίγεις ένα καινούριο αρχείο. Το Emacs θα σε ειδοποιήσει ότι το αρχείο δεν υπάρχει και θα δημιουργήσει ένα νέο buffer και στο minibuffer θα αναφέρει (New file). Όταν πληκτρολογείς C-x C-f και μετά βάζεις μία διαδρομή αντί για ένα όνομα, το Emacs θα δημιουργήσει ένα νέο buffer όπου θα βρεις μία λίστα με όλα τα αρχεία στο φάκελο αυτό. Μπορείς να μετακινήσεις το κέρσορα όπου θες και να τροποποιήσεις το αρχείο που θέλεις ή να το ανοίξεις.(ουσιαστικά το Emacs στη παραπάνω κατάσταση λειτουργεί ως διαχειριστής αρχείων (dired-mode) ).
Όταν έχεις πληκτρολογήσεις C-x C-f μπορείς να πληκτρολογήσεις C-g για να ακυρώσεις την ενέργεια. To C-g λειτουργεί σχεδόν παντού στην περίπτωση που θες να ακυρώσεις ένα λάθος ή μια εντολή που άρχισες και δε θες να συνεχίσεις. 17.4 Βασική Επεξεργασία Όταν ανοίγεις ένα αρχείο, μπορείς να το μετακινήσεις οπουδήποτε με τον κέρσορα. Τα πλήκτρα του κέρσορα και τα κουμπιά PgUp, PgDn κάνουν αυτό που περιμένεις. Tα Home και End σε πηγαίνουν στην αρχή και στο τέλος της γραμμής αντίστοιχα. ( Σε παλαιότερες εκδόσεις, σε πήγαινάν στην αρχή και στο τέλος του buffer.) Υπάρχουν όμως τα πλήκτρα Control και Meta(Alt) όπου ο σύνδιασμός τους μετακινεί τον κέρσορα. Για να μη μετακινείς τα χέρια σου από τη μία άκρη του πληκτρολογίου στην άλλη είναι χρήσιμος ο παραπάνω συνδιασμός, είναι σαφώς πιο γρήγορα αν τα συνηθήσεις. Οι πιο βασικοί συνδυασμοί όπως οι εντολές υπάρχουν στον πίνακα 17-1. Σημείωση: Πολλές Meta εντολές είναι παράλληλες με τις Control εντολές μόνο που οι πρώτες διαχειρίζονται μεγαλύτερα πράγματα: όσο το C-f πηγαίνει ένα χαρακτήρα μπροστά, το M-f πηγαίνει μία λέξη μπροστά κ.ο.κ. Σημείωση: Το Μ-< και το Μ-> απαιτούν την πληκτρολόγηση Shift+Alt+comma και Shift+Alt+dot αντίστοιχα επειδή τα < και > είναι Shift+ comma και Shift+dot.(Τα παραπάνω γίνονται μόνο αν έχεις το στανταρ US πληκτρολόγιο, αν δε έχεις τότε πράττεις ανάλογα) Σημείωση: Το C-k διαγράφη(ή σκοτώνει όπως συνηθήζετε να λέγετε) όλο το κείμενο μετά τον κέρσορα και μέχρι το τέλος της γραμμής, αλλά δε διαγράφει την ίδια τη γραμμή(δηλαδή δε διαγράφει την τελευταία νέα γραμμή). Διαγράφει μόνο τη γραμμή σαν να μην υπήρχε καθόλου κείμενο μετά τον κέρσορα. Με άλλα λόγια για να διαγράψεις μία ολόκληρη γραμμή, πρέπει να τοποθετήσεις τον κέρσορα στην αρχή της γραμμής και μετά πάτα C-k δύο φορές: την πρώτη για να διαγράψεις το κείμενο στη γραμμή και τη δεύτερη για να διαγράψεις την ίδια την γραμμή. Πίνακας 17-1 Βασικές εντολές επεξεργασίας του Emacs C-b C-f C-n C-p C-a C-e M-b M-f M-} M-{ Εντολή Αποτέλεσμα Ένας χαρακτήρας πίσω Ένας χαρακτήρας μπροστά Μία γραμμή κάτω Μία γραμμή πάνω Αρχή γραμμής Τέλος γραμμής Μία λέξη πίσω Μία λέξη μπροστά Μία παράγραφο μπροστά Μία παράγραφο πίσω
M-a M-e C-d M-d C-v M-v M-< M-> C-_ C-k C-s C-r Μία πρόταση πίσω Μία πρόταση μπροστά Διαγράφει τον χαρακτήρα κάτω από τον κέρσορα Διαγράφει μέχρι το τέλος της τρέχουσας λέξης Κάτω μία οθόνη(pgdn) Πάνω μία οθόνη(pgup) Πήγαινε στην αρχή του buffer Πήγαινε στο τέλος του buffer Αναίρεση της τελευταίας αλλαγής(μπορεί να επαναληφθεί) γι αυτό να έχεις πληκτρολογήσει Shift+Control+hyphen Διαγραφεί μέχρι το τέλος της γραμμής Αναζήτηση προς τα εμπρός Αναζήτηση προς τα πίσω 17.5 Σώζοντας αρχεία Για να σώσεις ένα αρχείο πρέπει να πληκτρολογήσεις C-x C-s Το Emacs δεν θα σε ρωτήσει για το όνομα, το buffer θα σωθεί στο αρχείο από το οποίο φορτώθηκε. Αν θες να σώσεις το κειμενός σου σε ένα νέο αρχείο τότε πρέπει να πληκρολογήσεις C-x C-w Όταν σώζεις ένα αρχείο για πρώτη φορά σε αυτή την εκπαιδευτική συνεδρία το Emacs λογικά θα σώσει μία παλιά έκδοση του αρχείου σε ένα backup αρχείο το οποίο έχει το ίδιο όνομα αλλά επιπλέον ακολουθείται από ένα tilde π.χ. όταν επεξεργάζεσαι ένα
αρχείο με το όνομα cars.txt το Emacs θα δημιουργήσει ένα backup με το όνομα cars.txt~. Αυτό το backup είναι ένα αντίγραφο του αρχείου που άνοιξες. Όσο δουλεύεις το Emacs δημιουργεί αυτόματα ένα αντίγραφο της δουλειάς που κάνεις σε ένα αρχείο το οποίο το αποθηκεύει με όνομα το οποίο ξεκινάει και τελειώνει με # π.χ. #cars.txt#. Αυτό το backup διαγράφεται αυτόματα όταν σώζεις την εργασία με C-x C-s. Όταν τελειώσεις την επεξεργασία μπορείς να διαγράψεις (να σκοτώσεις) το buffer που υπάρχει το αρχείο πληκτρολογώντας C-x k Ύστερα το Emacs θα σε ρωτήσει ποιο buffer θες να σκοτώσεις με το υπάρχον buffer ως προεπιλογή το οποίο μπορείς να επιλέξεις πατώντας ENTER. Αν δεν έχεις σώσει το αρχείο το Emacs θα σε ρωτήσει αν όντως θες να σκοτώσεις το buffer. Κλείνοντας το E-macs Όταν τελειώσεις με όλες τις εργασίες στο Emacs μπορείς να πληκτρολογήσεις C-x C-c Αυτό κλείνει το Emacs. Αν έχεις μη σωσμένα αρχεία το Emacs θα στο πει και θα σε ρωτήσει αν θέλεις να τα σώσεις. Αν πεις όχι τότε το Emacs θα σε ρωτήσει για μία τελική φορά και μετά θα κλείσει.