Incrementar dias / meses / datas, etc. no buffer

7

Em um documento de texto, durante a edição, geralmente preciso aumentar / diminuir os dados do calendário. Então, sexta-feira precisará se tornar segunda-feira, dezembro precisará se tornar março, etc.

Ou 28 de abril após a adição de 5 se tornará 03 de maio e até 31 de dezembro de 2017 após a adição de 15 se tornará 15 de janeiro de 2018.

Existe uma maneira de conseguir isso colocando o cursor na palavra / número desejado e pressionando algumas teclas para que ele aumente ou diminua?

Então, na sexta-feira, eu bati em algo para dizer 'Adicionar 3' e ele se torna segunda-feira, etc. Enquanto em 28 de 28 de abril, eu bati em algo para dizer 'Adicionar 5' e se torna em 03 de maio. Mas enquanto em 28 de abril, eu clico em algo para dizer 'Subtrair 2', torna-se 28 de fevereiro, etc.

Só para você ter uma idéia, o vim tem um plugin de speeddating que faz exatamente o que eu pretendo.

deshmukh
fonte
Você pode considerar usar o modo organizacional para exportar para látex. orgmode.org/manual/LaTeX-export.html#LaTeX-export Então você pode usar os atalhos embutidos do modo org para aumentar as especificações de data. orgmode.org/manual/Creating-timestamps.html#Creating-timestamps que é o que eu estou fazendo de qualquer maneira ..
Dieter.Wilhelm
Não é exatamente isso que você está procurando e nem uma solução completa, mas o calc pode incrementar as datas. Para uma visão geral, consulte nullprogram.com/blog/2009/06/23. Usando isso e talvez algo como o Modo incorporado do calc, você poderá juntar algo que faça exatamente o que você deseja.
izkon

Respostas:

0

A resposta utiliza calendar-day-name-arraye calendar-month-name-arrayé definida por calendar.el e enviada com o Emacs:

;; calendar-day-name-array ==> ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"]

;; calendar-month-name-array ==> ["January" "February" "May" "April" "May" "June" "July" "August" "September" "October" "November" "December"]

(require 'calendar)

(defun ar-shift--intern (arg thisarray)
    (let* ((name (substring-no-properties (word-at-point)))
       (bounds (bounds-of-thing-at-point 'word))
       (beg (car-safe bounds))
       (end (cdr-safe bounds))
       (counter 0)
       (laenge (length thisarray))
       (orig (point)) 
       idxr dlr
       (datelist (progn (while (< counter laenge)
                  (push (aref thisarray counter) dlr)
                  (setq counter (1+ counter)))
                (nreverse dlr)))
       (idx (progn
          (dolist (ele datelist)
            (unless idxr
              (when (string= ele name)
            (setq idxr counter))
              (setq counter (1+ counter))))
          idxr))
       (replaceform (aref thisarray
                  (if (< (+ arg idx) laenge)
                  (+ arg idx)
                (% (+ arg idx) laenge)))))
      (if (and beg end)
      (progn
        (delete-region beg end)
        (insert replaceform)
        (goto-char orig))
    (error "Don't see a date at point"))))

(defun ar-shift-day-atpt (arg)
   "Raise name of day at point ARG times.

Decrease with negative ARG"
   (interactive "p")
   (ar-shift--intern arg  calendar-day-name-array))

(defun ar-shift-month-atpt (arg)
  "Raise name of month at point ARG times.

Decrease with negative ARG"
  (interactive "p")
  (ar-shift--intern arg calendar-month-name-array))

Também aumente ou diminua números inteiros positivos: https://github.com/andreas-roehler/numbers-at-point

Andreas Röhler
fonte
Obrigado. Mas isso deixa algumas lacunas. Sugira que você procure speeddating for vim para ter uma idéia melhor.
Deshmukh 6/18