ΦΥΣ-150. Χρήσεις του Υπολογιστή
Διάλεξη 5


Επεξεργαστες Κειμενου (Editors)

Οι επεξεργαστες κειμενου ειναι τα βασικα μας εργαλεια για να μεταβαλλουμε τα περιεχομενα των αρχειων μας κατα βουληση. Υπαρχουν πολλοι editors και η επιλογη ενος η περισσοτερων απο το χρηστη βασιζεται στις αναγκες και τις προσωπικες του προτιμησεις. Ενας editor πρεπει να επιλεγει βασει των δυνατοτητων του να κανει τις εργασιες που κανουμε συνηθως αποδοτικα. Εμεις εχουμε να σας προτεινουμε τον επεξεργαστη emacs που κατα τη γνωμη μας ειναι ο πληρεστερος ιδιαιτερα για οσους ασχοληθουν με προγραμματισμο, η χρηση του για τις κοινες εργασιες επεξεργασιας απλη και διαισθητικη καθως και η δυνατοτητα του να διαμορφωθει απο το χρηστη κατα το δοκουν οταν αυτος εξοικειωθει περισσοτερο μαζι του μεγαλη.

Στην αρχη ο emacs μπορει να σας φανει δυσκολος εξ'αιτιας του μεφαλου αριθμου λειτουργιων/εντολων που εχει. Μην ... πηξετε. Εχετε στο νου σας οτι για τις απλες εργασιες επεξεργασιας δεν σας χρειαζονται ολες οι δυνατοτητες του emacs.

Για να καλεσετε τον emacs γραψτε στη γραμμη εντολων
emacs &
η προσθεστε το ονομα του αρχειου <file> που θελετε να επεξεργαστητε:
emacs <file> &
Για να καλεσετε τον emacs στο τερματικο σας χωρις να ανοιξετε ειδικο παραθυρο για τον emacs, χρησιμοποιηστε την εντολη
emacs -nw
Για να γραψετε Ελληνικα ειναι επιθυμητο να δηλωσετε τη γραμματοσειρα που θα σας δειχνει ελληνικους χαρακτηρες. Μια επιλογη ειναι:
emacs --unibyte -fn -greek-lucidatypewriter-medium-r-normal-sans-12-120-75-75-m-80-iso8859-7
Μια και η εντολη ειναι αρκετα μεγαλη, μπορειτε να επαναορισετε την εντολη emacs στο αρχειο ~/.tcshrc προσθετοντας την γραμμη:

alias emacs "emacs --unibyte -fn -greek-lucidatypewriter-medium-r-normal-sans-12-120-75-75-m-80-iso8859-7"
Ο επεξεργαστης emacs εχει πολλα πλεονεκτηματα, μπορει ομως να μην ειναι η επιλογη σας. Μπορειτε επισης να μαθετε σιγα σιγα και αλλους editors και να τους χρησιμοποιητε για διαφορετικες εργασιες. Ενας ελαφρυς και ευκολος editor που τρεχει στο τερματικο σας ειναι ο pico, ενω απλοι στην εκμαθηση ειναι και οι nedit και gedit. Οι παραπανω επιλεχτηκαν γιατι ειναι δυνατον να γραψετε και να διαβασετε ελληνικα με αυτους.

Βασικες Εννοιες

Οταν χρησιμοποιοντας τον editor επεξεργαζεστε ενα αρχειο, τοτε στην πραγματικοτητα γινεται ο εξης κυκλος:

Πρεπει να κατανοησετε την παραπανω διαδικασια γιατι αν δεν "σωσετε" τα περιεχομενα του buffer στο αρχειο ή αν το προγραμμα η το λειτουργικο "πεθανει" τοτε η εργασια σας παει ... στραφι. Εκτος και αν σας σωσει ο editor. Και ο emacs ειναι καλος σ' αυτο. Ανα περιοδους (καθε 300 πληκτρολογησεις) σωζει τη δουλεια σας σε ενα αρχειο #name# οπου name ειναι το ονομα του αρχειου που επεξεργαζεστε. Επισης οταν σωσετε τη δουλεια σας, ο emacs κραταει αντιγραφο (backup) του αρχειου σας στο αρχειο name~. Ετσι μπορειτε να σωθητε απο την ... αυτοκαταστροφικοτητα σας (μπορειτε να διαμορφωσετε τον emacs να σωζει καθε version του αρχειου που μεταβαλλετε)!

