"weber" <hug...@gmail.com> writes:
How was it solved?
With this code:
(defun indexed-find (file)
(interactive "MFilename: ")
(find-file "my_file_index.txt")
(if (re-search-forward (concat file " = ") nil t 1)
(progn
(setq beg (point))
(end-of-line)
(setq end (point))
(find-file (buffer-substring beg end)))
(message "File not found!"))
(kill-buffer "my_file_index.txt"))
I had some free time and could not resist trying out some
alternatives... :)
Alternative 1:
This is basically your code, just written a bit differently:
(defun indexed-find-2 (file)
(interactive "MFilename: ")
(with-temp-buffer
(insert-file-contents "my_file_index.txt")
(if (search-forward-regexp (format "%s = \\(.*\\)" file) nil t)
(find-file (match-string 1))
(message "File not found!"))))
You might want to use the full path or a variable in the file
name above.
Alternative 2:
Another way to do what you want, using completion.
(defun indexed-find-3 ()
(interactive)
(let* ((file-data
(with-temp-buffer
(insert-file-contents "my_file_index.txt")
(buffer-substring (point-min) (point-max))))
(rows (split-string file-data "\n"))
(file (completing-read "File: " rows)))
(if (string-match "\\(.*\\) = \\(.*\\)$" file)
(find-file (match-string 2 file))
(message "Could not find a file on that row"))))
Or, same code, but a but harder to read maybe:
(defun indexed-find-4 ()
(interactive)
(let ((file (completing-read
"File: "
(split-string
(with-temp-buffer
(insert-file-contents "my_file_index.txt")
(buffer-substring (point-min) (point-max)))
"\n"))))
(if (string-match "\\(.*\\) = \\(.*\\)$" file)
(find-file (match-string 2 file))
(message "Could not find a file on that row"))))
The index file was made with a ruby script, and I update it manually
when there are some new files...
You might also want to have a look at using Emacs
file-cache (http://www.emacswiki.org/cgi-bin/wiki/FileNameCache)
or similar functionality.
Happy hacking!