Issue #25 resolved

make-frameされたフレームのカーソル位置が元のバッファのカーソル位置と違うことがある

Anonymous created an issue

== 再現方法 ==

xyzzyを実行する

scratchバッファに"abc"と入力

M-x split-window (ウィンドウを上下分割)

M-x other-window (複製したバッファに移動)

M-x begging-of-line (カーソル位置を先頭に移動)

M-x make-frame (フレーム複製)

== 期待する動作 == カーソル位置が先頭であること

== 実際の動作 == カーソル位置が一番最後

== 再現バージョン == 0.2.3.6

Comments (4)

  1. xyzzy_17_638

    新しいフレームを作る前に、カレントの Window について、 Buffer::b_point が保存されていないのが原因のように見えます。

    Buffer::b_point の保存は Window::save_buffer_params() で行っているので、init_app() で新しいウィンドウを作る際に

    // init.cc
    int
    init_app(HINSTANCE hinst, ApplicationFrame* app1, ApplicationFrame* parent)
    {
    ...
      app1->modeline_param.init (HFONT (SendMessage (app1->hwnd_sw, WM_GETFONT, 0, 0)));
    
    + if (parent)
    +   {
    +     Window* window = selected_window (parent);
    +     if (window)
    +       {
    +         window->save_buffer_params ();
    +       }
    +   }
    
      if (!init_editor_objects (app1, selected_buffer(parent)))
        return 0;
    ...
    }
    

    のようにすると、動作が期待通りになるようです。

    Window::save_buffer_params() を呼び出す場所については、もっと良い場所があるかも。

  2. Log in to comment