Commit 924610fb authored by Pascal J. Bourguignon's avatar Pascal J. Bourguignon

Added support for MacOSX Terminal.app ; added generation of a MacOSX...

Added support for MacOSX Terminal.app ; added generation of a MacOSX application bundle (to be debugged).
parent 51ddb622
......@@ -551,6 +551,7 @@ http://archive-edutice.ccsd.cnrs.fr/docs/00/03/06/74/PDF/b38p116.pdf
http://fr.wikipedia.org/wiki/LSE_(langage_de_programmation)
http://admi.net/cgi-bin/wiki?LSE
-------------------------------
-------------
......
......@@ -9,12 +9,16 @@ DONE
====
- In cli, allow CR to work just like C-s
--> option: --entree-comme-xoff | --return-is-xoff
TODO
====
- formating documentation: dash lists items 2-n are indented and
should not.
- Make a #+clisp clisp-terminal using EXT:WITH-KEYBOARD-INPUT (and
perhaps SCREEN). Should work both on unix and MS-Windows.
......@@ -32,6 +36,8 @@ TODO
we have something to write, and it should be deactivated when we're
done writing, otherwise it goes CPU bound (polling).
make-writer-maker
#+(or lse-unix lse-t1600)
NOTES
......
......@@ -50,7 +50,7 @@ SYMLINK_CLI = awk '/Generating/{print $$2}' < $(LOGFILE) | ( read executable
SYMLINK_SERVER = awk '/Generating/{print $$2}' < $(LOGFILE) | ( read executable ; rm -f lse-server ; ln -sf $$executable lse-server )
CCL = ccl --no-init
CCL = /data/languages/ccl/bin/ccl --no-init
CCL_EVAL = --eval
CCL_LOAD = --load
......@@ -85,14 +85,19 @@ ChangeLog:../_FOSSIL_
help::
@printf $(HELPFORMAT) cli 'builds the unix cli executable on the local hosts.'
@printf $(HELPFORMAT) cli 'builds the unix cli executable.'
cli:
$(LISP) $(LOAD) generate-cli.lisp | tee $(LOGFILE)
$(SYMLINK_CLI)
help::
@printf $(HELPFORMAT) macosx 'builds the unix cli executable and the MacOSX application bundle.'
macosx:cli
$(MAKE) -C macosx
help::
@printf $(HELPFORMAT) server 'builds the server executable on the local hosts.'
@printf $(HELPFORMAT) server 'builds the server executable.'
server:
$(LISP) $(LOAD) generate-server.lisp | tee $(LOGFILE)
$(SYMLINK_SERVER)
......@@ -100,7 +105,7 @@ server:
help::
@printf $(HELPFORMAT) html-doc 'builds the html doc directory on the local hosts.'
@printf $(HELPFORMAT) html-doc 'builds the html doc directory.'
html-doc:
if [ $(UPLOAD) -ne 0 ] ; then \
$(LISP) $(EVAL) "(defparameter *doc-dir* \"$(UPLOAD_DOC_DIR)\")" \
......
0.124004275
\ No newline at end of file
0.06300415
\ No newline at end of file
......@@ -656,13 +656,14 @@ it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see http://www.gnu.org/licenses/
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public
License along with this program. If not, see
http://www.gnu.org/licenses/
")
......@@ -768,12 +769,9 @@ Description de la syntaxe des arguments:
(defchapter ("INTRODUCTION" "FONCTIONS")
"
Ce chapitre présente une description succinte des fonctions du
système L.S.E. Pour plus de détails, voir les références.
On inclu également les opérateurs. Les expressions peuvent combiner
plusieurs opérations et appels de fonctions. Voir la section
PRIORITE, pour l'ordre d'évaluation des opérateurs, lorsqu'ils ne sont
......@@ -785,7 +783,6 @@ chapitre, ou à des procédure fonctions déclarée dans le programme
ont un identificateur començant par un caractère '&'.
Chacune des sections suivantes décrivent une commande, selon le
format suivant:
......@@ -1281,15 +1278,16 @@ Voir: TERMINER, CO, RE, PO")
(definstruction ("TERMINER" "INSTRUCTIONS" "TERMINER")
"
#.(format nil "
L'instruction TERMINER arrête l'exécution du programme, et fait
afficher sur l'écran un message indiquant TERMINE "
#+(or lse-unix lse-t1600) "EN LIGNE nnn" "
afficher sur l'écran un message indiquant TERMINE ~A
Cette instruction est la dernière exécutée (ce n'est pas forcément la
dernière dans le programme).
Voir: PAUSE, CO, PO, RE, EX")
Voir: PAUSE, CO, PO, RE, EX"
#+(or lse-unix lse-t1600) "EN LIGNE nnn"
#-(or lse-unix lse-t1600) ""))
......
......@@ -488,6 +488,67 @@ manière interactive.
(setf *options* (configuration-interactive *options*)))
(defun configuration-interactive-macosx-terminal (options)
"
Configuration interactive when running in Terminal.app on MacOSX.
We have utf-8 and nasium-lse.terminal setup.
- we output and accept on input lower case letters,
- we output accented letters.
- TERM=xterm (so that we have UTF-8; with vt100, it seems to be only ASCII).
"
(let* ((task *task*)
(terminal (task-terminal task)))
(terpri *query-io*)
(setf (options-input-reject-lowcase options) nil)
(setf (options-output-upcase options) nil)
(setf (options-output-accented options) t)
(setf (options-output-arrows options)
(if (task-unicode task)
(cond
((o-ou-n-p "Est ce que le terminal affiche les flêches unicode demi-largeur ~A et ~A"
*UNICODE-HALFWIDTH-LEFTWARDS-ARROW*
*UNICODE-HALFWIDTH-UPWARDS-ARROW*)
:unicode-halfwidth)
((o-ou-n-p "Est ce que le terminal affiche les flêches unicode ~A et ~A"
*UNICODE-LEFTWARDS-ARROW*
*UNICODE-UPWARDS-ARROW*)
:unicode)
(t
:ascii))
:ascii))
(when (and (typep terminal 'unix-terminal)
(not (member (getenv "TERM") '("emacs" "dumb")
:test (function string-equal))))
(opt-format *query-io* "~%Choix du mode de saisie~%")
(loop
:for modern-mode :in '(nil t)
:for title :in '("MITRA-15/T1600" "Moderne")
:do (progn
(setf (terminal-modern-mode terminal) modern-mode)
(opt-format *query-io* "~%Mode ~A:" title)
(show-key-bindings *query-io* (task-terminal *task*))))
(terpri *query-io*)
(unless (setf (options-modern-mode options)
(o-ou-n-p "Faut-il utiliser le mode moderne"))
(setf (options-return-is-xoff options)
(o-ou-n-p "Faut-il traiter RETOUR comme X-OFF"))))
(terpri *query-io*))
options)
(defoption ("--configuration-macosx-terminal" "--macosx-terminal-configuration") ()
"
Permet d'effectuer la saisie des options de ligne de commande de
manière interactive, en pré-supposant l'usage avec Terminal.app et la
configuration nasium-lse.temrinal.
"
(setf *options* (configuration-interactive-macosx-terminal *options*)))
(defoption ("--montrer-touches" "--show-bindings") ()
"
Affiche les touches à utiliser.
......
......@@ -150,7 +150,7 @@ BONJOUR ~8A
:unicode (eql encoding :utf-8)
:arrows (if (eql encoding :utf-8)
:unicode-halfwidth
nil)
:ascii)
:terminal terminal)))
(setf *task* task) ; to help debugging, we keep the task in the global binding.
(or (parse-options (or args (arguments)))
......
......@@ -46,15 +46,18 @@
((#:albert #:docbook #:bgcolor) . "white")
((#:albert #:docbook #:textcolor) . "black"))
#+asdf-unicode :encoding #+asdf-unicode :utf-8
:depends-on (
:split-sequence
:alexandria
:babel
"split-sequence"
"alexandria"
"babel"
:com.informatimago.common-lisp
:com.informatimago.rdp
"com.informatimago.common-lisp"
"com.informatimago.rdp"
)
:components (
;; Some generic utility
(:file "logger")
......@@ -72,7 +75,8 @@
(:file "error" :depends-on ("packages"))
(:file "file" :depends-on ("packages"
"configuration" "error"))
"configuration" "error"
"functions"))
(:file "documentation" :depends-on ("packages"))
(:file "chapters" :depends-on ("packages" "version" "documentation"))
......
......@@ -46,22 +46,25 @@
((#:albert #:docbook #:bgcolor) . "white")
((#:albert #:docbook #:textcolor) . "black"))
#+asdf-unicode :encoding #+asdf-unicode :utf-8
:depends-on (
:terminfo
"terminfo"
:cffi
:uffi
"cffi"
;; "uffi
:trivial-gray-streams
"trivial-gray-streams"
#+(and unix (not clisp)) :iolib.base
#+(and unix (not clisp)) :iolib.os
#+(and unix (not clisp)) :iolib.syscalls
#+(and unix (not clisp)) :iolib.termios
#+(and unix (not clisp)) "iolib.base"
#+(and unix (not clisp)) "iolib.os"
#+(and unix (not clisp)) "iolib.syscalls"
#+(and unix (not clisp)) "iolib.termios"
:com.informatimago.common-lisp.unix
:com.informatimago.lse
"com.informatimago.common-lisp.unix"
"com.informatimago.lse"
)
:components (
(:file "patch-cffi-uffi")
......
......@@ -46,13 +46,16 @@
((#:albert #:docbook #:bgcolor) . "white")
((#:albert #:docbook #:textcolor) . "black"))
#+asdf-unicode :encoding #+asdf-unicode :utf-8
:depends-on (
;; :split-sequence
;; :alexandria
;; :babel
:com.informatimago.common-lisp
:com.informatimago.lse
;; "split-sequence
;; "alexandria
;; "babel
"com.informatimago.common-lisp"
"com.informatimago.lse"
)
:components ((:file "html-doc")))
......
......@@ -46,22 +46,25 @@
((#:albert #:docbook #:bgcolor) . "white")
((#:albert #:docbook #:textcolor) . "black"))
:depends-on (:split-sequence
:alexandria
:babel
#+asdf-unicode :encoding #+asdf-unicode :utf-8
:iolib.base
:iolib.os
:iolib.syscalls
:iolib
:depends-on ("split-sequence"
"alexandria"
"babel"
#+clisp :com.informatimago.clisp
#+clisp :com.informatimago.susv3
"iolib.base"
"iolib.os"
"iolib.syscalls"
"iolib"
:com.informatimago.common-lisp
:com.informatimago.common-lisp.unix
:com.informatimago.lse
#+clisp "com.informatimago.clisp"
#+clisp "com.informatimago.susv3"
"com.informatimago.common-lisp"
"com.informatimago.common-lisp.unix"
"com.informatimago.lse"
)
:components (
(:file "iolib-message" :depends-on ())
......
......@@ -46,12 +46,15 @@
((#:albert #:docbook #:bgcolor) . "white")
((#:albert #:docbook #:textcolor) . "black"))
#+asdf-unicode :encoding #+asdf-unicode :utf-8
:depends-on (
:split-sequence
;; :alexandria
;; :babel
:com.informatimago.common-lisp.cesarum
"split-sequence"
;; "alexandria
;; "babel
"com.informatimago.common-lisp.cesarum"
)
:components ((:file "manifest")))
......
......@@ -599,11 +599,11 @@ Voir la commande: AIDER"
t)))
((let ((chapters (find-chapter what)))
(flet ((print-chapter (chapter)
(io-format *task* "~2%~A ~A~%~V,,,'-<~>~2%"
(io-format *task* "~2%~A / ~A~%~V,,,'-<~>~2%"
(chapter-category chapter)
(chapter-title chapter)
(+ (length (chapter-title chapter))
1
3
(length (chapter-category chapter))))
(if (stringp (chapter-text chapter))
(write-documentation *task* (chapter-text chapter))
......@@ -1558,11 +1558,14 @@ absolu, ou relatif à l'ancien répertoire courant.
Voir les commandes AFFICHER REPERTOIRE, TABLE DES FICHIER, UTILISATION DISQUE."
(io-new-line *task*)
(when (and (stringp nouveau-repertoire)
(< 1 (length nouveau-repertoire)))
(unless (char= #\/ (aref nouveau-repertoire (1- (length nouveau-repertoire))))
(setf nouveau-repertoire (concatenate 'string nouveau-repertoire "/")))
(setf *current-directory* (change-directory *lse-root* *current-directory* nouveau-repertoire)))
;; Note: When we drag a directory to a terminal window on MacOSX, it
;; adds a space at the end automatically…
(let ((nouveau-repertoire (string-trim " " nouveau-repertoire)))
(when (and (stringp nouveau-repertoire)
(< 1 (length nouveau-repertoire)))
(unless (char= #\/ (aref nouveau-repertoire (1- (length nouveau-repertoire))))
(setf nouveau-repertoire (concatenate 'string nouveau-repertoire "/")))
(setf *current-directory* (change-directory *lse-root* *current-directory* nouveau-repertoire))))
(task-close-all-files *task*))
......
......@@ -393,7 +393,7 @@ L'argument A doit être un nombre positif ou nul, sinon une erreur est détecté
(let* ((a (deref *vm* a)) (result (sqrt (un-nombre a)))) (un-nombre result)))
(defun lgn (a)
(defunction lgn (a)
"Logarithme népérien"
"LGN(A)
......
......@@ -52,7 +52,8 @@
(make-instance 'asdf:compile-op)
(asdf:find-component (asdf:find-system system) component))))
(setf *default-pathname-defaults* (dirpath *load-truename*))
(setf *default-pathname-defaults* (dirpath (or *load-truename*
*compile-file-truename*)))
(pushnew *default-pathname-defaults* asdf:*central-registry* :test 'equal)
......@@ -76,6 +77,13 @@
(ql:quickload *program-system*)
(defparameter *versions* (com.informatimago.lse:versions))
(loop
:for version :in *versions*
:for file :in '("macosx/VERSION" "macosx/VERSION_SHORT" "macosx/VERSION_LONG")
:do (setf (com.informatimago.common-lisp.cesarum.file:text-file-contents file) version))
(ql:quickload :com.informatimago.manifest)
(shadow 'date)
(use-package "COM.INFORMATIMAGO.MANIFEST")
......@@ -95,13 +103,13 @@
(setf ccl:*backtrace-print-level* nil)
(test/fonctions :silence t)
(setf *debug-vm* t
(setf *debug-vm* '(:error)
*debug-repl* t)
(setf *debug-vm* nil
(setf *debug-vm* '()
*debug-repl* nil)
;;;---------------------------------------------------------------------
;;; Let's generate the target.
......@@ -110,8 +118,24 @@
(finish-output)
(write-manifest *program-name* *program-system*)
;; (in-package :ccl)
;; (defun reopen-user-libraries ()
;; (dolist (lib *shared-libraries*)
;; (setf (shlib.handle lib) nil
;; (shlib.base lib) nil))
;; (dolist (lib *shared-libraries*)
;; (when (shlib.soname lib)
;; (with-cstrs ((cname (shlib.soname lib)))
;; (let* ((handle (ff-call *dlopen-entry*
;; :address cname
;; :int (logior #$RTLD_GLOBAL #$RTLD_NOW)
;; :address)))
;; (unless (%null-ptr-p handle)
;; (setf (shlib.handle lib) handle)))))))
;; (in-package "COMMON-LISP-USER")
#+ccl (dolist (lib ccl::*shared-libraries* (terpri))
(print lib))
#+ccl (progn (princ "ccl:save-application will exit.") (terpri) (finish-output))
#+ccl (ccl:save-application
(executable-filename *program-name*)
......
......@@ -52,7 +52,8 @@
(make-instance 'asdf:compile-op)
(asdf:find-component (asdf:find-system system) component))))
(setf *default-pathname-defaults* (dirpath *load-truename*))
(setf *default-pathname-defaults* (dirpath (or *load-truename*
*compile-file-truename*)))
(pushnew *default-pathname-defaults* asdf:*central-registry* :test 'equal)
(defparameter *program-name* "lse")
......
......@@ -52,7 +52,8 @@
(make-instance 'asdf:compile-op)
(asdf:find-component (asdf:find-system system) component))))
(setf *default-pathname-defaults* (dirpath *load-truename*))
(setf *default-pathname-defaults* (dirpath (or *load-truename*
*compile-file-truename*)))
(pushnew *default-pathname-defaults* asdf:*central-registry* :test 'equal)
(defparameter *program-name* "lse-server")
......
......@@ -43,6 +43,8 @@
"COM.INFORMATIMAGO.IOLIB.MESSAGE"
"COM.INFORMATIMAGO.IOLIB.END-POINT"
"COM.INFORMATIMAGO.IOLIB.UTILS")
(:shadowing-import-from "COM.INFORMATIMAGO.COMMON-LISP.CESARUM.STRING"
"STRING-DESIGNATOR")
(:export "ENQUEUE-MESSAGE"
"+CLIENT-INPUT-BUFFER-SIZE+"
"CLIENT" "CLIENT-SERVER" "CLIENT-STATE" "CLIENT-SOCKET" "CLIENT-LOCAL-END-POINT"
......
......@@ -46,7 +46,8 @@
(make-instance 'asdf:compile-op)
(asdf:find-component (asdf:find-system system) component))))
(setf *default-pathname-defaults* (dirpath *load-truename*))
(setf *default-pathname-defaults* (dirpath (or *load-truename*
*compile-file-truename*)))
(pushnew *default-pathname-defaults* asdf:*central-registry* :test 'equal)
......
......@@ -413,14 +413,13 @@
;; we must keep references, and also for other expressions.
(--> expression
(alt
(seq terme-signe (rep (alt (seq tok-moins terme :action (list :moins terme))
(seq tok-plus terme :action (list :plus terme))
(seq tok-concat terme :action (list :concat terme)))
:action $1)
:action (if $2
(uncomb (cons terme-signe $2))
terme-signe)))
(seq terme-signe (rep (alt (seq tok-moins terme :action (list :moins terme))
(seq tok-plus terme :action (list :plus terme))
(seq tok-concat terme :action (list :concat terme)))
:action $1)
:action (if $2
(uncomb (cons terme-signe $2))
terme-signe))
:action $1)
;; Two signs cannot be adjacent: a*-b must be written a*(-b)
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>NASIUM-LSE</string>
<key>CFBundleExecutable</key>
<string>nasium-lse.sh</string>
<key>CFBundleIconFile</key>
<string>nasium-lse-application</string>
<key>CFBundleIdentifier</key>
<string>com.ogamita.nasium-lse</string>
<key>CFBundleVersion</key>
<string>{VERSION}</string>
<key>CFBundleGetInfoString</key>
<string>{LONG_VERSION}</string>
<key>CFBundleShortVersionString</key>
<string>{SHORT_VERSION}</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFile</key><string>nasium-lse-programme</string>
<key>CFBundleTypeName</key><string>Programme L.S.E.</string>
<key>CFBundleTypeExtensions</key><array><string>lse</string></array>
</dict>
<dict>
<key>CFBundleTypeIconFile</key><string>nasium-lse-ruban</string>
<key>CFBundleTypeName</key><string>Ruban perforé L.S.E.</string>
<key>CFBundleTypeExtensions</key><array><string>rub</string></array>
</dict>
</array>
</dict>
</plist>
# -*- mode:makefile-bsdmake;coding:utf-8 -*-
#*****************************************************************************
#FILE: Makefile
#LANGUAGE: makefile-bsdmake
#SYSTEM: POSIX
#USER-INTERFACE: NONE
#DESCRIPTION
#
# Generates a MacOSX application bundle.
#
#AUTHORS
# <PJB> Pascal J. Bourguignon <pjb@informatimago.com>
#MODIFICATIONS
# 2012-05-06 <PJB> Created.
#BUGS
#LEGAL
# AGPL3
#
# Copyright Pascal J. Bourguignon 2012 - 2012
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#*****************************************************************************
all:app
NAME=NASIUM-LSE
app:
-@rm -rf ${NAME}.app
mkdir -p ${NAME}.app/Contents/MacOS ${NAME}.app/Contents/Resources
sed -e "s/{VERSION}/$(shell cat VERSION)/g" \
-e "s/{SHORT_VERSION}/$(shell cat VERSION_SHORT)/g" \
-e "s/{LONG_VERSION}/$(shell cat VERSION_LONG)/g" \
< Info.plist \
> ${NAME}.app/Contents/Info.plist
@cp -v ../lse-*-darwin-* ${NAME}.app/Contents/MacOS/
@cp -v nasium-lse.sh ${NAME}.app/Contents/MacOS/
@cp -v \
nasium-lse-application.icns \
nasium-lse-programme.icns \
nasium-lse-ruban.icns \
${NAME}.app/Contents/Resources/
@cp -v nasium-lse.terminal ${NAME}.app/Contents/Resources/
#### THE END ####
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>NASIUM-LSE</string>
<key>CFBundleExecutable</key>
<string>nasium-lse.sh</string>
<key>CFBundleIconFile</key>
<string>nasium-lse-application</string>
<key>CFBundleIdentifier</key>
<string>com.ogamita.nasium-lse</string>
<key>CFBundleVersion</key>
<string>1.0.0-0.074-CCL-DARWIN</string>
<key>CFBundleGetInfoString</key>
<string>1.0.0-0.074-CCL-DARWIN, compiled 2012-05-06 20:45:28 on galatea.lan.informatimago.com</string>
<key>CFBundleShortVersionString</key>
<string>1.0.0-0.074</string>
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFile</key><string>nasium-lse-programme</string>
<key>CFBundleTypeName</key><string>Programme L.S.E.</string>
<key>CFBundleTypeExtensions</key><array><string>lse</string></array>
</dict>
<dict>
<key>CFBundleTypeIconFile</key><string>nasium-lse-ruban</string>
<key>CFBundleTypeName</key><string>Ruban perforé L.S.E.</string>
<key>CFBundleTypeExtensions</key><array><string>rub</string></array>
</dict>
</array>
</dict>
</plist>
#!/bin/sh
cd "$(dirname "$0")/../.."
APP="$(pwd)"
Terminal_PROFILE="$APP/Contents/Resources/nasium-lse.terminal"
NasiumLSE_PGM="$APP/Contents/MacOS/lse-ccl-darwin-apple-11.3.0-i386"
exec osascript <<EOF
tell app "Terminal"
open "${Terminal_PROFILE}"
do script "${NasiumLSE_PGM} ; exit" in first window
end tell
EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BackgroundBlur</key>
<real>0.0</real>
<key>BackgroundColor</key>
<data>
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS
AAGGoKMHCA9VJG51bGzTCQoLDA0OViRjbGFzc1xOU0NvbG9yU3BhY2VXTlNXaGl0ZYAC
EANCMADSEBESE1okY2xhc3NuYW1lWCRjbGFzc2VzV05TQ29sb3KiEhRYTlNPYmplY3Rf