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 zC-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 doC-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:
- rejestruj czasy offline w pliku tekstowym, np. na moim telefonie komórkowym
- zsynchronizuj ten plik z moim komputerem
- na komputerze, uruchom
org-offline-to-clock.pl BEFORE > AFTER
- sprawdź poprawność za pomocą
diff BEFORE AFTER
- jeśli szczęśliwy,
mv AFTER BEFORE
- przenieś wybrane wiersze do mojego rzeczywistego pliku organizacyjnego.