【问题标题】:Add times in buffer在缓冲区中添加时间
【发布时间】:2011-08-30 12:13:54
【问题描述】:

假设我有一个 emacs 缓冲区,其中包含格式分“秒”和格式分“以及秒”的时间,例如 5'30''、6'15''、10' 和 1 ''。是否可以在缓冲区中自动添加所有时间,并以分钟'秒''(此处 = 21'46'')格式输出(在迷你缓冲区中)?

【问题讨论】:

  • 应该是6'15''
  • 哦,是的。我改变它。此外,我还想要分钟格式的时间(我忘记了)。

标签: emacs lisp elisp


【解决方案1】:

你可以使用:

(defun add-times ()
  (interactive)
  (save-excursion
    (let ((mins 0) (secs 0) 
          (accum-nums 
           (lambda (regexp)
             (let ((value 0))
               (beginning-of-buffer)
               (while (re-search-forward regexp nil t)
                 (setq value (+ value (string-to-int (match-string-no-properties 1)))))
               value))))
      (setq mins (funcall accum-nums "\\([0-9]+\\)'\\([^']\\|$\\)"))
      (setq secs (funcall accum-nums "\\([0-9]+\\)''"))
      ; adjust > 60 seconds
      (setq mins (+ mins (/ secs 60)))
      (setq secs (mod secs 60))
      (format "%d'%d''" mins secs))))

您可以这样使用它:在带有时间的文件的缓冲区中,键入 ESC: 然后计算:

(insert (add-times))

如果你想要一个也能做到这一点的函数,请求缓冲区:

(defun insert-add-times-to-buffer-at-point (buffer)
  (interactive "BBuffer to add and insert times: ")
  (with-current-buffer buffer
    (insert (add-times))))

【讨论】:

  • 谢谢。但是它给了我:setq: Wrong type argument: number-or-marker-p, nil
  • 是的,对不起。还是不正确。我会尽快找到一台电脑来修复它:)
  • 现已修复。希望这个有效。规范有一个小问题,因为数字可以有分钟、秒或两者,这很难用正则表达式表达,至少很容易。在这种情况下,所有数字都可以有一个可选的分钟标记,但它们必须包括秒,即使它们是 0"
  • 嗯。 5'2'' 和 2'1'' 给你的脚本 10'3'' !?
  • 我刚刚检查过,根据这些数据,它给了我 7'3"。
【解决方案2】:

这是你想要的吗?

(defun add-times ()                 
  (interactive)                                
  (let ((minutes 0) (seconds 0))     
    (save-excursion                        
      (goto-char (point-min))
      (while (re-search-forward "\\([0-9]+\\)'\\('\\)?" (point-max) t)
        (if (match-string 2)
            (setq seconds (+ seconds (string-to-number (match-string 1))))
          (setq minutes (+ minutes (string-to-number (match-string 1)))))))
    (insert (format "%d'%d''"(+ minutes (/ seconds 60)) (% seconds 60)))))

【讨论】:

  • 谢谢。是否可以对其进行修改以解决可能出现同样格式分钟的情况?
  • @user406686:当然,我也更新了代码以使用minutes'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
  • 1970-01-01
  • 2020-06-28
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2012-09-13
相关资源
最近更新 更多