[It's a BUG] regexp για newlines στο kate/kwrite

Giorgos Keramidas keramida at ceid.upatras.gr
Tue Jan 9 15:52:58 EET 2007


On 2007-01-09 00:33, Nick Demou <ndemou at gmail.com> wrote:
>Την 8/1/2007, Nick Demou <ndemou at gmail.com> έγραψε:
>> Ακολουθόντας το kate handbook[1] δοκιμάζω να ψάξω για foo μετά αλλαγή
>> γραμμής μετά bar χρησιμοποιώντας το regexp:   foo\nbar    αλλά το kate
>> και το kwrite παραπονιούνται ότι δεν βρέθηκε.
>
> Never mind, απλά το documentation του kate δεν συμφωνεί με το
> source του kate :-)  [1] Στην πράξη ούτε να ψάξει μπορεί για \n
> ούτε και να αντικαταστήσει κάτι με \n.
>
> [1] http://bugs.kde.org/show_bug.cgi?id=36803
>
> ________________
> Υ.Γ. βραδυνή γκρίνια που μπορείτε κάλιστα να αγνοήσετε:  αμά
> έχεις την ατυχία να είσαι windows brainwashed χρήστης και να
> έχεις περάσει και κάποια χρόνια παρέα με το textpad, τότε οι
> linux text editors σε εκδικούνται δεόντος: οι popular εκδοχές ή
> θα είναι super powerful αλλά με εντελώς απρόσμενο τρόπο χρήσης
> ή θα είναι επιπέδου "somewhat better than notebook"

Γι αυτό υπάρχουν οι editors και οι "editors".

<σχετικά-informative-spam>

Στο γνωστό editor (GNU Emacs), με το οποίο σας πρήζω τα συκώτια
εδώ και κάμποσο καιρό, όταν ψάξεις με:

    C-s foo[[:space:]]\+bar RET

Το newline το θεωρεί «άλλο ένα whitespace character».  Μπορεί, φυσικά,
να «αγκιστρώσει» κανείς ένα pattern στο newline, με «$», με κάτι σαν:

    C-s foo[[:space:]]*$ RET

Αλλά δεν είναι ιδιαίτερα απαραίτητο.

> ή θα μοιάζουν επαρκώς δυνατές αλλά θα σου κρύβουν κάποια σοβαρή
> αδυναμία (π.χ. δεν θα υποστηρίζουν utf-8

Και utf-8 υποστηρίζει.

> ή δεν θα κάνουν search & replace για special characters

Και πλήρη υποστήριξη για regexp με «ειδικούς» χαρακτήρες έχει.

> ή θα έχουν πολύ αργό load time/response time).

Και δεν έχει τραγικά μεγάλο response time (την τελευταία φορά που το
δοκίμασα σε μηχάνημα με KDE, το KDevelop κάνει «αιώνες» να φορτώσει σε
σχέση με το Emacs).

> Οι not-so-popular εκδοχές είναι τόσο πολές που βάζεις τα κλάματα όταν
> σκέφτεσε πόσες μέρες θες απλά και μόνο για να ρίξεις μια γρήγορη ματιά
> παρόλο που από την πρώτη στιγμή για τον κάθε ένα θα είσαι _σχεδόν_
> βέβαιος πως είναι απίθανο να έχουν πετύχει τον απίστευτο συνδιασμό
> πληρότητας και απλότητας του textpad (τουλάχιστον από την σκοπιά ενός
> windows brainwashed χρήστη)...

