On Oct 24, 2013 6:34 AM, "Yggdroot Chen" <archofortune@gmail.com> wrote:
  >
  > 在 2013年10月19日星期六UTC+8上午1时01分43秒,ZyX写道:
  > > On Friday, October 18, 2013 7:12:52 PM UTC+4, ZyX wrote:
  > > > > now I redescribe my issue, I want to do some cleanup actions after ctrl-c is pressed. the code is as below:
  > > > > def func():
  > > > >     try:
  > > > >         while 1:
  > > > >             xxx
  > > > >             xxx
  > > > >     except KeyboardInterrupt:
  > > > >         vim.command("xxxx")
  > > > >
  > > > > then the issue occurs, how to resolve it?
  > > >
  > > > If xxx in a while cycle is pure python code (i.e. you did try to interrupt something that does not call vim.*) then it is a part of the known issue that python code is not interruptable. Nobody knows what to do without threads (though MarcWeber have written a patch for the *nix console, but for the gvim threads are needed).
    > > >
  > > > If it is not, then issue apparently was not known. Did you say that it is both vim-7.3 and vim-7.4 issue, though with different exception? The attached patch should fix the issue.
  > > >
  > > >
  > > > Note: it would be much better if you came up with an example with the real code and not xxx: if I see abstract code I evaluate it in mind (and hence e.g. have gotten to false conclusion that KeyboardInterrupt is not thrown). Though still wondering why I said about ignored SIGINT: I was absolutely sure I saw code for ignoring it.
    > > >
  > > >
  > > > # HG changeset patch
  > > > # User ZyX <kp-pav@ya.ru>
  > > > # Date 1382108836 -14400
  > > > #      Fri Oct 18 19:07:16 2013 +0400
  > > > # Branch fix-py-vim-interrupt
  > > > # Node ID ce2b5adf52ff9b9ac37749e795d357d8b0a96f47
  > > > # Parent  92c9748e0ccbc42a5e28ce8fb9b8818e756a06da
  > > > Fix interrupt not being properly discarded in VimTryEnd
  > > >
  > > > diff -r 92c9748e0ccb -r ce2b5adf52ff src/if_py_both.h
  > > > --- a/src/if_py_both.h      Sun Oct 06 17:46:56 2013 +0200
  > > > +++ b/src/if_py_both.h      Fri Oct 18 19:07:16 2013 +0400
  > > > @@ -558,7 +558,11 @@
  > > >      /* Keyboard interrupt should be preferred over anything else */
  > > >      if (got_int)
  > > >      {
  > > > -   did_throw = got_int = FALSE;
  > > > +   if (current_exception != NULL)
  > > > +       discard_current_exception();
  > > > +   else
  > > > +       need_rethrow = did_throw = FALSE;
  > > > +   got_int = FALSE;
  > > >     PyErr_SetNone(PyExc_KeyboardInterrupt);
  > > >     return -1;
  > > >      }
  > > > @@ -567,7 +571,10 @@
  > > >      /* Python exception is preferred over vim one; unlikely to occur though */
  > > >      else if (PyErr_Occurred())
  > > >      {
  > > > -   did_throw = FALSE;
  > > > +   if (current_exception != NULL)
  > > > +       discard_current_exception();
  > > > +   else
  > > > +       need_rethrow = did_throw = FALSE;
  > > >     return -1;
  > > >      }
  > > >      /* Finally transform VimL exception to python one */
  > >
  > > Propagated to vim-dev: https://groups.google.com/forum/#!topic/vim_dev/tZQJHSyjAzs.
  >
  > why can't "signal.signal(signal.SIGINT, signal.SIG_IGN)" ignore SIGINT, is it a bug?
First of all, this is not going to work in the GUI since there are normally no interrupts: ctrl-c is a keyboard event and there is no terminal to throw SIGINT. Thus I would say that any code that relies on ignored SIGINT == ignored interrupts is broken. This signal is also not used when not on *nix due to its unexistence.
I failed to find the code which will set got_int if signal is ignored in the terminal on *nix systems though.
Second, what makes you think that vim should work after you mess with its signals?
> --
  > --
  > You received this message from the "vim_use" maillist.
  > Do not top-post! Type your reply below the text you are replying to.
  > For more information, visit http://www.vim.org/maillist.php
  >
  > ---
  > You received this message because you are subscribed to the Google Groups "vim_use" group.
  > To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
  > For more options, visit https://groups.google.com/groups/opt_out.
  
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
No comments:
Post a Comment