Υπαγόρευση που αντέχει στο terminal

Το paste αποτυγχάνει σιωπηλά σε terminals, SSH, tmux και μη-QWERTY διατάξεις. Γιατί η υπαγόρευση δεν επικολλάται και τι κάνει η λειτουργία πληκτρολόγησης.

Teodor Deleanu10 Ιουλίου 20268 λεπτά ανάγνωσης

Οι developers που δοκιμάζουν εργαλεία υπαγόρευσης συχνά πέφτουν πάνω σε μια αποτυχία με πολύ συγκεκριμένο σχήμα. Το εργαλείο δουλεύει υπέροχα στο demo. Δουλεύει στο Notes, στο Slack, στον browser. Μετά δίνεις focus σε ένα terminal, υπαγορεύεις μια πρόταση, και είτε δεν εμφανίζεται τίποτα, είτε εμφανίζεται κάτι που δεν είναι αυτό που είπες, είτε εμφανίζεται το μισό και το άλλο μισό βρίσκεται τώρα μυστηριωδώς στο πρόχειρό σου. Μερικές φορές δουλεύει τοπικά και πεθαίνει τη στιγμή που κάνεις SSH σε ένα μηχάνημα.

Το μοτίβο είναι αρκετά σταθερό ώστε να μη νομίζω ότι είναι bug ενός συγκεκριμένου προϊόντος. Είναι συνέπεια του τρόπου με τον οποίο η κατηγορία εισάγει κείμενο — και αποτυγχάνει ακριβώς στα μέρη όπου ζει ένας developer.

Αυτό μετράει περισσότερο τώρα απ' ό,τι πριν από δύο χρόνια. Αν οδηγείς το Claude Code με τη φωνή — το workflow που περιέγραψα στο Οδηγώντας το Claude Code με τη φωνή σου — τότε το terminal δεν είναι μια εφαρμογή ανάμεσα σε πολλές. Είναι η εφαρμογή. Είναι εκεί που προσγειώνονται τα prompts σου, εκεί που οι agents σου περιμένουν αλλαγές κατεύθυνσης, εκεί που όλη η ιστορία με τα παράλληλα lanes είτε δουλεύει είτε όχι. Ένα εργαλείο υπαγόρευσης που είναι ασταθές στα terminals είναι, για έναν vibecoder, ασταθές στη μοναδική του δουλειά.

Γιατί το paste σπάει ακριβώς εκεί που ζουν οι developers;

Να η μηχανική σε επίπεδο κατηγορίας. Τα περισσότερα εργαλεία υπαγόρευσης εισάγουν κείμενο με τον ίδιο τρόπο: βάζουν τη μεταγραμμένη σου πρόταση στο πρόχειρο του συστήματος και μετά συνθέτουν ένα πάτημα Cmd+V στην εφαρμογή με focus. Είναι λογική προεπιλογή — το paste είναι ακαριαίο, δουλεύει σχεδόν σε κάθε πεδίο κειμένου σε GUI, και δεν χρειάστηκε σχεδόν καθόλου μηχανική ανά εφαρμογή.

Το πρόβλημα είναι όλα όσα σιωπηλά προϋποθέτει αυτή η παραδοχή.

Προϋποθέτει ότι η εφαρμογή με focus αντιμετωπίζει το Cmd+V ως «paste». Τα terminals συχνά δεν το κάνουν — πολλά χρησιμοποιούν το Cmd+V για κάτι άλλο ή για τίποτα, το tmux και το vim έχουν τις δικές τους ιδέες για το τι σημαίνει paste, και ένα απομακρυσμένο SSH session μπορεί να ερμηνεύσει μια ριπή επικολλημένου κειμένου με τρόπους που το τοπικό μηχάνημα δεν μπορεί να προβλέψει. Bracketed paste, copy-mode, insert-mode έναντι normal-mode: ο κόσμος του terminal είναι γεμάτος καταστάσεις όπου ένα συνθετικό paste προσγειώνεται λάθος ή δεν προσγειώνεται πουθενά.

Προϋποθέτει ότι το πρόχειρο είναι διαθέσιμο και αφύλακτο. Οι διαχειριστές πρόχειρου το ξαναγράφουν. Οι διαχειριστές κωδικών σκόπιμα το καθαρίζουν ή το προστατεύουν — μια λειτουργία ασφαλείας που μετατρέπει το «κάνε paste την υπαγόρευσή μου» σε «κάνε paste το τίποτα», σιωπηλά. Και ακόμη κι όταν όλα δουλεύουν, το εργαλείο μόλις έγραψε πάνω από ό,τι είχες αντιγράψει. Το commit SHA που κουβαλούσες ανάμεσα σε παράθυρα χάθηκε, αντικαταστάθηκε από τη δική σου πρόταση. Για κάποιον που ταχυδακτυλουργεί με πολλά lanes, αυτό δεν είναι απλή γρατζουνιά· το πρόχειρο έκανε μια δουλειά.

