                                maxcol)
                  (length table)))
          ret)
-    (while (plusp ncol)
+    (while (cl-plusp ncol)
       (catch 'exit
-        (setq cw (loop repeat ncol collect (loop repeat nsubcol collect 0)))
+        (setq cw (cl-loop repeat ncol collect (cl-loop repeat nsubcol collect 0)))
         ;; lay down
         (let ((row 0)
               (col 0)

        (rest (log4slime-logger-rest info))
        (package-offset (log4slime-package-offset info)))
    `(:package ,package :file ,file :rest ,rest :package-offset ,package-offset
               :root ,(getf info :root))))

(defun log4slime-logger-type (info)
  "Figure out type of INFO logger, return :root/package/file/function"
  (cond ((getf info :root)
         :root)
        ((and (getf info :file) (not (getf info :rest)))
         :file)
        ((getf info :rest)
         :function)
        (t :package)))

(defun log4slime-make-keys-string (info-symbol level)
  "Return a string describing keyboard shortcut"
  (let* ((1st-level-char
          (ecase info-symbol
            (log4slime-root-logger (nth 0 log4slime-logger-keys))
            (log4slime-package-logger (nth 1 log4slime-logger-keys))
            (log4slime-file-logger (nth 2 log4slime-logger-keys))

      :active ,C
      :filter log4slime-filter-top
      ("+ROOT+" :filter log4slime-filter-root
       ,@(cl-rest (log4slime-make-levels-menu 'log4slime-root-logger t t)))
      ("Package" :filter log4slime-filter-package
       ,@(cl-rest (log4slime-make-levels-menu 'log4slime-package-logger)))
      ("Source File" :filter log4slime-filter-file
       ,@(cl-rest (log4slime-make-levels-menu 'log4slime-file-logger)))
      ("Defun" :filter log4slime-filter-defun
       ,@(cl-rest (log4slime-make-levels-menu 'log4slime-defun-logger))))))

(defun log4slime-filter-root (args)
  ;; (message "log4slime-filter-root called")