Το textpad είναι για πέταμα.  Στη δουλειά αντιμετωπίζουμε μόνιμα
πρόβλημα από τους «brainwashed textpad addicts», που πιστεύουν ότι είναι
«γαμώ τις ιδέες» να πειράζεις το TAB size σε 4, 2 ή κάτι άλλο
ευφάνταστο, και να κάνεις commit κώδικα όπως:

         if (condition) {
    -        original;
    +                new-line;
         } else {

Όταν ανακαλύψουν ότι γι αυτό φταίει ότι δεν έχουν ρυθμίσει σωστά το
textpad, είναι πλέον αργά.

Από τα features που έχει το textpad[1] φαίνεται πως είναι απλά ένα
glorified notepad, αλλά ας δούμε ποιά από αυτά έχει ήδη το GNU Emacs:
[1] http://www.textpad.com/products/textpad/features.html

# * Huge files can be edited (up to the limits of virtual memory for
#   the 32-bit edition). See Specifications for the actual limits.

Αυτό δεν το κάνει το GNU Emacs.  Έχει ένα όριο στο πόσο μεγάλα buffers
μπορεί να ανοίξει.  Συνήθως αυτό δεν είναι πρόβλημα, παρόλο που το όριο
μπορεί να είναι τόσο μικρό όσο 300 MB.

# * Supports Universal Naming Convention (UNC) style names, and long
#   file names with spaces.

Αυτό δεν έχει νόημα ως 'feature' σε ένα UNIX σύστημα, αφού αναφέρεται
στα ονόματα αρχείων της μορφής `\\server\sharename\path\filename'.

Ένα UNIX editor δεν έχει ανάγκη καν να ασχοληθεί με αυτά τα πράγματα,
αφού το shared directory είναι ήδη 'mounted' σε UNIX-like path.

# * CUA compliant keyboard commands.

Αυτό το υποστηρίζει το GNU Emacs, με το `cua-mode'.  Το `cua-mode' δεν
είναι ενεργοποιημένο στην προκαθορισμένη εγκατάσταση του Emacs, αλλά
είναι πανεύκολο να ενεργοποιηθεί μια και καλή, είτε για ένα χρήστη, είτε
για όλους τους χρήστες που έχει το σύστημα.

# * English, French, German, Italian, Polish, Portuguese and Spanish
#   user interfaces.

Υπάρχει μόνο Αγγλικό interface, από όσο ξέρω.  Μεταφράσεις του Info
manual και του Tutorial υπάρχουν σε πολλές γλώσσες.

# * A spelling checker with dictionaries in 10 languages.

Υπάρχει πολύ καλό integration με ispell και aspell.  Μάλιστα, το GNU
Emacs υποστηρίζει ακόμα και 'on the fly' spell checking, την ώρα που
γράφει κανείς, με επιλογή για αυτόματη προβολή των προτεινόμενων
διορθώσεων.

# * Multiple files can be simultaneously edited, with up to 2 views per
# file.

Δεν υπάρχει όριο στο πόσα files μπορεί να επεξεργαστεί κανείς σε GNU
Emacs.  Ή έστω όχι κάποιο όριο που να είναι εγγενής περιορισμός του
ίδιου του GNU Emacs.

Πολλαπλά παράθυρα μπορούν να δείχνουν πολλές φορές το ίδιο buffer, σε
διαφορετικά σημεία του, με ξεχωριστό 'point' location για το κάθε
buffer, με ξεχωριστό 'cut-and-paste' region, κλπ κλπ.

# * Warm Start feature lets you restart exactly where you left off.

Αυτό δεν υπάρχει σε GNU Emacs.  Μπορεί, όμως, κανείς να χρησιμοποιήσει
persistent bookmarks για το κάθε αρχείο που επεξεργάζεται, πρακτικά
χωρίς περιορισμό στο πώς ονομάζονται και πόσα είναι.

# * In addition to the usual cut, copy and paste capabilities,
#   selected text can be case shifted and block indented, and
#   characters, words and lines can be transposed. Cut and copied text
#   can be appended to the clipboard, as well as replacing its
#   contents.

Όλα αυτά γίνονται και στο GNU Emacs, εκτός ίσως από το τελευταίο.

Το GNU Emacs, όσο είναι ανοιχτό ένα session, έχει και κάτι ακόμα όμως.
Αυτό που ονομάζεται 'kill ring'.

Το kill-ring έχει configurable μέγεθος από cut-and-paste regions
που μπορεί να αποθηκεύσει, και configurable μέγιστο μέγεθος
μνήμης που μπορεί να χρησιμοποιήσει (πριν αρχίσει να 'πετάει' τα
παλιά ring entries).

Με την εντολή C-y μπορεί κανείς να κάνει paste την αρχή του kill
ring, και με την εντολή M-y μπορεί να αλλάζει κυκλικά μεταξύ όλων
των εγγραφών του kill-ring (αντικαθιστώντας το τρέχον 'paste
region' με τα πιο παλιά 'cut regions' κυκλικά, μέχρι να βρει αυτό
που όντως θέλει).

# * Text can be automatically word-wrapped at the margin, or at a
#   specified column, if it does not fit on a line. In this mode, text
#   can be split into separate lines where wrapping occurs, or lines
#   can be intelligently joined, preserving paragraphs.

Ναι, ναι, και ναι.

Όλα αυτά είναι standard features και στο GNU Emacs.

Μάλιστα, το rectangle-editing mode, μπορεί να χρησιμοποιηθεί
ακόμα και σε buffers των οποίων γλώσσα δεν έχει καν υποστήριξη
για 'comment syntax'.

# * OLE2 drag and drop editing for copying and moving text between
#   documents.

Windows-specific.  Δεν έχει νόημα σε ένα editor που τρέχει σε τόσα
λειτουργικά όπως το GNU Emacs (ακόμα και στα Windows).

# * Unlimited undo/redo capability. The undo buffer can be optionally
#   cleared when a file is saved, or by using the Mark Clean command.

Όλα αυτά γίνονται και σε Emacs.  Οι σχετικές παράμετροι είναι:

    Undo Limit: 300000

    Keep no more undo information once it exceeds this size.
    This limit is applied when garbage collection happens.  When
    a previous command increases the total undo list size past
    this value, the earlier commands that came before it are
    forgotten.

    The size is counted as the number of bytes occupied, which
    includes both saved text and other data.

    Undo Strong Limit: 400000

    Don't keep more than this much size of undo information.
    This limit is applied when garbage collection happens.  When
    a previous command increases the total undo list size past
    this value, that command and the earlier commands that came
    before it are forgotten.  However, the most recent
    buffer-modifying command's undo info is never discarded for
    this reason.  The size is counted as the number of bytes
    occupied,
    which includes both saved text and other data.

# * Block (column) selection mode, and visible display of tabs and
#   spaces.

Ναι και ναι.  Το 'block selection mode' είναι αυτό που το GNU
Emacs αποκαλεί rectangle-mode.

Το rectangle-mode έχει ακόμα και δυνατότητα να κρατήσει πολλά
rectangle-regions σε cut buffers, τα οποία ανακαλεί κανείς είτε
μέσω του kill-ring με C-y, είτε με όνομα ενός χαρακτήρα.

# * A keystroke macro recorder, with up to 16 active macros.

Το 'mac' στο όνομα του GNU Emacs, βγαίνει από το 'macro'.  Η
υποστήριξη για macros είναι πολύ καλή.

    - Μπορεί να δημιουργήσει κανείς macros on-the-fly.

    - Να τα ονομάσει.

    - Να τα αποθηκεύσει.

    - Να τα καλέσει, μία ή περισσότερες φορές συνεχόμενα.

# * Sorting, using up to 3 keys.

Κι αυτό γίνεται σε Emacs.  Σε UNIX περιβάλλον όμως υπάρχει ακόμα
καλύτερη δυνατότητα:

    - Το να 'φιλτράρει' κανείς συγκεκριμένα regions του buffer
      μέσα από το sort(1), με όλες τις δυνατότητες που έχει αυτό.
      Όπως π.χ. απεριόριστο αριθμό από sort keys.

# * Text can be automatically aligned and indented, relative to the
#   previous line, to aid block indentation.

Δεν σχολιάζω.  Αυτό το κάνει ακόμα και το /usr/bin/vi του 4.4BSD,
εδώ και 20 χρόνια.

# * The right mouse button pops up an in-context menu.

Ναι, όταν το GNU Emacs τρέχει σε X11 ή άλλο GUI environment.

# * The cursor can be constrained to the text, or can be positioned
#   freely in the document view.

Όχι δε μπορεί να τοποθετηθεί ο pointer σε οποιοδήποτε σημείο του
παραθύρου, αλλά δεν είναι τόσο σημαντικό αυτό πιστεύω.

# * Toolbar with fly-by usage hints, and an active status bar.

Ναι.  Εμείς το status bar το λέμε ``mode-line'' βέβαια, αλλά
εντάξει δεν τρέχει τίποτα.

Στο GNU Emacs υπάρχει και κάτι ακόμα όμως.  Το *Messages* buffer,
είναι ένα ειδικό text buffer, το οποίο κρατάει «ιστορικό» με τα
τελευταία μηνύματα που έχει γράψει στο ``mode-line'' το GNU Emacs.

# * A powerful search/replace engine using UNIX-style regular
#   expressions, with the power of editor macros. Sets of files in a
#   directory tree can be searched, and text can be replaced in all
#   open documents at once.

Ναι, έχει υποστήριξη για regexps (εξάλλου αυτό ήταν και το αρχικό
topic του thread).  Σε συνεργασία με τα macros, το GNU Emacs
μπορεί να κάνει «θαύματα».  Για παράδειγμα, ένα macro και λίγα
regexp searches/replacements είναι (συνήθως) το «εργαλείο» που
χρησιμοποιώ εγώ για να κάνω αυτόματα «resolve» conflicts σε
patches που έχω κάνει merge σε source κώδικα.

Το GNU Emacs, εκτός από το να μπορεί να επεξεργαστεί ανοιχτά
buffers (όπως αυτό που αναφέρεται παραπάνω) έχει όμως και ένα
ειδικό ``mode'', το ``dired-mode'', με το οποίο μπορεί να
επεξεργαστεί καταλόγους αρχείων.  Πολύς κόσμος το χρησιμοποιεί
*και* ως file manager.

Σε αυτό το ειδικό mode, το Emacs μπορεί να κάνει mark, unmark
αρχεία με βάση το όνομά τους, με βάση τα περιεχόμενα, το MIME
type τους κι ένα σωρό άλλα... *και* με βάση regexp search στα
περιεχόμενα των αρχείων.

# * Visible bookmarks can be placed on individual lines, and on all
#   occurrences of a search pattern. Bookmarked lines can be cut,
#   copied or deleted.

Ναι, όλα αυτά γίνονται και σε GNU Emacs (βλ. παραπάνω για τα
bookmarks).

# * A built in file manager for fast file copying, renaming,
#   deleting etc.

Αυτό που λέγαμε με το ``dired-mode''.

# * Print previewing, and printing with customizable
#   headers/footers and page breaks.

Για εκτυπώσεις, το GNU Emacs έχει υποστήριξη -- τουλάχιστον σε
UNIX -- να τυπώσει κάποιιο buffer μέσω LPR, ή του default printer
που έχει το σύστημα.  Η εκτύπωση μπορεί να γίνει είτε σε plain
text μορφή (με ότι επιλογές έχει ρυθμιστεί να χρησιμοποιεί το
lpr(1) utility), είτε μέσω μετατροπής σε PostScript με
customizable headers, footers, και layout.

# * Viewer for binary files using a hexadecimal display format.

Εμείς, στη χώρα του GNU Emacs, αυτό το λέμε hexl-mode.

# * Built in file comparison utility, and up to 16 user-defined tools
#   with argument macros.

Αυτό ακριβώς κάνουν τα standard ``ediff'' και ``emerge''
εργαλεία, που έχει ενσωματωμένα το GNU Emacs.

Το GNU Emacs, δεν κάνει μόνο σύγκριση, αλλά και *merge* αρχείων,
και μπορεί να κάνει είτε 2-way merges (με 2 αρχεία), είτε full
3-way merge (μεταξύ τριών αρχείων: base, version1 και version2,
που είναι *ΠΟΛΥ* χρήσιμο όταν προσπαθεί κανείς να δουλέψει με
version controlled source files, τα οποία έχουν merge conflicts).

# * Hypertext links from file search and user tool output to the
#   relevant source line.

Δεν έχει *ειδικό* module γι αυτό το Emacs, αλλά έχει υποστήριξη
για να ενσωματώνει εργαλεία όπως το CSCOPE, το etags(1) και το
gtags-mode του GNU global(1).

Τα tagging & cross-referencing εργαλεία έχουν αυτό που λέμε
``seamless integration'' με τα GNU Emacs buffers, και μπορεί
κανείς να μετακινείται και να ψάχνει πολύ γρήγορα σε τεράστια
source trees, με χιλιάδες αρχεία, σε χιλιοστά του δευτερολέπτου.

# * DDE interface to other tools, such as MS Visual C++. The
#   editor detects when an open file has been modified by another
#   tool, and prompts you to reopen it.

Αυτό το κάνει αυτόματα το GNU Emacs.  Το μήνυμα που βγάζει στο
modeline του είναι:

    filename.txt changed on disk; really edit the buffer? (y, n, r or C-h)

Αυτά δεν είναι *όλα* τα features του GNU Emacs όμως.  Υπάρχουν
τόσα πολλά ακόμα, που θα έπρεπε να γράψω το manual του Emacs σε
email μορφή, για να περιγράψω.

</σχετικά-informative-spam>

Όλα τα παραπάνω τα έγραψα όμως, για να δείξω ότι μπορεί άνετα
κάποιος που έχει συνηθίσει να γράφει σε Textpad να ρίξει μια
ματιά και στο GNU Emacs.  Έχει ήδη τόσα πολλά από αυτά που κάνει
το Textpad, που μετά από μια μικρή περίοδο «προσαρμογής» δε θα
του λείπει τίποτα δραματικό...

- Γιώργος




More information about the Linux-greek-users mailing list