Since I'm not familiar with Emacs' source code and the ideas, I find it difficult to write the patch code that has fewer duplicates, covers all corner cases, and is easy to maintain. So, I decided not to write this code. But I'm sure the resize and move functions can solve the issue that I mentioned in my first email, based on my tests. By the way, I suggest naming the function to add as `set-frame-position-and-size' instead of `set-frame-size-and-position', because most underlying APIs are called xxx_move_resize_xxx: `gdk_window_move_resize' (GTK), `XMoveResizeWindow' (X11), `MoveWindow(hWnd, X, Y, nWidth, nHeight, bRepaint)' (Windows). martin rudalics 于2023年8月13日周日 08:21写道: > > But there is one thing that I don't know what the best solution is: how > to > > reuse the code > > in the function `adjust_frame_size' (defined in src/frame.c, used by > > `set-frame-size')? > > I want to add two arguments: `new_x' and `new_y'. When `new_x' and > `new_y' > > are the > > same with the current frame position, > > ... with GNOME/mutter it's hard to tell but that shouldn't bother us > here ... > > > execute the original branch > > (`set_window_size_hook' > > or `resize_frame_window'); otherwise, call a move and resize function. > > But I have to rename this function to `adjust_frame_position_and_size'. > For > > compatibility, > > Alternatively you could put new_x and new_y together with an identifier > (say 'size_and_position') into PARAMETER and extract them before running > the hook. INHIBIT would be 1 anyway, so frame_inhibit_resize is of no > concern here. > > > I will also create a wrapper function called `adjust_frame_size', in > which > > `adjust_frame_position_and_size' is called with the current frame > position > > as the last two args > > This is the crucial point - rewriting all those adjust_frame_size calls > would be a great pain. > > > so that the frame will be only resized but not moved. > > Do you think this is an appropriate solution? > > I think so, yes. > > Before coding other backends of set_window_size_hook make sure that the > code gives the desired results on your own system to avoid writing them > without any gain. > > martin >