WinMerge – własna wtyczka

W poprzednim wpisie na temat porównywania requestów HTTP w Fiddlerze pokazałem jak wykorzystać integrację z WinMerge, żeby ułatwić sobie szukanie różnic. Przykład uwidocznił problem z porównywaniem gdy parametry zapytania POST są w jednej linii. Znalezienie różnicy w długim ciągu parametrów nie jest zbyt wygodne.

Z pomocą przychodzi nam możliwość pisania własnych wtyczek i skryptów do WinMerge. Mają one postać bibliotek dll bądź „scriptletów” pisanych w COM API (VBScript).

Pluginy do WinMerge są umieszczane w katalogu MergePlugins wewnątrz instalacji. Najprostszym sposobem stowrzenia własnej wtyczki jest skopiowanie istniejącego pliku z rozszerzeniem .sct i przerobienie go pod nasze potrzeby. Skopiujmy więc przykładowy skrypt „insert datetime.sct” i nazwijmy go „request param to new line.sct”. Nowy plik edytujemy i czyścimy z niepotrzebnego kodu.

<scriptlet>

<implements type="Automation" id="dispatcher">
 <property name="PluginEvent">
 <get/>
 </property>
 <property name="PluginDescription">
 <get/>
 </property>
 <method name=""/>
</implements>

<script language="VBS">
Option Explicit

Function get_PluginEvent()
 get_PluginEvent = "EDITOR_SCRIPT"
End Function

Function get_PluginDescription()
 get_PluginDescription = "Basic text functions for the context menu"
End Function

</script>
</scriptlet>

Powyższy listing przedstawia pusty plugin. Teraz musimy oprogramować metodę, która przetworzy nasz tekst. Piszemy więc funkcję, którą wstawiamy przed zamykającym tagiem </script>.

Function RequestParamToNewline(Text)
 RequestParamToNewline = Replace(Text, "&", VbCrLf & "&")
End Function

Dla osób nieznających VBScript już wyjaśniam powyższy kod. W podanej jako parameter zmiennej Text zastępujemy znak oddzielający parametry (&) tym samym znakiem poprzedzonym znakiem nowej linii (VbCrLf w VBScript, co produkuje znane wszystkim znaki nowej linii i powrotu karetki – \r\n). Na koniec zwracamy wartość. Przypisanie wartości nazwie funkcji działa tu jak zwrócenie wartości przez tę funkcję.

Musimy jeszcze poinformować WinMerge jaką funkcję wywołać przy starcie tego skryptu. Nazwę funkcji wpisujemy w węźle method i atrybucie name XMLa rozpoczynającego skrypt. Ostateczna postać skryptu powinna wyglądać tak:

<scriptlet>

<implements type="Automation" id="dispatcher">
 <property name="PluginEvent">
 <get/>
 </property>
 <property name="PluginDescription">
 <get/>
 </property>
 <method name="RequestParamToNewline"/>
</implements>

<script language="VBS">
Option Explicit

Function get_PluginEvent()
 get_PluginEvent = "EDITOR_SCRIPT"
End Function

Function get_PluginDescription()
 get_PluginDescription = "Basic text functions for the context menu"
End Function


Function RequestParamToNewline(Text)
 RequestParamToNewline = Replace(Text, "&", VbCrLf & "&")
End Function


</script>
</scriptlet>

Po zapisaniu pliku możemy uruchomić WinMerge i sprawdzić czy nasz skrypt został poprawnie rozpoznany. Jeśli nie ma go na liście to warto zaznaczyć cały tekst w jednym z okienek bo wtedy WinMerge próbuje sprawdzić dostępne pluginy i może wygenerować komunikat z dodatkową informacją.

Własny plugin WinMerge

Własny plugin WinMerge

Nasz skrypt wywołujemy ręcznie. Najpierw zaznaczamy tekst po lewej i wybieramy Edit->Scripts->RequestParamToNewline. Tę samą czynność wykonujemy dla tekstu po prawej. Na koniec klikamy w przycisk „Refresh”, żeby wymusić ponowne porównanie.

Animation - Custom WinMerge Plugin

Własny plugin do WinMerge – uruchamianie

Kod źródłowy skryptu możecie znaleźć na moim GitHubie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*
*
Website