diff options
| -rw-r--r-- | curses/ScintillaCurses.cxx | 24 | ||||
| -rw-r--r-- | curses/ScintillaCurses.h | 16 |
2 files changed, 20 insertions, 20 deletions
diff --git a/curses/ScintillaCurses.cxx b/curses/ScintillaCurses.cxx index 619e5bd90..d3ad4ad20 100644 --- a/curses/ScintillaCurses.cxx +++ b/curses/ScintillaCurses.cxx @@ -1416,19 +1416,21 @@ public: } } /** - * Copies the text of the internal clipboard, not the primary and/or secondary - * X selections, into the given buffer and returns the size of the clipboard - * text. - * @param text The buffer to copy clipboard text to. - * @return size of the clipboard text + * Returns a NUL-terminated copy of the text on the internal clipboard, not + * the primary and/or secondary X selections. + * The caller is responsible for `free`ing the returned text. + * @param len An optional pointer to store the length of the returned text in. + * @return clipboard text */ - int GetClipboard(char *buffer) { - if (buffer) memcpy(buffer, clipboard.Data(), clipboard.Length() + 1); - return clipboard.Length() + 1; + char *GetClipboard(int *len) { + if (len) *len = clipboard.Length(); + char *text = new char[clipboard.Length() + 1]; + memcpy(text, clipboard.Data(), clipboard.Length() + 1); + return text; } }; -// Link with C. Documentation in Scintilla.h. +// Link with C. Documentation in ScintillaCurses.h. extern "C" { void *scintilla_new( void (*callback)(void *, int, SCNotification *, void *), void *userdata) @@ -1468,8 +1470,8 @@ bool scintilla_send_mouse( return (scicurses->MouseRelease(time, y, x, ctrl), true); return false; } -int scintilla_get_clipboard(void *sci, char *buffer) { - return reinterpret_cast<ScintillaCurses *>(sci)->GetClipboard(buffer); +char *scintilla_get_clipboard(void *sci, int *len) { + return reinterpret_cast<ScintillaCurses *>(sci)->GetClipboard(len); } void scintilla_noutrefresh(void *sci) { reinterpret_cast<ScintillaCurses *>(sci)->NoutRefresh(); diff --git a/curses/ScintillaCurses.h b/curses/ScintillaCurses.h index d00e98392..b20c52ffd 100644 --- a/curses/ScintillaCurses.h +++ b/curses/ScintillaCurses.h @@ -69,18 +69,16 @@ bool scintilla_send_mouse( void *sci, int event, unsigned int time, int button, int y, int x, bool shift, bool ctrl, bool alt); /** - * Copies the text of Scintilla's internal clipboard, not the primary and/or - * secondary X selections, into the given buffer and returns the size of the - * clipboard text. - * Call with a `null` buffer first to get the size of the buffer needed to store - * clipboard text. - * Keep in mind clipboard text may contain null bytes. + * Returns a NUL-terminated copy of the text on Scintilla's internal clipboard, + * not the primary and/or secondary X selections. + * The caller is responsible for `free`ing the returned text. + * Keep in mind clipboard text may contain NUL bytes. * Curses does not have to be initialized before calling this function. * @param sci The Scintilla window returned by `scintilla_new()`. - * @param buffer The buffer to copy clipboard text to. - * @return size of the clipboard text. + * @param len An optional pointer to store the length of the returned text in. + * @return the clipboard text. */ -int scintilla_get_clipboard(void *sci, char *buffer); +char *scintilla_get_clipboard(void *sci, int *len); /** * Refreshes the Scintilla window on the virtual screen. * This should be done along with the normal curses `noutrefresh()`, as the |