Οταν ξεκινα ο emacs εμφανιζεται ενα παραθυρο με ενα buffer, το mode line, το minibuffer και τα menu. Αν εχετε ηδη ανοιξει ενα αρχειο (ειτε δινοντας την εντολη find-file ειτε δινοντας το ονομα του αρχειου σαν ορισμα στην γραμμη εντολων του φλοιου που καλεσατε τον emacs) τα περιεχομενα του αρχειου εμφανιζονται στο κυριως buffer.

Το mode line ειναι στο κατω μερος του παραθυρου και μας δινει χρησιμες πληροφοριες:

Στη συγκεκριμενη περιπτωση μας λεει το ονομα του αρχειου (index.html), οτι ειναι αρχειο γλωσσας HTML (γλωσσα μορφοποιησης μετα-κειμενου για το διαδικτυο), οτι βρισκομαστε στην γραμμη 26 (L26 = Line 26) και στη στηλη 22 (C22 = Column 22) του buffer και οτι κοιταζουμε τα πρωτα 3% του αρχειου. Τα δυο αστερακια (-:**) σημαινουν οτι εχουμε κανει αλλαγες στον buffer που πρεπει καποια στιγμη να σωσουμε. Οταν σωσουμε το αρχειο γινονται παυλες (-:--).

Κατω απο το mode line βλεπουμε το miniuffer.

Ειναι η "γραμμη εντολων" του emacs και μπορουμε εκει να πληκτρολογησουμε τα ονοματα των εντολων.

Στην κορυφη του παραθυρου βλεπουμε τα menu. Απο εκει μπορουμε με το ποντικι μας να επιλεξουμε εντολες:

Τελος, το κοκκινο τετραγωνακι πανω απο το χαρακτηρα "γ" της λεξης "επιλεγει" ειναι ο cursor. Αυτο ειναι το σημειο οπου μπορω να αρχισω λ.χ. να προσθετω χαρακτηρες στον buffer.

Υπαροχουν τρεις βασικοι τροποι εισαγωγης εντολων στον emacs:

Στη δευτερη περιπτωση ακολουθουμε την εξης συμβαση: Οταν γραφουμε C-<char> εννοουμε πως παταμε το πληκτρο Ctrl ταυτοχρονα με το πληκτρο <char>. Π.χ. C-x C-f σημαινει κρατα το πλητρο Ctrl διαρκως πατημενο και πατα ταυτοχρονα διαδοχικα τα πληκτρα x και f. Στην περιπτωση του Μ-<char> εννοουμε πως παταμε το πληκτρο Alt μαζι με το πληκτρο <char>. Π.χ. M-x σημαινει κρατα το πληκτρο Alt πατημενο ταυτοχρονα με το πληκτρο x. Ισοδυναμα μπορουμε να πατησουμε το πληκτρο Esc, να το αφησουμε και μετα να πατησουμε το x. Αυτο ειναι ιδιαιτερα χρησιμο σε τερματικα που δεν εχουν κανονησει το πληκτρο Alt να κανει την δουλεια του πληκτρου meta.

Στην τριτη περιπτωση μεταβαινουμε στο minibuffer με την εντολη M-x Γραφουμε το ονομα της συναρτησης (π.χ. save-buffer) και παταμε Enter ωστε να εκτελεστει η εντολη. Αν θελουμε να φυγουμε απο το minibuffer ή να ακυρωσουμε μια εντολη, αρκει να πατησουμε το πληκτρο C-g μια ή περισσοτερες φορες για να ξεφυγουμε. Αυτο ειναι το "Escape" πληκτρο του emacs και ποτε δεν πρεπει να φοβομαστε να το παταμε οσες φορες θελουμε!!!

Επεξεργασια Κειμενου

Για να φερουμε τα περιεχομενα ενος αρχειου στο buffer, βαζουμε το ονομα του αρχειου σαν ορισμα στη γραμμη εντολων που καλεσε τον emacs, η δινουμε την εντολη:
M-x find-file
στο minibuffer ή την ακολουθια χαρακτηρων C-x C-f ή απο το File menu επιλεγουμε Open file και γραφουμε το path του αρχειου.

Τοποθετουμε τον cursor εκει που επιθυμουμε να προσθεσουμε κειμενο. Πληκτρολογουμε το κειμενο που θελουμε να προσθεσουμε. Για να γραψουμε ελληνικα μπορουμε να πατησουμε το πληκτρο M-g και να εισαγουμε ελληνικους χαρακτηρες. Πατωντας το ξανα επιστρεφουμε στους λατινικους χαρακτηρες. Παρατηρηστε το mode line σε καθε περιπτωση:
                                               
