Home-grown "editor"
Unable to parse email body. Email id is 7705
Unable to parse email body. Email id is 7705
Hello Edi,
| 3. The "Undo" command doesn't seem to work as expected. It only
| performs one undo operation and then reverts it. I'd like to have
| the behaviour (C-x u) I have in the normal CAPI editor. What am I
| doing wrong?
I think you need a bit more than just the standard "Undo". The following
works for me:
(editor:defcommand "Grid Undo" (p) "" ""
(let ((pane (editor::current-editor-pane)))
(if (ywi:undo-buffer-empty-p (capi:editor-pane-buffer pane))
(let ((grid (capi:element-interface pane)))
(%revert-cell grid (current-record grid) (current-column grid))
(beep))
(editor:undo-command p))))
(defun undo-buffer-empty-p (buffer)
;;; Test whether the editor "Undo" command will do nothing
;; Use the accessor EDITOR::BUFFER-UNDO to get the undo slot of the editor
buffer.
;; The value is usually an object of type SYSTEM:RING (but can be NIL
initially).
;; Args: buffer - editor's buffer.
;; Value: True iff the "Undo" command will do nothing
(let ((undo (EDITOR::BUFFER-UNDO buffer)))
(if (sys:ringp undo)
(let ((bound (sys::ring-bound undo)))
(or (minusp bound) (= (sys::ring-v-pop undo) bound)))
t)))
--
Sincerely,
Dmitriy Ivanov
lisp.ystok.ru
On Feb 13, 2008, at 4:08 AM, Edi Weitz wrote:
> 1. I only want to enable the "Cut" and "Paste" menu entries when
> there's actually somthing to cut or paste. Is REGION-ACTIVE-P the
> right way to do that?
>
> And if it is, is there a way to make sure that the active region is
> always highlighted when there is one?
(defmethod edit-cut-enabled ((pane editor-pane))
(or (and (editor:buffer-writable (editor-pane-buffer pane)) (editor-
pane-selected-text-p pane))
(echo-selected-text-p pane)))
Before you even get to this, you need to ensure your editor pane has
the focus. It gets more complicated when your interface has a mixture
of editor panes and text fields. I have several levels of edit-cut-
enabled methods that start at the interface level and filters down
based on what pane has the focus.
> 2. Is the test which enables the "Paste" menu entry (which checks the
> clipboard) the right one?
I'm not doing that, but have a note that I should be :).
> 3. The "Undo" command doesn't seem to work as expected. It only
> performs one undo operation and then reverts it. I'd like to have
> the behaviour (C-x u) I have in the normal CAPI editor. What am I
> doing wrong?
I think this is all I'm doing and I get multiple-undo. I have not
implemented a "Redo" option.
(defmethod edit-undo ((pane editor-pane))
(editor-or-echo-cmd pane 'editor:undo-command))
(defmethod edit-undo-enabled ((pane editor-pane))
(let ((buffer (editor-pane-buffer pane)))
(or (and (editor:buffer-modified buffer) (editor:buffer-writable
buffer))
(echo-pane-active pane))))
John DeSoi, Ph.D.
On Wed, 13 Feb 2008 12:13:22 -0500, John DeSoi <desoi@pgedit.com> wrote: > (editor-pane-selected-text-p pane) D'oh! I knew there was something I had forgotten... Yes, that gives me the behaviour I want. > (editor-or-echo-cmd pane 'editor:undo-command)) That's interesting. There seems to be a difference between calling PROCESS-CHARACTER with the string "Undo" (which is supposed to call UNDO-COMMAND) or with the symbol EDITOR:UNDO-COMMAND. If I do the latter, it works as expected. Thanks, Edi.
On Wed, 13 Feb 2008 18:55:44 +0100, Edi Weitz <edi@agharta.de> wrote:
>> (editor-or-echo-cmd pane 'editor:undo-command))
>
> That's interesting. There seems to be a difference between calling
> PROCESS-CHARACTER with the string "Undo" (which is supposed to call
> UNDO-COMMAND) or with the symbol EDITOR:UNDO-COMMAND. If I do the
> latter, it works as expected.
Er, no, that was nonsense. The real culprit was that I was too
careful[1] and wrapped the call to EDITOR:BUFFER-MODIFIED which
checked if the "Undo" menu item should be enabled with the notorious
EDITOR:PROCESS-CHARACTER. If I call the function directly instead,
the issue goes away. Whether the undo command is called as "Undo" or
as EDITOR:UNDO-COMMAND doesn't make a difference.
Sorry for the confusion,
Edi.
[1] See also
http://thread.gmane.org/gmane.lisp.lispworks.general/7513