Attention: cette entrée est vielle. Il est possible qu’elle contienne de l’information dépassée ou qu’elle ne réflète plus mon opinion.
Avec jed, mon éditeur texte favori pour terminal, j’ai accès à la fonction « repeat command » : peser sur ESC, entrer un chiffre, et ensuite quelque chose d’autre répétera quelque chose chiffre fois. Cette fonctionnalité existe aussi dans emacs et dans bash.
Cette fonction peut aussi être utilisée avec des commandes, comme « delete » et « yank » (coller). J’utilise surtout cette fonction pour générer des lignes de « - » et de « = ».
Voici donc une recette pour simuler cette fonctionnalité dans TextMate.
Le script
Sélectionnez le menu “Bundles” → “Bundle Editor” → “Show Bundle Editor”.
Créez un « bundle » en utilisant le « + » sous la liste. Je place mes propres choses dans un paquet nommé « _Serge ».
Dans ce paquet, créez une nouvelle « Commande » en utilisant encore le « + ». Utilisez les valeurs suivantes :
- “Save”: Nothing
- “Input”: “Selected Text” or “Word”
- “Output”: “Insert as Snippet”
Et dans la boîte de texte « Command(s) » :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #!/usr/bin/env python # -*- Mode: python; tab-width: 4; indent-tabs-mode: nil; coding: utf-8 -*- import os import sys import subprocess textmate_path = '/Applications/TextMate.app' cocoadialog_exe = os.path.join( textmate_path, 'Contents/SharedSupport/Support/bin/CocoaDialog.app', 'Contents/MacOS/CocoaDialog' ) input = sys.stdin.read().decode('utf-8') if ':' in input: # Quick entry: "6:-" repeats "-" 6 times input = input.split(':') r_num = int(input.pop(0)) r_what = u':'.join(input) sys.stdout.write(r_what * r_num) sys.exit(0) r_num = int(input) help_text = u"Enter the string to repeat %d times" % r_num initial_text = u"-" cmd = [ cocoadialog_exe, 'standard-inputbox', '--informative-text', help_text, '--float', '--text', initial_text, ] sp = subprocess.Popen(cmd, stdout=subprocess.PIPE) stdout, stderr = sp.communicate() lines = stdout.split('\n') if lines[0] != '1': # Cancel exit(0) r_num = int(input) r_what = lines[1] sys.stdout.write(r_what * r_num) |
Si vous le désirez, assigner un « Key Equivalent ». J’utilise quelque chose comme « Command-ESC » (⌘-⎋).
Utilisation
Ce script a deux modes d’opération.
Premier mode
Pour répéter « = » 7 fois, taper « 7:= » dans TextMate, le sélectionner, et ensuite appeler la commande.
Second mode
Pour répéter « = » 7 fois, taper « 7 » dans TextMate, appeler la commande (e.g. ⌘-⎋), et taper « = » dans la boîte de texte, et appuyer sur « enter ».
Exemples
| Texte | Résultat |
|---|---|
| 10:* | ********** |
| 10:: | :::::::::: |
| 10:' | '''''''''' |
| 10:-*- | -*--*--*--*--*--*--*--*--*--*- |
Commentaires
Il n’y a aucun commentaire pour cet article.