Για να τονισουμε ενα φωνηεν, παταμε το χαρακτηρα ; πριν να πατησουμε το φωνηεν. Για να βαλουμε διαλυτικα παταμε : πριν το φωνηεν. Για διαλυτικα και τονο μαζι παταμε : ; και μετα το φωνηεν. Για να βαλουμε ερωτηματικο ή ανω-κατω τελεια παταμε τους αντιστοιχους χαρακτηρες δυο φορες η το πληκτρο q, Q. Για να γραψουμε ς παταμε το w κ.ο.κ (κανετε δοκιμες).

Για να διορθωσουμε λαθη που καναμε σβηνουμε χαρακτηρες προς τα πισω με το πληκτρο Back Space και προς τα εμπρος με C-d. Μια ολοκληρη γραμμη μπορει να σβησει με το πληκτρο C-k. Μπορουμε να ανοιξουμε μια γραμμη με το πληκτρο C-o. Ο cursor μετακινηται σε αλλα σημεια του buffer με τα βελακια ή κανοντας το με ποντικι αριστερο κλικ εκει που θελουμε.

Στην αρχη και στο τελος του buffer μεταφερομαστε με τις εντολες M-< και M-> ή πατωντας τα πληκτρα Home End. Εναλλακτικα, απο το minibuffer:
M-x beginning-of-buffer
M-x end-of-buffer

Μπορουμε να μετακινηθουμε σελιδα-σελιδα με τα πληκτρα C-V και M-V ή με τα πληκτρα Pg Dn και Pg Up Με τον curson μπορουμε να κινησουμε την πλαινη μπαρα (scrollbar) και να τοποθετηθουμε σε οποιο σημειο του buffer θελουμε. Επισης μπορουμε να κεντραρουμε το κειμενο και να ξαναζωγραφισουμε το παραθυρο αν για καποιο λογο γινει μπερδεμα με το πληκτρο C-l

Στην αρxη και στο τελος της τρεχουσας γραμμης μεταφερομαστε με τα πληκτρα C-a και C-e.

Για να σωσουμε τη δουλεια μας εκτελουμε την εντολη απο το minibuffer
M-x save-buffer
ή παταμε το πληκτρο C-x C-s ή απο το File menu επιλεγουμε Save (current buffer)

Για να κλεισουμε τον emacs:
M-x save-buffers-kill-emacs
ή παταμε το πληκτρο C-x C-c ή απο το File menu επιλεγουμε Exit Emacs

Αντιγραφη/Αποκολληση/Επικολληση Κειμενου (Copy/Cut/Paste)

Μια βασικη εννοια στον emacs ειναι αυτη της περιοχης (region). Αυτη οριζεται απο τη θεση του point και mark. Το point φαινεται και ειναι το σημειο πριν το χαρακτηρα πανω στον οποιο βρισκεται ο cursor. Το mark πρεπει καποιος να το ορισει με εναν απο τους παρακατω τροπους:

Η αποκολληση του κειμενου της περιοχης γινεται με την εντολη C-w Η αντιγραφη με την εντολη M-w Η επικολληση με την εντολη C-y. Εναλλακτικα απο τα menu Edit βρισκω τις επιλογες Cut, Copy, Paste και Select and Paste.

Στην περιπτωση που χρησιμοποιω το ποντικι με τους δυο πρωτους τροπους, η αντιγραφη εχει ηδη γινει, η αποκοπη μπορει να γινει με δευτερο δεξι κλικ του ποντικιου και η επικολληση με μεσαιο κλικ (σε ποντικια με δυο κουμπια παταμε δεξι και αριστερο ταυτοχρονα). Η αντιγραφη/επικολληση γινεται και απο αλλες παραθυρικες εφαρμογες οπως το mozilla, τερματικα, αλλα παραθυρα του emacs κλπ.

Επισης μπορει να γινει αποκοπη ολοκληρης γραμμης κειμενου με την εντολη C-k και στη συνεχεια να επικολληθει αλλου με την C-y

UNDO

Σε πολλες περιπτωσεις οι αλλαγες που καναμε δεν μας ικανοποιουν ή κανουμε καταστροφικα λαθη. Δινοντας διαδοχικα την εντολη
M-x undo
η πατωντας το πληκτρο C-x u μπορουμε να επαναφερουμε το κειμενο μας στην αρχικη του μορφη! Η εντολη undo υπαρχει και στο μενου Edit -> Undo

Αναζητηση/Αντικατασταση Κειμενου

