LINUX.ORG.RU

Сообщения aeralahthu

 

Меню с опцией SelectOnRelease в FVWM

Есть такая строчка в конфиге:

Key Tab A 4 WindowList SelectOnRelease Super_L

Если нажать левый Super+Tab, то открывается список окон. В нём можно, не отпуская Super, табом выбрать нужное окно, отпустить Super, и выбранное окно получит фокус (и райз, и deiconify, далее по вкусу), а список окон, соответственно, закроется.

Если же нажать правый Super+Tab и проделать те же действия, то после отпускания Super список окон не закроется, а окно не получит фокус. Нужно будет дожимать Enter, чтобы это произошло.

Если заменить в строчке Super_L, на Super_R, то всё работает, понятное дело, ровно наоборот.

Вопрос: как сделать, чтобы SelectOnRelease срабатывал одинаково симметрично с левым и правым Super?

Опция SelectOnRelease, если я правильно понял документацию, принимает только один параметр. Написать SelectOnRelease два раза тоже не прокатило, срабатывает только один из них.

С FVWM только начал разбираться, документацию от корки до корки ещё не прочёл, каюсь.

Спасибо.

PS. Извините за многословные подробности, просто я зануда не люблю недопониманий.

 

aeralahthu
()

Вопрос про гигиенические макросы

Здравствуйте, мои маленькие любители макросов!

Есть такой макрос на CL:

(defun has-tag-p (tag record) ... )

(defmacro select (query records)
  (let ((rec (gensym "record")))
    (labels ((query-helper (q)
               (if (and (listp q)
                        (member (car q) '(and or not)))
                   `(,(car q) ,@(mapcar #'query-helper (cdr q)))
                   `(has-tag-p ,q ,rec))))
      `(remove-if-not (lambda (,rec) ,(query-helper query)) ,records))))

Аналогичный макрос (без гигиены) на guile:

(define (has-tag? tag record) ... )

(define-macro (select query records)
  (define rec (gensym "record"))
  (define (query-helper q)
    (if (and (list? q)
             (memq (car q) '(and or not)))
        `(,(car q) ,@(map query-helper (cdr q)))
        `(has-tag? ,q ,rec)))
  `(filter (lambda (,rec) ,(query-helper query)) ,records))

Вопрос: как написать такое же, но с гигиеной, используя (1) только стандарт R5RS, (2) стандарт R7RS, (3) Racket?

Призываю @monk’а и прочих знатоков Scheme.

Ну и с интересом выслушаю замечания бывалых лисперов по приведённому коду.

 , , , ,

aeralahthu
()

RSS подписка на новые темы