Loading ...
Sorry, an error occurred while loading the content.

Re: Vim version 6.0ak ALPHA available [patch]

Expand Messages
  • Nam SungHyun
    ... I figured out why it happens. im_get_status() should not check xim_preediting . While connecting to XIM, user can change the language (English or Native).
    Message 1 of 7 , Jun 19, 2001
    • 0 Attachment
      Bram Moolenaar wrote:
      >
      > Namsh -
      >
      > > And today I experienced another problem. While I edited a file,
      > > suddenly gvim does not connect to XIM (insert mode).
      > > I did ':set imi=2<cr>i', then gvim connect to XIM.
      > > But after that, I changed to normal mode, and do something, and changed
      > > to insert mode, gvim not connect to XIM. ':set imi?' displays 'imi=0'.
      > >
      > > If I do ':set imi=2<cr>i', gvim connect to XIM at that time. But,
      > > imi changed to 0 always if I go to normal mode and return to insert mode.
      > > I have no idea and busy now. If you also have no idea, please
      > > let me know a check point, I will try when I become idle.
      >
      > If the 'iminsert' option itself changes value, this probably happens by
      > im_save_status(). It is called in ins_esc() in edit.c.

      I figured out why it happens. im_get_status() should not check
      'xim_preediting'.
      While connecting to XIM, user can change the language (English or
      Native). In english input mode, 'xim_preediting' is FALSE for OnTheSpot.
      'xim_preediting' is always FALSE for other methods (Root, OffTheSpot,
      OverTheSpot).
      Currently only OnTheSpot can know current language mode.

      Regards,
      namsh

      diff -u -p -r1.27 globals.h
      --- ./src/globals.h 18 Jun 2001 00:44:35 -0000 1.27
      +++ ./src/globals.h 20 Jun 2001 06:13:16 -0000
      @@ -595,7 +595,6 @@ EXTERN XIC xic INIT(= NULL);
      # endif
      EXTERN guicolor_T xim_fg_color INIT(= -1);
      EXTERN guicolor_T xim_bg_color INIT(= -1);
      -EXTERN int xim_preediting INIT(= FALSE); /* XIM in showmode() */
      #endif

      #ifdef FEAT_HANGULIN
      diff -u -p -r1.24 gui.c
      --- ./src/gui.c 18 Jun 2001 00:44:35 -0000 1.24
      +++ ./src/gui.c 20 Jun 2001 06:16:06 -0000
      @@ -809,7 +809,7 @@ gui_update_cursor(force, clear_selection
      static int id;
      guicolor_T fg, bg;

      - if (im_get_status())
      + if (im_native_lang_input_mode())
      {
      id = syn_name2id((char_u *)"CursorIM");
      if (id > 0)
      diff -u -p -r1.24 gui_w32.c
      --- ./src/gui_w32.c 18 Jun 2001 00:44:36 -0000 1.24
      +++ ./src/gui_w32.c 20 Jun 2001 06:14:06 -0000
      @@ -1555,6 +1555,11 @@ im_get_status()
      return status;
      }

      + int
      +im_native_lang_input_mode()
      +{
      + return im_get_status();
      +}
      #endif /* FEAT_MBYTE && FEAT_MBYTE_IME */

      #if defined(FEAT_MBYTE) && !defined(FEAT_MBYTE_IME) && defined(GLOBAL_IME)
      diff -u -p -r1.5 hangulin.c
      --- ./src/hangulin.c 11 Jun 2001 01:49:37 -0000 1.5
      +++ ./src/hangulin.c 20 Jun 2001 06:14:13 -0000
      @@ -422,7 +422,7 @@ hangul_input_state_set(state)
      }

      int
      -im_get_status()
      +im_native_lang_input_mode()
      {
      return hangul_input_state_get();
      }
      diff -u -p -r1.11 mbyte.c
      --- ./src/mbyte.c 18 Jun 2001 00:44:36 -0000 1.11
      +++ ./src/mbyte.c 20 Jun 2001 06:13:04 -0000
      @@ -2562,6 +2562,7 @@ iconv_end()
      static int xim_is_active = FALSE; /* XIM should be active in the current
      mode */
      static int xim_has_focus = FALSE; /* XIM is really being used for Vim */
      +static int xim_preediting = FALSE;
      #ifdef FEAT_GUI_X11
      static XIMStyle input_style;
      static int status_area_enabled = TRUE;
      @@ -3594,13 +3595,13 @@ xim_get_status_area_height(void)
      int
      im_get_status()
      {
      - return input_method_active();
      + return xim_has_focus;
      }

      int
      -input_method_active()
      +im_native_lang_input_mode()
      {
      - return (xim_preediting && xim_has_focus);
      + return xim_preediting;
      }

      #endif /* FEAT_XIM */
      diff -u -p -r1.29 screen.c
      --- ./src/screen.c 18 Jun 2001 00:44:36 -0000 1.29
      +++ ./src/screen.c 20 Jun 2001 06:13:41 -0000
      @@ -7233,7 +7233,7 @@ showmode()
      {
      MSG_PUTS_ATTR("--", attr);
      #if defined(FEAT_XIM)
      - if (xim_preediting)
      + if (im_native_lang_input_mode())
      MSG_PUTS_ATTR(" XIM", attr);
      #endif
      #if defined(FEAT_HANGULIN) && defined(FEAT_GUI)
      diff -u -p -r1.13 gui_w32.pro
      --- ./src/proto/gui_w32.pro 18 Jun 2001 00:44:37 -0000 1.13
      +++ ./src/proto/gui_w32.pro 20 Jun 2001 06:15:14 -0000
      @@ -64,6 +64,7 @@ void gui_mch_set_bg_color __ARGS((guicol
      void im_set_position __ARGS((int row, int col));
      void im_set_active __ARGS((int active));
      int im_get_status __ARGS((void));
      +int im_native_lang_input_mode __ARGS((void));
      void gui_mch_draw_string __ARGS((int row, int col, char_u *text, int len, int flags));
      void gui_mch_flush __ARGS((void));
      void gui_mch_add_menu __ARGS((vimmenu_T *menu, int pos));
      diff -u -p -r1.3 hangulin.pro
      --- ./src/proto/hangulin.pro 11 Jun 2001 01:49:39 -0000 1.3
      +++ ./src/proto/hangulin.pro 20 Jun 2001 06:15:22 -0000
      @@ -2,6 +2,7 @@
      int hangul_input_state_get __ARGS((void));
      void hangul_input_state_set __ARGS((int state));
      int im_get_status __ARGS((void));
      +int im_native_lang_input_mode __ARGS((void));
      void hangul_input_state_toggle __ARGS((void));
      void hangul_keyboard_set __ARGS((void));
      int hangul_input_process __ARGS((char_u *s, int len));
      diff -u -p -r1.8 mbyte.pro
      --- ./src/proto/mbyte.pro 18 Jun 2001 00:44:37 -0000 1.8
      +++ ./src/proto/mbyte.pro 20 Jun 2001 06:14:49 -0000
      @@ -69,7 +69,7 @@ int xim_queue_key_press_event __ARGS((Gd
      void xim_init __ARGS((void));
      int xim_get_status_area_height __ARGS((void));
      int im_get_status __ARGS((void));
      -int input_method_active __ARGS((void));
      +int im_native_lang_input_mode __ARGS((void));
      void convert_setup __ARGS((vimconv_T *vcp, char_u *from, char_u *to));
      int convert_input __ARGS((char_u *ptr, int len, int maxlen));
      char_u *string_convert __ARGS((vimconv_T *vcp, char_u *ptr, int *lenp));
    • Bram Moolenaar
      ... I don t quite understand these changes. It mostly looks like renaming im_get_status() to im_native_lang_input_mode(). But the difference between the
      Message 2 of 7 , Jun 20, 2001
      • 0 Attachment
        Nam SungHyun wrote:

        > > If the 'iminsert' option itself changes value, this probably happens by
        > > im_save_status(). It is called in ins_esc() in edit.c.
        >
        > I figured out why it happens. im_get_status() should not check
        > 'xim_preediting'.
        > While connecting to XIM, user can change the language (English or
        > Native). In english input mode, 'xim_preediting' is FALSE for OnTheSpot.
        > 'xim_preediting' is always FALSE for other methods (Root, OffTheSpot,
        > OverTheSpot).
        > Currently only OnTheSpot can know current language mode.

        I don't quite understand these changes. It mostly looks like renaming
        im_get_status() to im_native_lang_input_mode(). But the difference between
        the im_get_status(), which now only checks "xim_has_focus", and
        im_native_lang_input_mode(), which only uses "xim_preediting" escapes me. Why
        not one function that says whether non-English input mode is active? This can
        be used both for 'iminsert', the cursor shape/color and the status line.
        What is the real difference between "xim_preediting" and "xim_has_focus"?

        --
        It is illegal for anyone to give lighted cigars to dogs, cats, and other
        domesticated animal kept as pets.
        [real standing law in Illinois, United States of America]

        /// Bram Moolenaar -- Bram@... -- http://www.moolenaar.net \\\
        ((( Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim )))
        \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///
      • Nam SungHyun
        ... if xim_has_focus == 1, it means vim connect to XIM. if xim_preediting == 1, it means the current input language is native. And vim connect to XIM
        Message 3 of 7 , Jun 20, 2001
        • 0 Attachment
          Bram Moolenaar wrote:
          >
          > Nam SungHyun wrote:
          >
          > > > If the 'iminsert' option itself changes value, this probably happens by
          > > > im_save_status(). It is called in ins_esc() in edit.c.
          > >
          > > I figured out why it happens. im_get_status() should not check
          > > 'xim_preediting'.
          > > While connecting to XIM, user can change the language (English or
          > > Native). In english input mode, 'xim_preediting' is FALSE for OnTheSpot.
          > > 'xim_preediting' is always FALSE for other methods (Root, OffTheSpot,
          > > OverTheSpot).
          > > Currently only OnTheSpot can know current language mode.
          >
          > I don't quite understand these changes. It mostly looks like renaming
          > im_get_status() to im_native_lang_input_mode(). But the difference between
          > the im_get_status(), which now only checks "xim_has_focus", and
          > im_native_lang_input_mode(), which only uses "xim_preediting" escapes
          > me. Why not one function that says whether non-English input mode is
          > active? This can be used both for 'iminsert', the cursor shape/color
          > and the status line. What is the real difference between
          > "xim_preediting" and "xim_has_focus"?

          if xim_has_focus == 1, it means vim connect to XIM.

          if xim_preediting == 1, it means the current input language is native.
          And vim connect to XIM (xim_has_focus = 1).

          if xim_preediting == 0, it means the current input language is english.
          And vim connect to XIM (Insert Mode) or not (Normal mode).

          Previous: im_get_status() always return False for
          Root/OffTheSpot/OverTheSpot because 'xim_preeditng' is updated only for
          OnTheSpot. And though user use OnTheSpot, if user change input language
          to English while connecting XIM, im_get_status() returns False.
          So, if user go to Normal mode while in english input mode, VIM saves
          imi=0. And after that, VIM does not connect to XIM when user enters
          Insert mode.

          About 'preediting', while input multibyte, user inputs several key to
          input one multibyte. 'preediting' is these period(?). There's no need
          preediting to input English because there no multibyte.

          About im_native_lang_input_mode() (with CursorIM), I think it is not
          important to user that VIM uses IM or not. But user want to see current
          input language mode via Cursor color.

          Regards,
          namsh
        • Bram Moolenaar
          ... Are the above correct when not use OnTheSpot then? It seems that when using one of the other metheds, xim_preediting doesn t matter, thus xim_has_focus
          Message 4 of 7 , Jun 20, 2001
          • 0 Attachment
            Nam SungHyun wrote:

            > > > > If the 'iminsert' option itself changes value, this probably happens by
            > > > > im_save_status(). It is called in ins_esc() in edit.c.
            > > >
            > > > I figured out why it happens. im_get_status() should not check
            > > > 'xim_preediting'.
            > > > While connecting to XIM, user can change the language (English or
            > > > Native). In english input mode, 'xim_preediting' is FALSE for OnTheSpot.
            > > > 'xim_preediting' is always FALSE for other methods (Root, OffTheSpot,
            > > > OverTheSpot).
            > > > Currently only OnTheSpot can know current language mode.
            > >
            > > I don't quite understand these changes. It mostly looks like renaming
            > > im_get_status() to im_native_lang_input_mode(). But the difference between
            > > the im_get_status(), which now only checks "xim_has_focus", and
            > > im_native_lang_input_mode(), which only uses "xim_preediting" escapes
            > > me. Why not one function that says whether non-English input mode is
            > > active? This can be used both for 'iminsert', the cursor shape/color
            > > and the status line. What is the real difference between
            > > "xim_preediting" and "xim_has_focus"?
            >
            > if xim_has_focus == 1, it means vim connect to XIM.
            >
            > if xim_preediting == 1, it means the current input language is native.
            > And vim connect to XIM (xim_has_focus = 1).
            >
            > if xim_preediting == 0, it means the current input language is english.
            > And vim connect to XIM (Insert Mode) or not (Normal mode).
            >
            > Previous: im_get_status() always return False for
            > Root/OffTheSpot/OverTheSpot because 'xim_preeditng' is updated only for
            > OnTheSpot.

            Are the above correct when not use OnTheSpot then? It seems that when using
            one of the other metheds, xim_preediting doesn't matter, thus xim_has_focus
            has to be used to decide if the user was typing English or not.

            Something like:

            im_get_status()
            {
            if (using OnTheSpot)
            return xim_preediting && xim_has_focus;
            else
            return xim_has_focus;
            }

            Would that work correctly?

            > And though user use OnTheSpot, if user change input language
            > to English while connecting XIM, im_get_status() returns False.
            > So, if user go to Normal mode while in english input mode, VIM saves
            > imi=0. And after that, VIM does not connect to XIM when user enters
            > Insert mode.

            That's correct. This is what was intended that should happen.

            One problem might be that there is no way to connect to XIM again when already
            in Insert mode. Perhaps in OnTheSpot method we should always connect to XIM
            but set it to use English mode when 'iminsert' is zero? I don't know how to
            do this though.

            > About im_native_lang_input_mode() (with CursorIM), I think it is not
            > important to user that VIM uses IM or not. But user want to see current
            > input language mode via Cursor color.

            I think it should be consistent. If the cursor color shows using IM then the
            mode message should do the same.

            --
            Violators can be fined, arrested or jailed for making ugly faces at a dog.
            [real standing law in Oklahoma, United States of America]

            /// Bram Moolenaar -- Bram@... -- http://www.moolenaar.net \\\
            ((( Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim )))
            \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///
          • Nam SungHyun
            ... Only OnTheSpot can detect current language (Using preedit callback). The other method cannot detect current language now. I guess Muraoka mentioned about
            Message 5 of 7 , Jun 20, 2001
            • 0 Attachment
              Bram Moolenaar wrote:
              >
              > Nam SungHyun wrote:
              >
              > > > > > If the 'iminsert' option itself changes value, this probably
              > > > > > happens by im_save_status(). It is called in ins_esc() in
              > > > > > edit.c.
              > > > >
              > > > > I figured out why it happens. im_get_status() should not check
              > > > > 'xim_preediting'. While connecting to XIM, user can change the
              > > > > language (English or Native). In english input mode,
              > > > > 'xim_preediting' is FALSE for OnTheSpot. 'xim_preediting' is
              > > > > always FALSE for other methods (Root, OffTheSpot, OverTheSpot).
              > > > > Currently only OnTheSpot can know current language mode.
              > > >
              > > > I don't quite understand these changes. It mostly looks like
              > > > renaming im_get_status() to im_native_lang_input_mode(). But the
              > > > difference between the im_get_status(), which now only checks
              > > > "xim_has_focus", and im_native_lang_input_mode(), which only uses
              > > > "xim_preediting" escapes me. Why not one function that says
              > > > whether non-English input mode is active? This can be used both
              > > > for 'iminsert', the cursor shape/color and the status line. What
              > > > is the real difference between "xim_preediting" and
              > > > "xim_has_focus"?
              > >
              > > if xim_has_focus == 1, it means vim connect to XIM.
              > >
              > > if xim_preediting == 1, it means the current input language is native.
              > > And vim connect to XIM (xim_has_focus = 1).
              > >
              > > if xim_preediting == 0, it means the current input language is english.
              > > And vim connect to XIM (Insert Mode) or not (Normal mode).
              > >
              > > Previous: im_get_status() always return False for
              > > Root/OffTheSpot/OverTheSpot because 'xim_preeditng' is updated only for
              > > OnTheSpot.
              >
              > Are the above correct when not use OnTheSpot then? It seems that when using
              > one of the other metheds, xim_preediting doesn't matter, thus xim_has_focus
              > has to be used to decide if the user was typing English or not.

              Only OnTheSpot can detect current language (Using preedit callback).
              The other method cannot detect current language now. I guess
              Muraoka mentioned about this before.

              > Something like:
              >
              > im_get_status()
              > {
              > if (using OnTheSpot)
              > return xim_preediting && xim_has_focus;
              > else
              > return xim_has_focus;
              > }
              >
              > Would that work correctly?

              If you don't like my patch, then how about just do

              im_get_status()
              {
              return xim_has_focus;
              }

              Then, at least VIM can always connect to XIM. Though the ColorIM is not
              usable.

              > > And though user use OnTheSpot, if user change input language
              > > to English while connecting XIM, im_get_status() returns False.
              > > So, if user go to Normal mode while in english input mode, VIM saves
              > > imi=0. And after that, VIM does not connect to XIM when user enters
              > > Insert mode.
              >
              > That's correct. This is what was intended that should happen.

              I found ONE more problem. VIM does not connect to XIM when I typed ':'.

              > One problem might be that there is no way to connect to XIM again when already
              > in Insert mode. Perhaps in OnTheSpot method we should always connect to XIM
              > but set it to use English mode when 'iminsert' is zero? I don't know how to
              > do this though.
              >
              > > About im_native_lang_input_mode() (with CursorIM), I think it is not
              > > important to user that VIM uses IM or not. But user want to see current
              > > input language mode via Cursor color.
              >
              > I think it should be consistent. If the cursor color shows using IM
              > then the mode message should do the same.

              There already exists in-consistent. Win32 version always connect to IM
              server. X version does not always connect to XIM. Because of this
              reason, I believe my patch is a good solution at this time.

              I think The problem is VIM try to select language automatically, and
              XIM does not like it.

              Regards,
              namsh
            • Bram Moolenaar
              ... OK, thus the value of xim_preediting is invalid when not use the OnTheSpot method. ... I was trying to find a way to do it correctly in all situations.
              Message 6 of 7 , Jun 21, 2001
              • 0 Attachment
                Nam SungHyun wrote:

                > > Are the above correct when not use OnTheSpot then? It seems that when
                > > using one of the other metheds, xim_preediting doesn't matter, thus
                > > xim_has_focus has to be used to decide if the user was typing English or
                > > not.
                >
                > Only OnTheSpot can detect current language (Using preedit callback).
                > The other method cannot detect current language now. I guess
                > Muraoka mentioned about this before.

                OK, thus the value of xim_preediting is invalid when not use the OnTheSpot
                method.

                > > Something like:
                > >
                > > im_get_status()
                > > {
                > > if (using OnTheSpot)
                > > return xim_preediting && xim_has_focus;
                > > else
                > > return xim_has_focus;
                > > }
                > >
                > > Would that work correctly?
                >
                > If you don't like my patch, then how about just do
                >
                > im_get_status()
                > {
                > return xim_has_focus;
                > }
                >
                > Then, at least VIM can always connect to XIM. Though the ColorIM is not
                > usable.

                I was trying to find a way to do it correctly in all situations. This
                requires that we are able to know whether the OnTheSpot method is being used
                or not. When it is used, we can check the value of xim_preediting. When it
                is not used, we should just use xim_has_focus.

                The next thing to do is find some way to enable XIM from Insert mode when it
                was disabled by 'iminsert' being zero. With CTRL-^ it's possible to switch
                langmap on/off. Perhaps some other command should switch XIM on/off?

                However, when using OnTheSpot, the switching can be done inside XIM. Thus we
                should always connect to XIM and use 'iminsert' to set the mode to English or
                language. This requires being able to detect OnTheSpot method and setting the
                mode.

                > I found ONE more problem. VIM does not connect to XIM when I typed ':'.

                I think that's the same problem as in Insert mode. For a ":" command line you
                are expected to start typing a range and a command name. Thus you always
                start in English mode. But further on you might want to type something in
                your language. Then we need some command to switch XIM on.

                > > I think it should be consistent. If the cursor color shows using IM
                > > then the mode message should do the same.
                >
                > There already exists in-consistent. Win32 version always connect to IM
                > server. X version does not always connect to XIM. Because of this
                > reason, I believe my patch is a good solution at this time.
                >
                > I think The problem is VIM try to select language automatically, and
                > XIM does not like it.

                It's not easy, but hopefully we manage to make it work and make users happy!

                --
                The chat program is in public domain. This is not the GNU public license.
                If it breaks then you get to keep both pieces.
                -- Copyright notice for the chat program

                /// Bram Moolenaar -- Bram@... -- http://www.moolenaar.net \\\
                ((( Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim )))
                \\\ Help me helping AIDS orphans in Uganda - http://iccf-holland.org ///
              • Nam SungHyun
                ... It seems you don t understand correctly? If the switching means the language mode, then the other method is same. The switching can be done inside XIM.
                Message 7 of 7 , Jun 21, 2001
                • 0 Attachment
                  Bram Moolenaar wrote:
                  >
                  > Nam SungHyun wrote:
                  >
                  > > > Are the above correct when not use OnTheSpot then? It seems that when
                  > > > using one of the other metheds, xim_preediting doesn't matter, thus
                  > > > xim_has_focus has to be used to decide if the user was typing English or
                  > > > not.
                  > >
                  > > Only OnTheSpot can detect current language (Using preedit callback).
                  > > The other method cannot detect current language now. I guess
                  > > Muraoka mentioned about this before.
                  >
                  > OK, thus the value of xim_preediting is invalid when not use the OnTheSpot
                  > method.
                  >
                  > > > Something like:
                  > > >
                  > > > im_get_status()
                  > > > {
                  > > > if (using OnTheSpot)
                  > > > return xim_preediting && xim_has_focus;
                  > > > else
                  > > > return xim_has_focus;
                  > > > }
                  > > >
                  > > > Would that work correctly?
                  > >
                  > > If you don't like my patch, then how about just do
                  > >
                  > > im_get_status()
                  > > {
                  > > return xim_has_focus;
                  > > }
                  > >
                  > > Then, at least VIM can always connect to XIM. Though the ColorIM is not
                  > > usable.
                  >
                  > I was trying to find a way to do it correctly in all situations. This
                  > requires that we are able to know whether the OnTheSpot method is being used
                  > or not. When it is used, we can check the value of xim_preediting. When it
                  > is not used, we should just use xim_has_focus.
                  >
                  > The next thing to do is find some way to enable XIM from Insert mode when it
                  > was disabled by 'iminsert' being zero. With CTRL-^ it's possible to switch
                  > langmap on/off. Perhaps some other command should switch XIM on/off?
                  >
                  > However, when using OnTheSpot, the switching can be done inside XIM.

                  It seems you don't understand correctly?
                  If 'the switching' means the language mode, then the other method is
                  same. The switching can be done inside XIM. But VIM cannot know the
                  language mode for the other method.

                  > Thus we should always connect to XIM and use 'iminsert' to set the
                  > mode to English or language. This requires being able to detect
                  > OnTheSpot method and setting the mode.
                  >
                  > > I found ONE more problem. VIM does not connect to XIM when I typed ':'.
                  >
                  > I think that's the same problem as in Insert mode. For a ":" command line you
                  > are expected to start typing a range and a command name. Thus you always
                  > start in English mode. But further on you might want to type something in
                  > your language. Then we need some command to switch XIM on.
                  >
                  > > > I think it should be consistent. If the cursor color shows using IM
                  > > > then the mode message should do the same.

                  Because VIM cannot know the language mode for 'the other method',
                  I prefer VIM works like as before (VIM 6.0aj) for XIM version.
                  How about not define 'USE_IM_CONTROL(?)' for FEAT_XIM?

                  > > There already exists in-consistent. Win32 version always connect to IM
                  > > server. X version does not always connect to XIM. Because of this
                  > > reason, I believe my patch is a good solution at this time.
                  > >
                  > > I think The problem is VIM try to select language automatically, and
                  > > XIM does not like it.
                  >
                  > It's not easy, but hopefully we manage to make it work and make users happy!

                  Regards,
                  namsh
                Your message has been successfully submitted and would be delivered to recipients shortly.