[Openmcl-devel] untitled cocoa windows problem

Arthur Cater arthur.cater at ucd.ie
Sat Feb 25 12:16:51 PST 2012

I have a MacBook Pro os10.6.8,
" Welcome to Clozure Common Lisp Version 1.7-r15184M  (DarwinX8664)!"

I'm having trouble with subclassing ns-document. The code below exemplifies.
When a Hemlock view is created using   (my nil)   it is unexceptional, but
when created with   (my t)   there is a problem. In this case, the document of the
window of the view is made to be of subclass ns::my-document, which has no
special methods and no extra slots.

When such a view is made, then closed, and another one made, an error appears
in AltConsole to the effect that there is already a buffer named "Untitled 2".
This does not happen when the document's class is left untouched.

Incidentally, while searching ccl sources, I came upon something that suggested
a similar phenomenon might happen with Listener windows, and it does but for a quite
different reason. Open a new listener, close the first one, open another new listener - bang!
The listener case is caused by incrementing and decrementing a counter that is used
to choose new names. I do not understand what is causing the problem with my
subclassed documents, and would really appreciate help.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: cutdown.lisp
Type: application/octet-stream
Size: 927 bytes
Desc: not available
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20120225/0649079e/attachment.obj>
-------------- next part --------------
     contents included below ...

(in-package hemlock)

;;; Scratch windows' documents have their ns:isa slots reset
(defclass ns::my-ns-document (ns:ns-document)
         (:metaclass ns:+ns-object))
(declaim (special ns::my-ns-document))

(defun cl-user::my (&optional (scratch-p t))
   (lambda nil
     (let* ((hview (gui::find-or-make-hemlock-view nil))
            (buffer (hemlock-view-buffer hview))
            (window (#/window (hi::hemlock-view-pane hview)))
            (wc (#/windowController window))
            (document (#/document wc))
            (stream (hi:make-hemlock-output-stream (buffer-end-mark buffer) :none)))
       ; All possible values {:none, :line, :full} have identical effect)
       (#/setTitle: window (objc::make-nsstring (copy-seq "My title")))
       (when scratch-p
         (setf (slot-value document 'ns:isa) (find-class 'ns::my-ns-document)))
       (format stream "A change~%")))))

More information about the Openmcl-devel mailing list