Subject: bug#12045: 24.1.50; semantic :: Debugger entered--Lisp error: (wrong-type-argument syntax-table-p nil)

From: David Engster <[email-masked]>
Date: Thu, 11 Oct 2012 22:45:54 +0200

Jambunathan K. writes:
> My original report was on Windows.  The current report is on Debian
> Squeeze against CEDET bzr repo.  So, consider this a bug report against
> the "future"-CEDET.
>
> When I do "C-c , j" on some symbol, that I know is defined in current
> .el file, I get
> ,----
> |     Jump to symbol: org-e-odt-lib-dir [No Match] [5 times]
> `----
>
> When I partially type up the symbol and do TAB for completion, I get
> ,----
> |     semantic-analyze-current-context: Cannot analyze buffers not supported
> |     by Semantic
> `----
>
> If semantic does not support EmacsLisp files [1],
> 1. It should report an error or warning when the buffer tries to enter
>    semantic-mode.
>
> 2. Disable menu items (starting with Developement->etc) that doesn't
>    apply to current buffer.

You are right, this problem still exists. It is due to the fact that
semantic-mode is active for all buffers (it is a minor mode after all),
whether they could be parsed or not. Raising an error or warning for all
buffers that cannot be parsed would surely be very annoying, so we
cannot do that. However, we can check if a buffer was parsed by calling
`semantic-active-p' (which simply returns `semantic-new-buffer-fcn-was-run').

The solution for the menu items is pretty simple (checking for
`semantic-active-p' instead of only looking at `semantic-mode'). I've
now pushed a change to CEDET upstream that does this, and I will merge
it soon.

Regarding interactive commands, especially those with a pre-defined
keybinding, I'm not entirely sure what would be the best fix. The
easiest way would be if keymaps could be activated dependend on a
buffer-local variable, just as I can do that via the :visible attribute
for menu items. I don't think this is possible, but maybe someone around
here knows a solution. Otherwise, we'd have to check for
`semantic-active-p' in all interactive commands.

-David