[Openmcl-devel] Alternative parens

Glen Foy lisp at clairvaux.org
Fri Apr 26 12:23:57 PDT 2013


Bracket highlighting would be easy to get.  You could make these two mods in update-paren-highlight (cocoa-editor.lisp):

        ;; *** mod:
        (cond ((or (eql (hi::next-character point) #\()
                   (eql (hi::next-character point) #\[))

         ;; *** mod:
              ((or (eql (hi::previous-character point) #\))
                   (eql (hi::previous-character point) #\]))

To do evaluation with brackets you could do char substitution, parens for brackets, before sending the string returned by region-to-string to CCL for evaluation.  That would be in hemlock::eval-region (listener.lisp).

The other problem sounds like a lot of work.  

-- Glen

On Apr 26, 2013, at 12:53 PM, Ron Garret <ron at flownet.com> wrote:

> On my system, C-M doesn't do anything:
> 
> ? (hi::get-command #k"C-M" :mode "editor")
> NIL
> 
> But I'm a mouser, not an emacser, so that's not really what I care about.  What I want is matching-paren highlighting and editor-eval-sexpr to work.  Double-clicking on a close-bracket to highlight a sexpr would be nice too.
> 
> Actually, what I *really* want is not to use brackets as parens (though that would be nice too) but for «balanced quotes» to work.  I have reader macros for balanced quotes that do the Right Thing.  I use them to embed code written in other languages, mainly Javascript.  This way, if there is a double quote in the embedded string I don't have to escape it.  The problem is that if there's a semicolon in the embedded string, Hemlock treats it as a Lisp comment because it doesn't know it's inside a string.  If there's an unbalanced paren after the semicolon, that throws off paren matching, e.g.:
> 
> (defvar *js-template* «
> 
> var s = "foo";  // Using balanced quotes means you don't need to escape double quotes in the embedded string
> function foo() {
>  for (var i=1; i<10; i++) ...;   // Hemlock misinterprets on this line and screws up syntax highlighting
> }
> 
> »)
> 
> Here's the balanced quote reader code in case you want to play around with this:
> 
> (defun make-string-reader (c1 c2)
>  (lambda (stream c)
>    (declare (ignore c))
>    (with-output-to-string (s)
>      (loop for c = (read-char stream)
>        with cnt = 1
>        if (eql c c1) do (incf cnt)
>        else if (eql c c2) do (decf cnt)
>        until (and (eql c c2) (eql cnt 0))
>        do (princ c s)))))
> 
> (set-macro-character #\« (make-string-reader #\« #\»))
> 
> rg
> 
> 
> On Apr 26, 2013, at 6:55 AM, Glen Foy wrote:
> 
>> This works once you define the character attributes:
>> 
>> With point at the start the form shown below, C-M f will move point to the end of the form, and then C-M b will move you back to the start:
>> 
>> [foo [bar]]                                                                                               [foo [bar]]
>> ^                                                                                                                               ^
>> 
>> If the attributes are not defined, C-M f will move you to the end of 'foo':
>> 
>>                                                                                                                 [foo [bar]]
>>                                                                                                                       ^
>> 
>> The nested form also seems to work appropriately when the attributes are defined. The "Forward Form" command calls the basic hemlock function, hemlock::form-offset.
>> 
>> What functionality are you not getting?
>> 
>> -- Glen
>> 
>> On Apr 25, 2013, at 8:44 PM, Ron Garret <ron at flownet.com> wrote:
>> 
>>> Looking at the code in
>>> 
>>> cocoa-ide/hemlock/src/defsyn.lisp
>>> 
>>> it would appear that if one did, e.g.:
>>> 
>>> (setf (hi::character-attribute :lisp-syntax #\[) :open-paren)
>>> (setf (hi::character-attribute :lisp-syntax #\]) :close-paren)
>>> 
>>> that the editor should then treat square-bracketed expressions the same as paren-bracketed ones.  But it doesn't seem to work.  What is the right way to get Hemlock to recognize other kinds of balanced delimiters?
>>> 
>>> Thanks,
>>> rg
>>> 
>>> _______________________________________________
>>> Openmcl-devel mailing list
>>> Openmcl-devel at clozure.com
>>> http://clozure.com/mailman/listinfo/openmcl-devel
>> 
>> _______________________________________________
>> Openmcl-devel mailing list
>> Openmcl-devel at clozure.com
>> http://clozure.com/mailman/listinfo/openmcl-devel
> 




More information about the Openmcl-devel mailing list