Η αναζητηση κειμενου γινεται με την εντολη
isearch-forward
για αναζητηση εμπροσθεν του point και με την εντολη
isearch-backward
για αναζητηση πισω απο το point. Πιο συντομα οι εντολες δινονται με τα πληκτρα C-s και C-r αντιστοιχα.

Για να αντικαταστησω κειμενο, δινω την εντολη
query-replace
και γραφω στο minibuffer το κειμενο προς αντικατασταση και πατω Enter Εισαγω το νεο κειμενο και πατω παλι Enter O emacs με ρωταει αν θελω την αντικατασταση και απαντω με y (yes), n (no) ή q (quit).

Βοηθεια

Ο emacs εχει ενα πολυ καλο συστημα βοηθειας για τον χρηστη που ξεκιναει αλλα και για τον προχωρημενο χρηστη. Ο συνδυασμος πληκτρων C-h <key> <key> = f,k,a,b,m,t,i μας δινει προσβαση στο συστημα βοηθειας:

Γενικα παρατηρηστε οτι υπαρχει μια λογικη και στα ονοματα των συναρτησεων αλλα και στην επιλογη των πληκτρων συντομευσης. Τα πληκτρα συντομευσης αναφερονται και στα menu απο οπου μπορειτε να ...φρεσκαρετε τη μνημη σας. Χρησιμοποιηστε κατα κορον την συμπληρωση εντολων με το Tab στο minibuffer αλλα και στο συστημα βοηθειας (π.χ. C-h f) για να αφηνετε τον emacs να σας θυμιζει οτι χρειαζεστε. Για τη μνημη σας υπαρχουν και οι καρτες του emacs-survival emacs-refcard και μπορειτε να τισ κατεβασετε απο τους πιο πανω συνδεσμους.

Modes

Ο emacs επεξεργαζεται τα buffers θετοντας το περιβαλλον σε ορισμενους "τροπους" (modes). Οταν για παραδειγμα εργαζεστε σε ενα αρχειο γλωσσας προγραμματισμου FORTRAN ο emacs αυτοματα εισαγει την fortran-mode, σε ενα αρχειο γλωσσας C ο emacs αυτοματα εισαγει την c-mode κ.ο.κ. Σε καθε mode η λειτουργια των πληκτρων αλλαζει και εισαγονται καινουργιες συντομευσεις για εντολες που χρειαζεται συνηθως καποιος οταν επεξεργαζεται το αναλογο αρχειο.

Για παραδειγμα η χρηση του πληκτρου Tab ειναι διαφορετικη στη fortran-mode απο οτι σε ενα απλο αρχειο κειμενου: Τοποθετει τον κωδικα στη σωστη στηλη κατι που οποιος προγραμματιζει σε Fortran θα χαρει πολυ να γινεται αυτοματα. Επισης οι εντολες, συναρτησεις, μεταβλητες, σχολια κλπ θα χρωματιστουν με αλλο χρωμα (για αυτο μπορειτε να παρετε ηδη μια γευση απο το αρχειο html που φαινεται στην παραπανω εικονα του emacs). Οι παρενθεσεις, αγκυλες, loops θα μαρκαριστουν με βολικο τροπο για τον προγραμματιστη. Περα απο την βολικοτητα και καλη αισθητικη, ο προγραμματιστης θα γλυτωσει απο πολλα πιθανως ανοητα λαθη!

Ενα απλο αρχειο κειμενου μπαινει στον λεγομενο fundamental-mode, ενω αρχεια γλωσσων προγραμματισμου στους αναλογους modes: fortran-mode για Fortran, c-mode για C, perl-mode για Perl, lisp-mode για Lisp, sh-mode για shell scripting κλπ κλπ. Οι modes δεν περιοριζονται σε γλωσσες προγραμματιμου: Εχουμε latex-mode για μορφοποιηση κειμενου σε LaTeX, html-mode για μορφοποιηση κειμενου σε HTML, mail-mode για συνθεση μυνηματος ηλεκτρονικου ταχυδρομειου (email) κλπ.

