• STATISTIQUES
  • Il y a eu un total de 0 membres et 24546 visiteurs sur le site dans les dernières 24h pour un total de 24 546 personnes!
    Membres: 2 606
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] hax.tor
    50 level de challenges mélangés
    Challenges
    [EN] Defcon
    Lancé en 1992 par Dark Tangent, DEFCON est la plus ancienne et la plus grande conférence underground de...
    Hacking
    [EN] phrack
    Lot's of stuff !
    Hacking
    [FR] Cyber-Hacker
    CH - Cyber Hacker est un jeu par navigateur de simulation de hack, programmez et envoyez vos virus et piratez les aut...
    Hacking
    [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster
    [FR] Le site du zero
    Découvrez gratuitement la programmation (C, C++, PHP, MySQL, XHTML, CSS...), Linux, le Mapping, la modé...
    Programmation
    [EN] PHPFreaks
    PHPFreaks est un site dédié à l'apprentissage et l'enseignement du PHP. Ici vous trouver...
    Programmation

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Macro Sublime Text 2 : PrivatePaste
02-02-2013, 23h56 (Modification du message : 02-02-2013, 23h58 par Dobry.)
Message : #1
Dobry Hors ligne
Tueur de lamouz
*



Messages : 206
Sujets : 25
Points: 73
Inscription : Aug 2011
Macro Sublime Text 2 : PrivatePaste
Je suis un adorateur de sublime text 2, qui je trouve pratique, pas très lourd, TRES modulable (pour ne pas dire incroyablement modulable).
Pour autant, il est vrai que par moment, il faut mettre les mains dans le code afin d'implementer une fonctionnalitée manquante (même s'il est toujours interressant de jetter un coup d'oeil sur les modules déjà existants !).
AInsi, voici ma dernière macro pour Subl2, qui permet de créer un fichier sur http://privatepaste.com avec le code du fichier en cour, ou, si cette dernière existe, la selection actuelle du fichier (un bout de code, une fonction ou autre).

Code PYTHON :

# Sublime Text 2 PrivatePaste Plugin !
# Create a file in your Sublime Text 2 plugin folder named privatepaste.py
# (by default /home/USERNAME/.config/sublime-text-2/Packages/User)
# Add a shortcut "Preferences > Key Bindings - User" with the following values
# { "keys": ["ctrl+&"], "command": "private_paste"} (change the "keys" value !)
#
# <3 Sublime Text 2, Enjoy <img src="https://dev.n-pn.fr/forum/images/smilies/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" />
# By ex0ns
# Thank's to Kallimero, Fr0g & AppleStorm !

import sublime, sublime_plugin, urllib, urllib2, re, threading, os.path

extensions = {"" : "No Formatting", "cpp" : "C++", "py" : "Python", "c" : "C", "css" : "CSS", "java" : "Java",
              "js" : "JavaScript", "rb" : "Ruby", "asm" : "NASM", "html" : "HTML", "php" : "PHP", "pl" : "Perl" }
class PrivatePasteCommand(sublime_plugin.TextCommand):
        def run(self, edit):
                if self.view.sel()[0].empty():
                        self.code = self.getCode(self.view.file_name())
                else:
                        self.code = self.view.substr(self.view.sel()[0])
                self.extension =  os.path.splitext(self.view.file_name())[1][1:]
                print self.extension
                thread = threading.Thread(target=self.backgroundJob)
                thread.start()

        def getCode(self, file):
                return open(file).read()

        def backgroundJob(self):
                try:
                  host = "http://privatepaste.com/save"
                  params = urllib.urlencode([("paste_content", self.code ),
                                             ("formatting", extensions[self.extension] if self.extension in extensions else "No Formatting" ),
                                             ("line_number", "on"),
                                             ("expire", "3600"),
                                             ("secure_past", "off"),
                                             ("secure_past_key", "")
                                            ])
                  headers = {"Content-type": "application/x-www-form-urlencoded"}
                  req = urllib2.urlopen(urllib2.Request(host, params, headers)).read();
                  pasteid = re.search("<title>privatepaste.com :: Paste ID (.*)</title>", req)
                  sublime.error_message("http://privatepaste.com/" + pasteid.group(1))
                  #sublime.set_clipboard("http://privatepaste.com/" + pasteid.group(1))
                except:
                  sublime.error_message("Error while sending information")
 


Voici pour ce qui est du code, sa structure est celle imposée par la norme de sublime text 2 :
class PrivatePasteCommand(sublime_plugin.TextCommand) permet d'appeller une macro qui sera nommé private_paste.
Pour ce qui est de la ligne commenté, elle devrait copier automatiquement le lien généré dans votre Copy/Paste, chez moi elle fait crash Subl2, je ne sais pas pourquoi !
Pour ceux qui n'aurait jamais utilisé de plugin sur Subl2, allez dans le menu "Tools > New Plugin" copiez le code ci dessus et enregistrer le fichier dans le premier répertoire proposé (il est géré automatiquement par Subl2, évitez de le changer).
Il ne reste maintenant plus qu'a assigner cette nouvelle macro à un raccourci, dans le menu "Preferences > Keys Biding - User" ajoutez la ligne suivante :
Code BASH :
{ "keys": ["ctrl+&"], "command": "private_paste"}
(en modifiant le raccourci bien évidement)
Attention, il est possible que votre fichier soit vide lorsque vous l'ouvrez, dans ce cas, créez la structure suivante :
Code BASH :
[
    { "keys": ["ctrl+&"], "command": "private_paste"}
]


Et voilà !

Pour ce qui est des paramètres POST par défaut, je dois dire que c'est un choix que j'ai fait volontairement.
En effet, j'aurais très bien pu demander chaque information à l'utilisateur avant d'envoyer la requete, mais alors la requete devient presque aussi longue à faire que manuellement, or il me fallait quelque chose de rapide !
Cependant, libre à vous de modifier le code comme il vous plait (je pense tout de même integrer une detection de "formatting" en fonction de l'extension du fichier prochainement !). -> Chose faite dans la nouvelle version, quelle rapidité, je suis bluffé xD

Edit : j'étais motivé j'ai donc changé la structure pour n'avoir qu'une seule classe au lieu de deux, et faire un threading plus simple. J'ai également ajouté la concordance avec certains langages, par reconnaissance de l'extension (os.path est la solution la plus fiable que j'ai trouvé, mais si vous en connaissez d'autre, je suis preneur !).
Dites moi ce que vous en pensez Smile
Aestuārium Erudītiōnis

There are only two hard things in Computer Science: cache invalidation, naming things, and off-by-one errors.
+1 (2) -1 (0) Répondre


Messages dans ce sujet
Macro Sublime Text 2 : PrivatePaste - par Dobry - 02-02-2013, 23h56

Atteindre :


Utilisateur(s) parcourant ce sujet : 4 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut