From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "rgb" Newsgroups: gmane.emacs.help Subject: Re: Multiple people touching the same file with ange-ftp Date: 12 Jan 2007 10:40:50 -0800 Organization: http://groups.google.com Message-ID: <1168627249.501429.65360@l53g2000cwa.googlegroups.com> References: <1168468857.210422.271210@i39g2000hsf.googlegroups.com> <1168469572.611178.86730@77g2000hsv.googlegroups.com> <1168536873.593252.264520@i56g2000hsf.googlegroups.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" X-Trace: sea.gmane.org 1168630840 3268 80.91.229.12 (12 Jan 2007 19:40:40 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Fri, 12 Jan 2007 19:40:40 +0000 (UTC) Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Fri Jan 12 20:40:38 2007 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1H5SGT-0001gm-Lm for geh-help-gnu-emacs@m.gmane.org; Fri, 12 Jan 2007 20:40:37 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1H5SGT-0004O8-E2 for geh-help-gnu-emacs@m.gmane.org; Fri, 12 Jan 2007 14:40:37 -0500 Original-Path: shelby.stanford.edu!newsfeed.stanford.edu!postnews.google.com!l53g2000cwa.googlegroups.com!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 48 Original-NNTP-Posting-Host: 168.208.215.220 Original-X-Trace: posting.google.com 1168627257 23478 127.0.0.1 (12 Jan 2007 18:40:57 GMT) Original-X-Complaints-To: groups-abuse@google.com Original-NNTP-Posting-Date: Fri, 12 Jan 2007 18:40:57 +0000 (UTC) User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727),gzip(gfe),gzip(gfe) Complaints-To: groups-abuse@google.com Injection-Info: l53g2000cwa.googlegroups.com; posting-host=168.208.215.220; posting-account=C7LM4w0AAAD23IRuMuUUJVCLQTuHhTK8 Original-Xref: shelby.stanford.edu gnu.emacs.help:144661 Original-To: help-gnu-emacs@gnu.org X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:40266 Archived-At: > >> Searching for MDTM in ange-ftp.el leads one to ange-ftp-file-modtime. > >> > > As yet I don't see an obvious way to override or intercept that > > function on a host by host basis. > > You could start by making ange-ftp-file-modtime extensible, the same way > ange-ftp-parse-listing is extensible via the ange-ftp-parse-list-func-alist > variable: > > (defvar ange-ftp-file-modtime-func-alist nil > "Alist saying how to return modification time of remote file. > Association list of \( TYPE \. FUNC \) pairs, where FUNC is a > routine which returns the modification time of a remote file from > a host of type TYPE.") > > (defadvice ange-ftp-file-modtime (around func-alist activate) > "If `ange-ftp-file-modtime-func-alist' has an entry for FILE's host type, > return the result of calling that function." > (let* ((ftp-name (ange-ftp-ftp-name file)) > (host (nth 0 ftp-name)) > (user (nth 1 ftp-name)) > (name (nth 2 ftp-name)) > (func (assq (ange-ftp-host-type host) > ange-ftp-file-modtime-func-alist))) > (if func > (funcall func file) > ad-do-it))) > > Now you just have to implement ange-ftp-file-modtime-for-FOO and add > (FOO . ange-ftp-file-modtime-for-FOO) to ange-ftp-file-modtime-func-alist, > assuming ange-ftp-host-type returns FOO for file's on your server. :-) > Thanks. I did get it working using your alist suggestion. (defadvice ange-ftp-file-modtime (around host-type-alist-advice compile activate) "If `ange-ftp-file-modtime-func-alist' has an entry for FILE's host type, return the result of calling that function." (let ((fcn (cdr (assq (ange-ftp-host-type (car (ange-ftp-ftp-name file))) ange-ftp-file-modtime-func-alist)))) (if fcn (setq ad-return-value (funcall fcn file)) ad-do-it)))