702ad690 |
(let* ((current-track [itunes @(currentTrack)]))
(format t "~&Track: ~A (~v,1,0,'⋆<~>)~%Album: ~a (~v,1,0,'*<~>)~%Artist: ~a~%"
[current-track @(name)]@
(/ [current-track @(rating)]# 20)
[current-track @(album)]@
(/ [current-track @(albumRating)]# 10)
[current-track @(artist)]@)))
|
f436a52b |
(comment
(defun kebab-case (s)
(loop
for start = 0 then end
for end = (position-if 'upper-case-p s) then (when start (position-if 'upper-case-p s :start (1+ end)))
while start
collect (string-downcase (subseq s start end)) into parts
finally (return (serapeum:string-join parts #\-))))
(defun get-method-symbol (selector-name package)
(funcall (alexandria:compose (lambda (x) (intern x package))
#'string-upcase
(lambda (x) (substitute #\- #\:
(string-trim ":-" x)))
'kebab-case)
selector-name))
(defun intern-method (selector-name package)
(let ((symbol (get-method-symbol selector-name package)))
(format t "~&~s ~s~%" symbol selector-name)
(if (alexandria:starts-with-subseq "set" selector-name)
(setf (fdefinition `(setf ,symbol))
(lambda (new-val receiver &rest r)
(declare (ignore r))
(objc-runtime:objc-msg-send receiver (objc-runtime::ensure-selector selector-name) :pointer new-val)))
(setf (fdefinition symbol)
(sel (objc-runtime::ensure-selector selector-name))))))
(defun populate-package (objc-class package)
(mapc (lambda (method-name)
(intern-method method-name package))
(objc-runtime:get-method-names objc-class)))
(defmacro define-objc-call (selector (&rest argument-specs) result-type &optional extractor)
(declare (ignorable extractor))
`(defun ,(get-method-symbol (cadr selector) *package*) (receiver ,@(mapcar #'car argument-specs))
,(case result-type
(:string `(objc-runtime:objc-msg-send-string receiver ,selector ,@(mapcan #'reverse argument-specs)))
((:long :int) `(objc-runtime:objc-msg-send-int receiver ,selector ,@(mapcan #'reverse argument-specs)))
(t `(objc-runtime:objc-msg-send receiver ,selector ,@(mapcan #'reverse argument-specs))))))
(defmacro define-objc (() &body calls)
`(progn ,@(loop for call in calls
collect `(define-objc-call ,@call))))
(define-objc-call @(init) () :pointer)
(define-objc-call @(sharedApplication) () :pointer)
)
|