在 2020年1月7日 +0800 AM2:08,Alan Mackenzie ,写道: > I've just spent some time fixing a more serious bug in the Objective-C > imenu mechanism. This only occurs when I invoke imenu through the > keyboard (e.g. with M-x imenu), which might explain why it's survived so > long without detection. If I invoke imenu with a mouse click, it works. > > Anyhow, with nsfns.m, do M-x imenu C and select any item. > This works. Now do M-x imenu. This throws the error "Wrong type > argument: stringp, nil". > > I've fixed this now, but haven't committed the fix yet. > Thanks. > Back to your bug - clearly what is happening is that the regular > expression search for functions is finding things in comments (such as > "Copyright (C)") which look like functions but aren't. This is easy > enough to fix, by checking for comments and strings, but comes with a > fairly stiff time penalty. On my 2½ year old Ryzen machine, scanning > the freshly visited Objc buffer currently takes 0.0196s. With the check > for comments/strings, it takes 0.0650s. > > That's a factor of ~3.25 slower. On a slower machine (factor 3) with a > larger file (factor 3) this could mean the scanning would take 0.6s > rather than 0.2s. This might be slow enough to annoy somebody a little. > I'm not familiar with objc. What about searching the char '{' after the current pattern? But then I see the following snippet in nsfns.m: static Lisp_Object interpret_services_menu (NSMenu *menu, Lisp_Object prefix, Lisp_Object old) /* —————————————————————————————————————    Turn the input menu (an NSMenu) into a lisp list for tracking on lisp side.    ————————————————————————————————————— */ {