Και προϋποθέτει — αυτό είναι που εκπλήσσει τον κόσμο — τη διάταξη του πληκτρολογίου σου. Όταν ένα εργαλείο καταφεύγει στην προσομοίωση πατημάτων πλήκτρων, ο αφελής τρόπος είναι να στέλνει κωδικούς πλήκτρων: τις φυσικές θέσεις των πλήκτρων. Οι κωδικοί πλήκτρων αντιστοιχίζονται σε χαρακτήρες μέσω της διάταξής σου. Στο QWERTY, ο κωδικός για το «V» παράγει ένα V. Στο Dvorak, η ίδια φυσική θέση είναι διαφορετικό γράμμα. Έτσι ένα εργαλείο που προσομοιώνει scancodes σε διάταξη Dvorak, AZERTY ή Colemak παράγει κείμενο που μοιάζει να πέρασε από κρυπτογράφηση αντικατάστασης. Οι χρήστες αναφέρουν ασυναρτησίες και υποθέτουν ότι απέτυχε η αναγνώριση ομιλίας. Δεν απέτυχε — η ομιλία ήταν τέλεια, η εισαγωγή την ανακάτεψε.

Τίποτα από αυτά δεν είναι κακοβουλία ή τεμπελιά από κανέναν. Το paste από το πρόχειρο είναι η σωστή προεπιλογή για το 90% των περιπτώσεων. Απλώς οι developers περνούν τη μέρα τους στο υπόλοιπο 10%.

Τι σημαίνει πραγματικά «πληκτρολόγησέ το αντί γι' αυτό»

Το Keebye έχει μια ρύθμιση που λέγεται insert_mode με δύο τιμές: paste, που είναι η προεπιλογή, και type.

Η λειτουργία πληκτρολόγησης δεν κάνει paste. Στο macOS χρησιμοποιεί το CGEventKeyboardSetUnicodeString — ένα API που επισυνάπτει το πραγματικό κείμενο Unicode σε ένα συνθετικό συμβάν πλήκτρου. Ο χαρακτήρας μεταφέρεται μέσα στο ίδιο το συμβάν, δεν αναζητείται μέσω της διάταξης του πληκτρολογίου σου. Αυτό το κάνει ανεξάρτητο από τη διάταξη εκ κατασκευής: Dvorak, AZERTY, Colemak, ό,τι κι αν χρησιμοποιείς, το κείμενο που φτάνει είναι το κείμενο που μεταγράφηκε, επειδή δεν υπήρξε ποτέ μετάφραση scancode σε χαρακτήρα για να πάει στραβά.

Η δεύτερη ιδιότητα της λειτουργίας πληκτρολόγησης είναι αυτή που ενδιαφέρει τους χρήστες του terminal: δεν αγγίζει ποτέ το πρόχειρο. Μηδέν λειτουργίες πρόχειρου σε αυτή τη διαδρομή κώδικα. Τα περιεχόμενα του πρόχειρού σου παραμένουν δικά σου — το SHA επιβιώνει, ο διαχειριστής κωδικών δεν έχει τίποτα να φυλάξει, ο διαχειριστής πρόχειρου δεν έχει τίποτα να καταγράψει.

Και επειδή τα terminals και τα απομακρυσμένα sessions μπορούν να πνιγούν με κείμενο που φτάνει γρηγορότερα απ' ό,τι πληκτρολογεί οποιοσδήποτε άνθρωπος, η λειτουργία πληκτρολόγησης ρυθμίζει σκόπιμα τον ρυθμό της: το κείμενο μπαίνει σε τμήματα των 16 χαρακτήρων με κενό 4 χιλιοστών του δευτερολέπτου ανάμεσά τους. Αρκετά γρήγορα ώστε μια πρόταση να προσγειώνεται σε αρκετά λιγότερο από ένα δευτερόλεπτο· αρκετά μετρημένα ώστε ένα tmux pane πάνω από SSH να το λαμβάνει ως πατήματα πλήκτρων που προλαβαίνει, όχι ως έναν όγκο που πρέπει να ερμηνεύσει.

Η λειτουργία paste εξακολουθεί να υπάρχει, και εξακολουθεί να είναι η προεπιλογή, επειδή είναι πραγματικά γρηγορότερη για μεγάλα μπλοκ κειμένου σε συνηθισμένες εφαρμογές GUI — ένα μήνυμα τριών παραγράφων στο Slack φτάνει ως ένα paste αντί για ροή τμημάτων. Ακόμη και η λειτουργία paste πήρε πάντως το μάθημα της διάταξης: το συνθετικό Cmd+V χρησιμοποιεί τον φυσικό κωδικό του πλήκτρου V, οπότε το ίδιο το paste δεν σπάει σε μη-QWERTY διατάξεις όπως μπορεί να σπάσουν οι προσεγγίσεις αναζήτησης χαρακτήρων.

