Jak szybko odliczać godziny offline?

Czasami wolę pracować w trybie offline. Mogę to zmierzyć i zapisać, unikając uruchamiania komputera.

Lubię korzystać z tabeli i org-update-all-dblocks, aby obliczyć moje dzienne godziny pracy. Jest to dla mnie bardzo wygodne, ponieważ mogę spędzać nieparzystą liczbę minut w ciągu dnia, wykonując pracę dla klienta.

Jeśli chcę szybko dodać godziny pracy offline i zaktualizować tabelę, czy org-mode już mam do tego funkcję? Wiem, że mogę org-clock-in i org-clock-out wygenerować zegar , a następnie ręcznie wpisz go ponownie i użyj org-update-all-dblocks do ponownego obliczenia, ale najlepiej byłoby, gdyby była to pojedyncza funkcja, którą mogę wywołać, która zapyta mnie, ile minut chcę wprowadzić. Prawdopodobnie powinna po prostu użyj bieżącej godziny i daty jako początku, mimo że pozornie byłoby to sprzeczne z pracą, którą zaczynam wykonywać po dodaniu godzin offline.

Byłoby jeszcze lepiej, gdyby org-mode miał koncepcję godzin offline, która rozumiała, że mogę znać datę, ale prawdopodobnie nie rejestrowałem pory dnia, więc można było pominąć godzinę, ale nadal obliczać ją w tabeli zegara.

Jeśli mam napisać q chory i brudny elisp, jakie funkcje byłyby dla mnie przydatne poza powyższymi? Myślę, że fragmenty, których mi brakuje, to coś, co można pobrać z ostatniego zegara, coś do dodania do niego minut i coś, o co poprosić o liczbę minut.

Odpowiedź

Następujące polecenie wstawia typowy wpis do dziennika organizacji, zakres czasu zaczynający się od N minut temu:

(defun org-insert-clock-range (&optional n) (interactive "NTime Offset (in min): ") (let* ((ctime (cdr (decode-time (current-time)))) (min (car ctime)) (start (apply "encode-time 0 (- min n) (cdr ctime)))) (org-insert-time-stamp start t t "CLOCK: ") (insert "--") (org-insert-time-stamp (current-time) t t))) 

Odpowiedź

odpowiedź mutbuergera bardzo mi pomogła. To mój pierwszy raz, kiedy programuję w elisp innym niż konfiguracja. Jego odpowiedź była bliska znaku, ale nadal chciałem normalnej funkcjonalności wpisywania i wyrejestrowywania, aby znaleźć lub utworzyć dziennik pod najbliższym nagłówkiem i dodać uwaga.

Moje zmienione rozwiązanie wyglądało tak:

(defun offset-current-time (n) (let* ((ctime (cdr (decode-time (current-time)))) (minutes (car ctime))) (apply "encode-time 0 (- minutes n) (cdr ctime)))) (defun org-insert-clock-range (&optional n) (interactive "NTime Offset (in min): ") (org-clock-in nil (offset-current-time n)) (org-clock-out)) (defadvice org-clock-out (after org-clock-out-after activate) (org-update-all-dblocks)) (add-hook "org-mode-hook (lambda () ; Keys for org mode ;snip (define-key evil-normal-state-map (kbd "gl") "org-insert-clock-range) ;snip )) 

Odpowiedź

Zarządzam czasami offline za pomocą zestawu narzędzi niestandardowych funkcji do manipulowania dziennikami zegara we własnej składni organizacji i skryptu do konwersji skróconej notacji tekstowej na składnię organizacji.

Funkcje w https://github.com/clange/emacs/blob/master/.emacs.d/init/org-clock.el :

  • org-clock-split-current-interval (Powiązałem to z C-c o s): jeśli w bieżącym wierszu jest interwał, w którym faktycznie zostały wykonane dwa zadania, ułatw sobie podzielenie go na dwa przedziały.
  • org-clock-change-hh-mm (przypisany do C-c o :): pozostawiając dzień bez zmian, dostosuj godziny / minuty dziennika zegara. Typowy przypadek użycia : skopiuj wiersz dziennika zegara z innego miejsca, dostosuj go do czasu przepracowanego w trybie offline.

Skrypt: https://github.com/clange/scripts/blob/master/org-offline-to-clock/org-offline-to-clock.pl

Mój przepływ pracy z użyciem tego:

  1. rejestruj czasy offline w pliku tekstowym, np. na moim telefonie komórkowym
  2. zsynchronizuj ten plik z moim komputerem
  3. na komputerze, uruchom org-offline-to-clock.pl BEFORE > AFTER
  4. sprawdź poprawność za pomocą diff BEFORE AFTER
  5. jeśli szczęśliwy, mv AFTER BEFORE
  6. przenieś wybrane wiersze do mojego rzeczywistego pliku organizacyjnego.

Dodaj komentarz

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