Używanie NppExec i Ruby do pisania nowej funkcji makra dla Notepad ++

8

Pracuję w USA i Europie, a przełączanie między formatami miesiąc / dzień (USA) i dzień / miesiąc (UE) prowadzi do niejednoznaczności podczas przeglądania dzienników lub notatek (np. Czy to 8 lipca, 8 lipca czy 7 sierpnia?).

Chciałbym zmienić funkcję znacznika czasu Notepad ++, aby korzystała z formatu międzynarodowego

YYYY-MM-DD--DAY--HH:MM

2012-08-19--Sun--20:30

Pamiętaj, że określenie Dnia tygodnia byłoby miłym dodatkiem i pozwala uniknąć sprawdzania, który dzień był w kalendarzu.

Obecnie elektrownia jądrowa nie ma takiej elastyczności. Czy można to zrobić za pomocą jakiegoś makra lub skryptu, na przykład Ruby?

Assad Ebrahim
źródło
Jakie są myślniki między DD i DAY a DAY & HH?
Louis Waweru,
Podwójne myślniki - mają wizualnie przesunąć datę od dnia od godziny. Wydaje się bardziej przyjemny estetycznie niż 2012-08-19-Sun-20:30. (Chciałbym, aby znacznik czasu był pojedynczą jednostką znaków, dlatego nie chcę spacji ...) Odpowiednio zredagowałem pytanie.
Assad Ebrahim,
1
Po wielu latach ciężkiej pracy z kodowaniem za pomocą Notepad ++ ze względu na jego potężny zestaw funkcji, nie masz pojęcia, ile razy chciałem móc podłączyć się do niego za pomocą języka skryptowego z poziomu GUI. Dziękujemy za opublikowanie tego!
Ben Richards

Odpowiedzi:

6

Udostępnianie, jak to zrobić za pomocą wtyczki NppExec i Ruby.

Rozwiązanie:

Podejście : Uzyskaj zewnętrzny język skryptowy (w tym przypadku Ruby), aby zwrócić sformatowany znacznik czasu, a NppExec go odbierze i wstawi w położenie kursora w bieżącym pliku pokazanym w Notepad ++.

Najpierw skonfiguruj konsolę:

    npe_console v+   // set console to receive output in $(OUTPUT) variable
    npe_console d+   // set current working directory to same as current file

Następnie w NppExec> Wykonaj polecenie menu wprowadź następujący fragment kodu:

    // Diary snippet (Generates timestamp YYYY-MM-DD--DAY--HH:MM for NPP++)
    npp_console disable     // turn off output displaying to console
    // this ruby one-liner does the work
    ruby -r Date -e "dt=DateTime.now; dname = Date::ABBR_DAYNAMES[dt.wday]; puts dt.strftime(\"%Y-%m-%d--#{dname}--%H:%M\");"  
    sel_settext $(OUTPUT)   // put result at cursor in current file
    npp_console enable      // restore output displaying to console
    npp_console 0           // hide the console window

Używa silnika Ruby do generowania znacznika czasu i wstawia go tam, gdzie kursor znajduje się w bieżącym pliku w Notepad ++. Wynik (z opóźnieniem około 500 ms) to znacznik czasu:

    2012-08-20--Mon--20:16

Uwaga: Chociaż na pewno to działa, jeśli ktoś ma rozwiązanie, które nie polega na niczym zewnętrznym (w tym przypadku Ruby), byłoby lepiej.


Edycja: „Produkcja” rozwiązania ... (solidność i wygoda)

Wykonując poniższe kroki, można wytworzyć powyższe rozwiązanie ...

Przeszkoda polega na tym, że zamknięcie Notepad ++ traci konfigurację konsoli, więc należy to skonfigurować przy każdym ponownym uruchomieniu.

Tak więc skonfigurowaliśmy konfigurację konsoli jako skrypt uruchamiany automatycznie przy każdym uruchomieniu Notepad ++.

Następnie dla wygody skojarz skrót klawiaturowy (klawisz skrótu) ze skryptem pamiętnika.

Krok 1: Wprowadź kod pamiętnika w oknie dialogowym NppExec Excute ...: Plugins > NppExec > Execute...nadając mu nazwę (użyjesz go później)

Krok 1 - Wprowadź kod pamiętnika

Krok 2: Wprowadź podobnie kod konfiguracji setup_console:

Krok 2 - Wprowadź kod konfiguracji konsoli

Kroki 3, 4, 5: W Plugins > NppExec > Advanced Optionsustaw konfigurację setup_console do uruchamiania podczas uruchamiania (3), utwórz pozycję menu dla kodu pamiętnika (4) i umieść pozycję Macromenu w menu (5):

Kroki 3,4,5 - Przygotowanie do konfiguracji

Krok 6: Ustaw skrót klawiszowy (skrót) do skryptu pamiętnika: Settings > Shortcut Mapper... > Pluginsi przewiń w dół, aż znajdziesz nazwę skryptu pamiętnika, którego użyłeś ...

Krok 6 - skrót klawiaturowy

Wynik: patrząc pod Macrospolecenie menu zobaczysz nowe polecenie Znacznik czasu ze skrótem klawiaturowym.

Wynik - gotowe

Gotowy!

Assad Ebrahim
źródło