J'ai une fonction personnalisée qui obtient des noms de fichiers marqués par dired (ie, les noms de chaque fichier marqué) si plus d'un a été marqué , ou si seulement un, il obtient le nom du fichier au point. Un problème survient lorsque le curseur est no-man's-land car dired-mark
(ou moi, parce que je suis le pilote) est trop zélé sur la répétition et déplace le curseur sur une ligne vide à la fin du tampon où il n'y a pas de fichier. Dans ce cas, l'erreur est la suivante:Emacs - modifier `dired-mark` pour éviter de déplacer le curseur sur une ligne vide à eob
Debugger entered--Lisp error: (error "No file on this line")
signal(error ("No file on this line"))
error("No file on this line")
dired-get-file-for-visit()
(file-directory-p (dired-get-file-for-visit))
(if (file-directory-p (dired-get-file-for-visit)) nil (let ((lawlist-filename (if (or (re-search-backward "^*" nil t) (re-search-forward "^*" nil t)) (dired-get-marked-files) (dired-get-file-for-visit)))) (wl-draft-mailto) (attach-multiple-files lawlist-filename)))
(lambda nil (interactive) (if (file-directory-p (dired-get-file-for-visit)) nil (let ((lawlist-filename (if (or (re-search-backward "^*" nil t) (re-search-forward "^*" nil t)) (dired-get-marked-files) (dired-get-file-for-visit)))) (wl-draft-mailto) (attach-multiple-files lawlist-filename))))()
funcall-interactively((lambda nil (interactive) (if (file-directory-p (dired-get-file-for-visit)) nil (let ((lawlist-filename (if (or (re-search-backward "^*" nil t) (re-search-forward "^*" nil t)) (dired-get-marked-files) (dired-get-file-for-visit)))) (wl-draft-mailto) (attach-multiple-files lawlist-filename)))))
call-interactively((lambda nil (interactive) (if (file-directory-p (dired-get-file-for-visit)) nil (let ((lawlist-filename (if (or (re-search-backward "^*" nil t) (re-search-forward "^*" nil t)) (dired-get-marked-files) (dired-get-file-for-visit)))) (wl-draft-mailto) (attach-multiple-files lawlist-filename)))) nil nil)
command-execute((lambda nil (interactive) (if (file-directory-p (dired-get-file-for-visit)) nil (let ((lawlist-filename (if (or (re-search-backward "^*" nil t) (re-search-forward "^*" nil t)) (dired-get-marked-files) (dired-get-file-for-visit)))) (wl-draft-mailto) (attach-multiple-files lawlist-filename)))))
J'aime la capacité de maintenir la touche dired-mark
vers le bas pour la répétition, mais je voudrais à arrêter à la dernière ligne avec un fichier dans la mémoire tampon en mode dired . Toute idée sur la façon d'atteindre cet objectif serait grandement appréciée. Passant ce point, effectuer un test, puis revenir au point précédent semble pas être un moyen très efficace de le gérer. Il peut être préférable de terminer le tampon dired à la fin de la dernière ligne avec un fichier, de sorte qu'il n'y a pas de ligne vide - c'est-à-dire s'il n'y a pas de ligne vide à la fin du tampon en mode dired, dired-mark
n'y allez pas (donc ce serait bien?).
EDIT: Le message de débogage a été mis à jour avec un complet backtrace. Ce qui suit est la fonction personnalisée qui peut être, comme @Drew suggère, la cause racine du message d'erreur que je reçois:
;; E-mail attachments using Wanderlust.
(define-key dired-mode-map (kbd "C-c e") (lambda() (interactive)
;; if hovering over a directory, then do nothing
(unless (file-directory-p (dired-get-file-for-visit))
(let ((lawlist-filename
(if (or (re-search-backward "^*" nil t)
(re-search-forward "^*" nil t))
(dired-get-marked-files)
(dired-get-file-for-visit))))
(wl-draft-mailto)
(attach-multiple-files lawlist-filename)))))
(defun attach-multiple-files (&optional lawlist-filename)
"Either (dired-get-marked-files) or (dired-get-file-for-visit) when exiting recursive edit."
(interactive)
(let* (
new-dir
(beg (point))
(dir "/Users/HOME/.0.data"))
(goto-char (point-min))
(when (and (re-search-forward "[email protected]" nil t) (not (re-search-forward "[email protected]\n" nil t)))
(goto-char (point-max))
(newline 2))
(catch 'done
(while t
(goto-char (point-max))
(let* (
(multi-attach-variable t)
(next-file
(if lawlist-filename
lawlist-filename
(dired-read-file-name
(if new-dir
new-dir
dir)))))
(setq new-dir
(cond
((and next-file (stringp next-file))
(file-name-directory next-file))
((and next-file (listp next-file))
(file-name-directory (car next-file)))))
(cond
((stringp next-file)
(mime-edit-insert-file next-file t))
((listp next-file)
(mapcar (lambda (x) (mime-edit-insert-file x t)) next-file)))
(setq lawlist-filename nil)
(if (not (lawlist-y-or-n-p "Attach another? "))
(progn
(goto-char beg)
(throw 'done nil))))))))
1. Où pensez-vous que er Ror message? Je ne le vois pas avec 'emacs -Q' ou n'importe où dans' dired-mark'. 'dired-repeat-over-lines' renvoie zéro lorsqu'il passe à eob. Le message provient d'actions particulières sur une ligne sans fichier. Pour l'éviter, vérifiez si le point est sur une ligne avec un fichier. 2. Pourquoi voulez-vous arrêter avant eob - est-ce juste pour éviter cette erreur msg? (3. Pas directement lié, mais peut-être d'intérêt: avec les touches [** Dired + **] (http://www.emacswiki.org/DiredPlus) 'Cn',' Cp', 'down' et' up' autour de la fin/début au début/fin. Vous pourriez faire de même pour 'm', si vous le vouliez.) – Drew
@Drew - merci - J'ai mis à jour la question avec la fonction personnalisée qui peut (comme vous suggéré) être responsable de l'erreur (plutôt que «dired-mark»). Il n'y a pas de raison particulière de s'arrêter avant eob, sauf pour éviter le message d'erreur. De temps en temps j'aime regarder Dired + pour des idées astucieuses - j'ai emprunté votre mise en évidence de la mémoire tampon en mode dired - c'est une excellente bibliothèque. – lawlist
@Drew - Merci de m'avoir aidé à identifier le problème. La fonction personnalisée que j'utilisais était l'une de mes premières tentatives pour obtenir les noms de fichiers en mode dired. Ailleurs dans mes bibliothèques personnalisées, j'avais déjà basculé sur la méthode utilisée par 'dired-do-create-files'. Donc, ma fonction personnalisée en question dans ce thread doit incorporer cette même méthode. J'ai posté une réponse qui résoudra le problème. Comme toujours, votre aide est grandement appréciée! Sans votre aide, j'aurais probablement fini par essayer de réécrire quelque chose en mode dired inutilement. – lawlist