Index: main/grid/display.lisp
===================================================================
--- main/grid/display.lisp	(revision main,22)
+++ main/grid/display.lisp	(revision main,26)
@@ -81,6 +81,9 @@
 
 (defun draw-cell (grid row column y x)
-  (with-slots (window) grid
-    (cdk::move-and-add-string window y x (item grid row column))))
+  (with-slots (data window) grid
+    (let ((text (item data row column)))
+      (unless (uses-display-strings data row column)
+        (setf text (enquote text)))
+      (render text window y x))))
 
 (defun draw-column (grid column x)
Index: main/grid/model.lisp
===================================================================
--- main/grid/model.lisp	(revision main,22)
+++ main/grid/model.lisp	(revision main,26)
@@ -36,2 +36,8 @@
 column COLUMN.  ROW and COLUMN refer to data rows and columns, not
 character or text rows and columns.  Rows and columns are zero-based."))
+
+(defgeneric uses-display-strings (grid-data row column)
+  (:documentation
+   "Returns T if the item uses display-strings, or at least has
+already been properly escaped.")
+  (:method (grid-data row column)))
Index: main/grid/package.lisp
===================================================================
--- main/grid/package.lisp	(revision main,22)
+++ main/grid/package.lisp	(revision main,26)
@@ -1,4 +1,4 @@
 (defpackage #:grid
-  (:use #:cl #:dso-util)
-  (:export #:rows #:columns #:item #:row-scroll #:column-scroll #:make-grid
-           #:draw))
+  (:use #:cl #:display-string #:dso-util)
+  (:export #:rows #:columns #:item #:uses-display-strings #:row-scroll
+           #:column-scroll #:make-grid #:draw))
Index: main/grid/test.lisp
===================================================================
--- main/grid/test.lisp	(revision main,22)
+++ main/grid/test.lisp	(revision main,26)
@@ -18,9 +18,12 @@
   (cond
     ((= row 0)
-     (string (aref "*ABCDEFGHI" column)))
+     (concatenate 'string "`B`U " (string (aref "*ABCDEFGHI" column)) " `u`b"))
     ((= column 0)
-     (format nil "~A" row))
+     (format nil " `B~A`b " row))
     (t
-     (format nil "~A,~A" row column))))
+     (format nil (if (= row column 2) "`R~A,~A`r" "~A,~A") row column))))
+
+(defmethod uses-display-strings ((gd test) row column)
+  t)
 
 
@@ -35,5 +38,5 @@
     (with-screen (screen)
       (clear screen)
-      (with-der-window (window screen 5 17 0 0)
+      (with-der-window (window screen 5 16 0 0)
         (let ((grid (make-grid window data widths :header-columns 1 :header-rows 1)))
           (flet ((try (i)
