Gnus development mailing list
 help / color / mirror / Atom feed
From: Eric Abrahamsen <eric@ericabrahamsen.net>
To: ding@gnus.org
Subject: Re: [gmane.emacs.gnus.user] Re: One folder in local imap not seen
Date: Wed, 13 Aug 2014 18:43:50 +0800	[thread overview]
Message-ID: <87a978vfdl.fsf@ericabrahamsen.net> (raw)
In-Reply-To: <m2egwk7li2.fsf@krugs.de>

Rainer M Krug <Rainer@krugs.de> writes:

> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>
>> Rainer M Krug <Rainer@krugs.de> writes:
>>
>>> <#secure method=pgpmime mode=sign>
>>> Eric Abrahamsen <eric@ericabrahamsen.net> writes:
>>>
>>>> Rainer M Krug <Rainer@krugs.de> writes:
>>>>
>>>>> I am posting this here now, as I did not get any reponse on the
>>>>> gnus.user list.
>>>>>
>>>>> I have one folder in my local imap, which I see when I telnet into the
>>>>> local imap server, which is seen by e.g. Mail (OSX), but not seen by
>>>>> gnus. I have added the local imap server again as an additional server,
>>>>> but I also couldn't see it there. It is not killed as far as I can see.
>>>>
>>>> One good way of seeing where things are going wrong is to edebug
>>>> `nnimap-get-groups'. When you go into the *Server* buffer and list the
>>>> groups in your local imap server, you'll be able to see the results of
>>>> the LIST command, and then see how Gnus parses those results. That
>>>> should get you closer to the source of the problem.
>>>
>>> OK - yes, it does. But it does not help me. When I cycle through the
>>> 'nnimap-get-groups' function, I can't make any sense out of the results,
>>> but I realized that in the (while ...) loop (see the code for reference below), the folder
>>> ...[Mailbox].Later does not occur. As I can't make any sense out of the
>>> previous results.
>>>
>>> Any further tips how I can debug this? 
>>
>> The early part of the function is just issuing the LIST command to imap,
>> and inserting the results into a buffer. Just to make sure that the LIST
>> command *isn't* returning your folder, step through `nnimap-get-groups'
>> again, and when you get to the second (goto-char (point-min)), hit "e"
>> to eval, and tell it (switch-to-buffer (current-buffer)). That should
>> make visible a buffer with a name like "#<buffer *nnimap PR nil
>> *nntpd**-44898>". You can see the results of the LIST command there.
>>
>> If the folder really isn't in that list, then I don't know what to tell
>> you -- Gnus should be getting exactly the same results as your local
>> telnet experiments. 
>
> OK - they are in the result from the LIST output:
>
> ,----
> | ...
> | * LIST (%HasNoChildren) "." "RMKrugGMAIL.[Gmail].All Mail".
> | * LIST (%HasNoChildren) "." RMKrugGMAIL.[Gmail].Bin.
> | * LIST (%HasNoChildren) "." RMKrugGMAIL.[Gmail].Drafts.
> | * LIST (%HasNoChildren) "." RMKrugGMAIL.[Gmail].Important.
> | * LIST (%HasNoChildren) "." RMKrugGMAIL.[Gmail].Sent.
> | * LIST (%HasNoChildren) "." "RMKrugGMAIL.[Gmail].Sent Mail".
> | * LIST (%HasNoChildren) "." RMKrugGMAIL.[Gmail].Spam.
> | * LIST (%HasNoChildren) "." RMKrugGMAIL.[Gmail].Starred.
> | * LIST (%HasChildren) "." RMKrugGMAIL.[Mailbox].
> | * LIST (%HasNoChildren) "." RMKrugGMAIL.[Mailbox].Later.
> | * LIST (%HasNoChildren) "." "RMKrugGMAIL.[Mailbox].To Buy".
> | * LIST (%HasNoChildren) "." "RMKrugGMAIL.[Mailbox].To Download".
> | * LIST (%HasNoChildren) "." "RMKrugGMAIL.[Mailbox].To Follow".
> | * LIST (%HasNoChildren) "." "RMKrugGMAIL.[Mailbox].To Read".
> | * LIST (%HasNoChildren) "." "RMKrugGMAIL.[Mailbox].To Watch".
> | * LIST (%HasNoChildren) "." "RMKrugGMAIL.[Mailbox].Wait For Feedback".
> | * LIST (%HasNoChildren) "." RMKrugGMAIL.Emacs-macosx.
> | * LIST (%HasNoChildren) "." RMKrugGMAIL.INBOX.
> | ...
> `----
>
> But the line with the '.Later' folder is not iterated through in the
> while loop.

In Gnus, do you see any of the groups above that are *not* quoted? Ie,
Important, or Emacs-macosx?

A problem I've run into in the past is that Gnus parses the mailbox name
using (read (current-buffer)). That's supposed to chomp the whole name
in one go, which it does if the mailbox is quoted. But if it isn't
quoted, the read just chomps forward until it hits a slash, or a period,
or some other character that it considers to delimit a Lisp object.

Right now, browsing the group list for any of my Gmail imap accounts, I
see this in the list:

U      0: [Gmail]
U      0: [Gmail]
U      0: [Gmail]
U      0: [Gmail]

Actually, those are my Spam, Trash, and Drafts groups, plus the one
"HasChildren" [Gmail] mailbox. They just show up broken in the browse
list, I think because of the problem I outlined above.

Mind you, I'm actually able to access those groups in the *Group*
buffer, I assume because the groups were already entered into my newsrc
file.

It would be nice if there was a dovecot option to say "quote mailbox
names no matter what," but I don't know if there is. I think the spec
says the names must be quoted if there's a space in them, but if not
it's up to the server.

Just to confirm this, would you mind eval'ling this version of
nnimap-get-groups, and seeing if it helps? It's an ugly hack from ages
ago, that I used when I was having this problem, but then I stopped
using it, I don't remember why. It's possible I used it for a while, the
groups were entered correctly into my newsrc, and then when I stopped
using it it didn't break anything, so I let it go.

One manual edit you'll have to make is to add a ^M control character
where I've indicated below -- I think it wouldn't survive the email
trip.

(defun nnimap-get-groups ()
  (erase-buffer)
  (let ((sequence (nnimap-send-command "LIST \"\" \"*\""))
	groups)
    (nnimap-wait-for-response sequence)
    (subst-char-in-region (point-min) (point-max)
			  ?\\ ?% t)
    (goto-char (point-min))
    (nnimap-unfold-quoted-lines)
    (goto-char (point-min))
    (while (search-forward "* LIST " nil t)
      (let ((flags (read (current-buffer)))
	    (separator (read (current-buffer)))
	    (group (buffer-substring-no-properties
		    (progn (skip-chars-forward " \"")
			   (point))
		    (progn (move-end-of-line 1)
			   (skip-chars-backward " \"") ; add a C-q C-m inside this string
			   (point)))))
	(unless (member '%NoSelect flags)
	  (push (utf7-decode (if (stringp group)
				 group
			       (format "%s" group)) t)
		groups))))
    (nreverse groups)))




  reply	other threads:[~2014-08-13 10:43 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-12 13:36 Rainer M Krug
2014-08-12 23:17 ` Eric Abrahamsen
2014-08-13  8:29   ` Rainer M Krug
2014-08-13  9:14     ` Eric Abrahamsen
2014-08-13 10:05       ` Rainer M Krug
2014-08-13 10:43         ` Eric Abrahamsen [this message]
2014-08-13 12:29           ` SOLVED: unquoted group names from dovecot not shown in GNUS WAS: " Rainer M Krug
2014-08-13 14:39             ` Eric Abrahamsen
2014-08-13 16:12               ` Rainer M Krug
2015-01-27  7:34           ` [gmane.emacs.gnus.user] " Lars Ingebrigtsen
2015-01-27 14:37             ` Eric Abrahamsen
2015-01-28  0:45               ` Lars Ingebrigtsen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87a978vfdl.fsf@ericabrahamsen.net \
    --to=eric@ericabrahamsen.net \
    --cc=ding@gnus.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).