IDE : Editor Helper

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

IDE : Editor Helper

Message par falsam »

Que direz vous de créer un outils pour insérer automatiquement les fin de mots clés (Exemple : If ... EndIf) dans votre editeur officiel de PureBasic ?

Vous allez me répondre que je suis une banane car ça existe déja en natif !

Oui, effectivement ça existe déja. En pressant la touche TAB deux fois de suite j'ai bien la fin du mot clé sur la même ligne que le mot clé. j'avais envie d'une présentation plus conventionnelle.

Ce qui suit est un complément du tutoriel que j'ai fais sur ce lien.

:idea: L'objectif de cet outil est de placer le fin du mot clé en dessous du mot clé en respectant la même indentation.

Quel est le principe de l'outil ?
- Un utilisateur tape un mot clé. Par exemple "If" et presse la combinaison de touche ALT + ESPACE
- L'outil va automatiquement insérer une ligne sous la ligne contenant "If" et placer "EndIf" sous cette ligne vide en respectant l'indentation du mot "If"

Schéma de l'application.
- Détection de la combinaison de touche associé à l'outil.
- Vérifier que le mot situé juste à gauche du curseur est bien un mot clé.
- Si mot clé :
        . Sauvegarder le contexte clipboard
        . Bufferiser la ligne contenant l'indentation + la fin du mot clé.
        . Copier ce buffer dans le clipboard
        . Insérer la fin du mot clé.
        . Restorer le contexte clipboard

Le code.

Code : Tout sélectionner

;-=============================================================================
; 
; Project ...... : Editor Helper
; Name ......... : EditorHelper.pb 
; Type ......... : Main Code
; Author ....... : falsam
; CreateDate ... : 03, October 2017
; Compiler ..... : PureBasic V5.60 (x86)
; Flags ........ : None
; Subsystem .... : none
; TargetOS ..... : Windows 
; License ...... : 
; Link ......... : 
; Description .. : IDE TOOLS - Automatically generates the end keyword of a keyword.  
;
;==============================================================================
;
; IDE Installation
;
; Menu Tools -> Configure Tools - > New
; 
; CommandeLine : Select the executable of your tool
; Name         : Editor Helper (or whatever you want)
; Shortcut     : ALT + ESPACE (or whatever you want)
; 
;==============================================================================

EnableExplicit

Define.s LigCol, ClipBoardBuffer, Buffer, KeyWord
Define.i HandleIDESci, Offset, CursorPosition, n, Tabulation, Result

;Structure du contexte clipboard pour sauvegarde et restoration
;Clipboard context Structure For backup And restoration
Structure NewClipBoard
  Texte.s
  Image.l
EndStructure
Define.NewClipBoard Clipboard

;Structure mots clés / Keyword structure
Structure NewKeyWord
  EndWord.s
EndStructure
Define NewMap KeyWords.NewKeyWord()

;Initialisation de mots clés / Initialization of keywords
AddMapElement(KeyWords(), "enumeration")
KeyWords()\EndWord = "EndEnumeration"

AddMapElement(KeyWords(), "structure")
KeyWords()\EndWord = "EndStructure"

AddMapElement(KeyWords(), "procedure")
KeyWords()\EndWord = "EndProcedure"

AddMapElement(KeyWords(), "if")
KeyWords()\EndWord = "EndIf"

AddMapElement(KeyWords(), "for")
KeyWords()\EndWord = "Next"

AddMapElement(KeyWords(), "foreach")
KeyWords()\EndWord = "Next"

AddMapElement(KeyWords(), "select")
KeyWords()\EndWord = "EndSelect"

AddMapElement(KeyWords(), "while")
KeyWords()\EndWord = "Wend"

AddMapElement(KeyWords(), "interface")
KeyWords()\EndWord = "EndInterface"

AddMapElement(KeyWords(), "repeat")
KeyWords()\EndWord = "Until"

AddMapElement(KeyWords(), "datasection")
KeyWords()\EndWord = "EndDataSection"

;Handle de l'IDE / Handle of IDE
HandleIDESci=Val(GetEnvironmentVariable("PB_TOOL_Scintilla"))  

