Subject: bug#17482: args-out-of-range when visiting foo.todo

From: Glenn Morris <[email-masked]>
Date: Tue, 13 May 2014 02:22:35 -0400

Package: emacs
Version: 24.3.91
Severity: important

emacs -Q
C-x C-f /tmp/foo.todo
  -> args-out-of-range error

(.todo is a pretty generic extension for me. I don't want it to open a
specialized Emacs mode. I don't feel strongly about it though.
Perhaps the NEWS file should say that .todo files now open in todo-mode.
They didn't before.)

Debugger entered--Lisp error: (args-out-of-range 1 2)
  narrow-to-region(2 1)
  (let ((name (todo-current-category)) cat-begin cat-end done-start done-sep-start done-end) (widen) (goto-char (point-min)) (re-search-forward (concat "^" (regexp-quote (concat todo-category-beg name)) "$") nil t) (setq cat-begin (1+ (line-end-position))) (setq cat-end (if (re-search-forward (concat "^" (regexp-quote todo-category-beg)) nil t) (match-beginning 0) (point-max))) (setq mode-line-buffer-identification (funcall todo-mode-line-function name)) (narrow-to-region cat-begin cat-end) (todo-prefix-overlays) (goto-char (point-min)) (if (re-search-forward (concat "\n\\(" (regexp-quote todo-category-done) "\\)") nil t) (progn (setq done-start (match-beginning 0)) (setq done-sep-start (match-beginning 1)) (setq done-end (match-end 0))) (error "Category %s is missing todo-category-done string" name)) (if todo-show-done-only (narrow-to-region (1+ done-end) (point-max)) (if (and todo-show-with-done (re-search-forward todo-done-string-start nil t)) (progn (setq done-start cat-end) (let* ((done-sep todo-done-separator) (ov (progn ... ...))) (if ov nil (setq ov (make-overlay done-sep-start done-end)) (overlay-put ov (quote todo) (quote separator)) (overlay-put ov (quote display) done-sep))))) (narrow-to-region (point-min) done-start) (if todo-highlight-item (progn (require (quote hl-line)) (hl-line-mode 1)))))
  todo-category-select()
  (and (member this-command todo-visit-files-commands) (= (- (point-max) (point-min)) (buffer-size)) (member major-mode (quote (todo-mode todo-archive-mode))) (todo-category-select))
  todo-display-as-todo-file()
  run-hooks(find-file-hook)
  after-find-file(t t)
  find-file-noselect-1(#<buffer foo.todo> "/tmp/foo.todo" nil nil "/tmp/foo.todo" nil)
  find-file-noselect("/tmp/foo.todo" nil nil t)
  find-file("/tmp/foo.todo" t)
  call-interactively(find-file nil nil)
  command-execute(find-file)