Η πρακτική ρύθμιση για δουλειά με agents είναι απλή: γύρνα το insert_mode σε type, δώσε focus στο terminal που τρέχει το Claude Code, κράτα το πλήκτρο, πες την αλλαγή κατεύθυνσης, άφησέ το. Το prompt φτάνει όπως θα έφταναν πατήματα πλήκτρων, επειδή απ' όσο μπορεί να καταλάβει το terminal, αυτό ακριβώς είναι. Υπάρχει μια βήμα προς βήμα εκδοχή αυτής της ρύθμισης, μαζί με τις ιδιαιτερότητες SSH και tmux, στο φωνητική υπαγόρευση για το terminal του macOS.

Τα ειλικρινή όρια

Η λειτουργία πληκτρολόγησης είναι πιο αργή από το paste για μεγάλα κείμενα — αυτό είναι αριθμητική, όχι ελάττωμα. Τα τμηματοποιημένα πατήματα πλήκτρων με κενά ρυθμού παίρνουν περισσότερο χρόνο από ένα μοναδικό συμβάν paste, και αν υπαγορεύεις αρκετές παραγράφους σε ένα έγγραφο, η λειτουργία paste θα φαίνεται πιο ζωηρή. Ακριβώς γι' αυτό το paste παραμένει η προεπιλογή και η λειτουργία πληκτρολόγησης είναι κάτι που ενεργοποιείς εσύ στις ρυθμίσεις· η σωστή λειτουργία εξαρτάται από το πού πάει το κείμενό σου.

Κάποιες εφαρμογές περιορίζουν τον ρυθμό ή φιλτράρουν τη συνθετική είσοδο, συνήθως για λόγους ασφαλείας, και καμία στρατηγική εισαγωγής δεν το ξεφεύγει πλήρως αυτό — μια εφαρμογή που αρνείται τα συνθετικά συμβάντα τα αρνείται από κάθε εργαλείο υπαγόρευσης.

Και για να είμαστε ξεκάθαροι για το τι ισχυρίζεται και τι δεν ισχυρίζεται αυτό το άρθρο: το παράπονο ότι το paste σπάει στα terminals είναι μοτίβο σε όλη την κατηγορία της υπαγόρευσης, όχι ελάττωμα μοναδικό κάποιου ανταγωνιστή. Άλλα εργαλεία έχουν τις δικές τους απαντήσεις και τα δικά τους δυνατά σημεία — γράψαμε ειλικρινείς συγκρίσεις στο Keebye vs Superwhisper και στο Keebye vs Wispr Flow, μαζί με το πού το καθένα τους μπορεί να σου ταιριάζει καλύτερα.

Η εισαγωγή είναι το μισό της υπαγόρευσης χωρίς λάμψη

Η αναγνώριση ομιλίας τραβάει όλη την προσοχή — ονόματα μοντέλων, ισχυρισμοί ακρίβειας, αριθμοί γλωσσών. Ένα εργαλείο υπαγόρευσης όμως έχει δύο δουλειές: να σε ακούσει σωστά, και μετά να φέρει το κείμενο εκεί που είναι ο κέρσοράς σου χωρίς να το χάσει ή να το παραμορφώσει. Η δεύτερη δουλειά ακούγεται ασήμαντη και είναι εκεί που η κατηγορία απογοητεύει σιωπηλά τους developers, επειδή η δεύτερη δουλειά είναι εύκολη στο TextEdit και δύσκολη σε ένα tmux pane σε απομακρυσμένο μηχάνημα με διάταξη Dvorak.

Αν τα prompts σου προσγειώνονται σε terminals — και αν οδηγείς agents κώδικα, προσγειώνονται — η εισαγωγή δεν είναι υποσημείωση. Είναι η διαφορά ανάμεσα σε ένα εργαλείο που παρουσιάζεις και σε ένα εργαλείο που χρησιμοποιείς. Παρεμπιπτόντως, συγγενείς τρόποι αποτυχίας έχουν την ίδια γεύση: η πρώτη λέξη μιας υπαγόρευσης που τρώγεται από την ψυχρή εκκίνηση του μικροφώνου είναι ένα ακόμη παράπονο σε όλη την κατηγορία με μηχανική εξήγηση, και το γράψαμε στο Γιατί οι εφαρμογές υπαγόρευσης τρώνε την πρώτη σου λέξη.

Το Keebye είναι σε πρώιμη πρόσβαση για macOS. Αν η υπαγόρευσή σου έχει εξαφανιστεί ποτέ κάπου ανάμεσα στο στόμα σου και σε ένα terminal, ξεκίνα τη δωρεάν δοκιμή σου παρακάτω, ενεργοποίησε τη λειτουργία πληκτρολόγησης και ξαναδοκίμασε το ίδιο prompt. Το αντιγραμμένο SHA σου μένει στο πρόχειρο ενώ οι λέξεις φτάνουν ως πληκτρολογημένο Unicode.

Δοκίμασε την πιο δύσκολη διαδρομή στο terminal σου

Ξεκίνα τη δωρεάν δοκιμή σου, ενεργοποίησε τη λειτουργία πληκτρολόγησης και δοκίμασε το prompt σε SSH ή tmux που συνήθως σπάει το paste.

Start free trial

Early access: we'll email you the moment the macOS build is ready — your 14 days start when you first sign in from the app.

Συνέχισε την ανάγνωση