If HandleIDESci  
  ;Position du curseur dans le source en cours d'édition / Cursor position in the source being edited
  SendMessageTimeout_(HandleIDESci,#SCI_GETSELECTIONSTART, 0, 0, #SMTO_ABORTIFHUNG, 2000, @CursorPosition)
  
  ;Mémorise la position du curseur pour l'indentation (Nombre d'espaces avant le mot clé) 
  ;Stores the cursor position For indentation (Number of spaces before the keyword)
  LigCol = GetEnvironmentVariable("PB_TOOL_Cursor") ;Lig x Col 
  
  ;Recherche du mot se trouvant juste devant le cursor / Search for the word just in front of the cursor
  Offset = CursorPosition
  For n = 1 To CursorPosition
    Offset - 1
    
    SendMessageTimeout_(HandleIDESci,#SCI_GETCHARAT, Offset, 0, #SMTO_ABORTIFHUNG, 2000, @Result) 
    If (Result >= 65 And Result < 90) Or (Result >= 97 And Result <= 122)
      Buffer + Chr(Result)
    Else
      Break
    EndIf
  Next
  
  ;Calculer l'indentation / Calculate the indentation
  Tabulation = Val(StringField(LigCol, 2, "x")) - Len(Buffer) - 1
  
  ;Quel est le mot se trouvant à gauche du curseur ? / What is the word to the left of the cursor?
  KeyWord = LCase(ReverseString(Buffer))
  
  ;Si le mot clé existe : Mise à jour de l'IDE / If the keyword exists: IDE update
  If FindMapElement(KeyWords(), KeyWord)
    
    ;Mémoriser le contexte clipboard / Memorize the clipboard context
    Clipboard\Texte = GetClipboardText()
    Clipboard\Image = GetClipboardImage(#PB_Any)
    
    ;Mettre à jour l'IDE / Update the IDE
    SetClipboardText(Chr(32) + #CRLF$ + #CRLF$ + LSet(Chr(32), Tabulation) + KeyWords()\EndWord)
    SendMessage_(HandleIDESci, #WM_PASTE, 0, 0)
    
    ;Restoration du context clipboard / Restoration of the clipboard context
    SetClipboardText(Clipboard\Texte)
    SetClipboardImage(Clipboard\Image)
    
    ;Retour à la position de départ
    SendMessageTimeout_(HandleIDESci, #SCI_GOTOPOS, CursorPosition +1, 0, #SMTO_ABORTIFHUNG, 2000, #Null)  
  EndIf
Else
  MessageRequester("Information", "This application must be run from the PureBasic IDE.")
EndIf
Créer l’exécutable.

Installation.
Menu Outils -> Outils personnalisés - > Nouveau

Ligne de commande : Sélectionnez l'exécutable de votre outil
Nom : Editor Helper (Ou ce que vous voulez)
Touches de raccourci : ALT + ESPACE (Ou ce que vous voulez)

:!: Ne pas utiliser la fonction native ScintillaSendMessage()


Bons tests.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: IDE : Editor Helper

Message par Micoute »

Merci pour cet utilitaire bien utile.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: IDE : Editor Helper

Message par Zorro »

Personellement, je deteste ça :lol:
je ne supporte pas que des trucs s'ecrivent tout seul ;
tout comme une personne qui finirai mes phrases :)
cette impression de raconter une blague, et de se faire piquer la chute :lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: IDE : Editor Helper

Message par falsam »

Zorro a écrit :je ne supporte pas que des trucs s'ecrivent tout seul ;
Je te propose d'enlever l’auto complétion de ton éditeur EPB :mrgreen:
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: IDE : Editor Helper

Message par Shadow »

Pas mal Falsam :!:
Bien utile merci !

Pour certain mot j'ajouterais certain autre moi:

If:

If

ElseIf

Else

EndIf

Select:

Select

Case

Default

EndSelect

Etc.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
Zorro
Messages : 2185
Inscription : mar. 31/mai/2016 9:06

Re: IDE : Editor Helper

Message par Zorro »

falsam a écrit :
Zorro a écrit :je ne supporte pas que des trucs s'ecrivent tout seul ;
Je te propose d'enlever l’auto complétion de ton éditeur EPB :mrgreen:
ce qui en fait m'arrangerai grandement, car 90% de la lenteur de EPB proviens de ça ! :lol:
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"
Répondre