Przyjęło się, że pierwsza linia komentarza commita ma co najwyżej 50 znaków (w przypadku gita). Niektóre edytory (np. vim) podświetlają pierwsze 50 znaków aby pokazać programiście czy już przekroczył limit. Zobaczmy jak łatwo zrobić to w GNU Emacsie
magit-mode
Zakładam, że do obsługi gita wykorzystujesz magit-mode. Jest to świetny pakiet, który bardzo usprawnia pracę z tym systemem kontroli wersji. Łatwo zauważyć, że edycja komentarza odbywa się w magit-log-edit-mode.
regex, który wyłapuje nadmiarowe znaki
Naszym celem jest pokolorowanie znaków w kolumnach 51+ w pierwszej linii. Potrzebujemy regexa, który dopasuje się do tych znaków. Zaczynamy od symbolu
\\`
który oznacza początek bufora (pierwsza linia). Następnie musi wystąpić 50 znaków, które nie są nową linią
[^\n]\\{50\\}Od tego momentu są znaki, które należy pokolorować. Łapiemy je wyrażeniem
\\(.*\\)
Ostatecznie nasze wyrażenie regularne wygląda tak
"\\`[^\n]\\{50\\}\\(.*\\)"
Wykorzystujemy funkcję font-lock-add-keywords aby ustawić font-lock-warning-face na znaki pasujące do wyrażenia
(font-lock-add-keywords 'magit-log-edit-mode
'(("\\`[^\n]\\{50\\}\\(.*\\)" 1 font-lock-warning-face)))Zaraz po wyrażeniu widzimy liczbę 1. Oznacza ona, że interesuje nas pierwsza dopasowana grupa - to co jest między pierwszą parą nawiasów \\( oraz \\).
Ustawiamy kolorowanie słów kluczowych przy starcie magit-log-edit-mode
Aby przy starcie magit-log-edit-mode bufor został pokolorowany należy wywołać funkcję font-lock-fontify-buffer zaraz po starcie tego trybu. Możemy do tego wykorzystać funkcję add-hook
(add-hook 'magit-log-edit-mode-hook 'font-lock-fontify-buffer)
To rozwiązuje nasz problem.
Podsumowanie
Okazuje się, że w również w tym przypadku dodanie funkcji do Emacsa, o której nie pomyśleli autorzy jest bardzo proste. Ostateczny kod ma trzy linijki
(font-lock-add-keywords 'magit-log-edit-mode
'(("\\`[^\n]\\{50\\}\\(.*\\)" 1 font-lock-warning-face)))
(add-hook 'magit-log-edit-mode-hook 'font-lock-fontify-buffer)