Εκτος απο τους παραπανω κυριους τροπους λειτουργιας (major modes) υπαρχουν και minor modes τα οποια μπορουν να "τρεχουν" σε συνδυασμο με οποιοδηποτε αλλο mode. Για παραδειγμα εχουμε τον greek-mode για να γραφουμε ελληνικα, auto-fill-mode για να αλλαζει η γραμμη αυτοματα οταν φτανουμε στο οριο στηλων που εχουμε θεσει, scroll-bar-mode για να εχουμε scroll bar για τη μετακινηση του παραθυρου, overwrite-mode για να προσθετουμε χαρακτηρες πανω απο τους ηδη υπαρχοντες, font-lock-mode για να χρωματιζονται οι ειδικες λεξεις σε καθε mode. Οι modes μπορουν να κληθουν και απο το minibuffer οπως μια οποιαδηποτε αλλη εντολη και το αποτελεσμα ειναι η διαδοχικη εκκινηση/σταματημα του συγκεκριμενου mode. Δωστε για παραδειγμα την εντολη
M-x scroll-bar-mode
μερικες φορες και παρατηρηστε τις αλλαγες που γινονται στο παραθυρο.

Χρηση Παραθυρων

Οταν ενα αρχειο μεγαλωνει σε μεγεθος ή η επεξεργασια του αυξανει σε πολυπλοκοτητα ειναι πολυ βολικο να μπορουμε να δουμε διαφορετικα τμηματα του ιδιου αρχειου, να συγκρινουμε με αλλα αρχεια ή να αντιγραψουμε τμηματα αλλων αρχειων ή και του ιδιου στο σημειο επεξεργασιας. Με τον emacs εχουμε τη δυνατοτητα να χωρισουμε ενα παραθυρο σε δυο η περισσοτερα μερη ή να ανοιξουμε καινουργια παραθυρα (frames) αν εργαζομαστε σε γραφικο περιβαλλον.

Με την εντολη
M-x split-window-vertically
(συντομευση C-x 2) χωριζουμε το υπαρχον παραθυρο σε δυο μερη ενω με την εντολη
M-x delete-other-windows
(συντομευση C-x 1) σβηνουμε τα υπολοιπα παραθυρα. Σε καθε παραθυρο μπορουμε να κινηθουμε ανεξαρτητα στο ιδιο ή αλλο buffer και να ανοιξουμε αλλο αρχειο η να διαλεξουμε αλλο buffer. Για να μεταφερθουμε σε αλλο παραθυρο κανουμε αριστερο κλικ με το ποντικι η με την εντολη other-window (C-x o) Για να αλλαξουμε τα μεγεθη των παραθυρων σερνουμε με το ποντικι μας το αντιστοιχο line mode.

Σε καθε παραθυρο μπορουμε να ανοιξουμε καινουργιο αρχειο (C-x C-f) ή να μεταφερθουμε σε αλλο buffer με την την εντολη C-x b (switch-to-buffer). Ακομα πιο απλα μπορουμε να επιλεξουμε αλλο buffer με το ποντικι μας απο το menu Buffers. Οταν τα buffers γινουν πολλα, μπορουμε να βαλουμε ... ταξη με την εντολη C-x C-b (list-buffers).

Διαμορφωση λειτουργιας του Emacs

Η καθιερωμενη συμπεριφορα του emacs μπορει να τροποποιηθει ή/και να εμπλουτιστει απο το αρχειο ~/.emacs Οταν ο emacs ξεκιναει, διαβαζει το αρχειο αυτο και εκτελει τις εντολες που ειναι γραμμενες σ' αυτο. Εκει μπορει π.χ. ο χρηστης να (επανα)οριζει την λειτουτγια των πληκτρων, καινουργιες συναρτησεις που να κανουν συνθετες λειτουργιες χρησιμες γι'αυτον, την εμφανιση του παραθυρου, του line mode κλπ.

Οι εντολες στο αρχειο αυτο ειναι γραμμενες σε μια παραλλαγη της γλωσσας lisp, την Emacs Lisp. Για να κανουμε απλες ρυθμισεις δεν χρειαζεται να γνωριζουμε τη γλωσσα στη λεπτομερεια της. Κατεβαστε τα παρακατω αρχεια και δειτε πως δουλευουν. Σωστε τα στην περιοχη σας με το ονομα ~/.emacs και επανεκινηστε τον emacs Εναλλακτικα δωστε την εντολη
M-x load-file Enter ~/.cshrc
Δοκιμαστε τωρα πως δουλευουν τα πληκτρα F1 - F12.

Αλλοι editors

Αν θελετε μπορειτε να δοκιμασετε και καποιους απο τους αλλους editors που βρισκονται στο συστημα σας. Λαμβανοντας υπ'οψην την απλοτητα χρησης και την αναγκη να γραφετε ελληνικα, προτενουμε τους pico, nedit και gedit.

Καλη διασκεδαση ...

Επι πλεον διαβασμα