Size: a a a

Emacs — русскоговорящее сообщество

2020 September 19

PG

Pig Greenest in Emacs — русскоговорящее сообщество
@akater покажи asetf
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
короче, я считаю что такой API был бы лучше
(setf=> (integer-at-point) #'1-)
источник

a

akater in Emacs — русскоговорящее сообщество
Pig Greenest
@akater покажи asetf
(defmacro asetf (&rest pairs)
 "Like SETF, but values in places can be referred to as IT."
 (cons 'setf
   (cl-loop for (place value) on pairs by #'cddr
      collect place
      collect `(let ((it ,place)) ,value))))
источник

a

akater in Emacs — русскоговорящее сообщество
Pig Greenest
лол, а ты знаешь чем анафорические макросы плохи?
Легко запутаться в it-ах.

Но я все равно их очень люблю.
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
не, они не композятся с функциями
источник

a

akater in Emacs — русскоговорящее сообщество
Я люблю map и fold, операции с последовательностями и pattern matching, но вот стрелки эти — не.  Написал где-то одну один раз, не привилось.
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
я тоже не сразу понял суть
источник

a

akater in Emacs — русскоговорящее сообщество
Ну может еще привыкну.
источник

a

akater in Emacs — русскоговорящее сообщество
Некоторая неловкость с (setf thing-at-point) в том, что иногда напишешь (setf (integer-at-point) "васян"), и это сработает, но васян не целое число, так что выглядит не очень.  С другой стороны, может, хорошо, что эта запись привлечет внимание к типам в таких случаях.
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
akater
Жизнь бессмысленна, счастье иллюзорно, хорошее запоминается хуже плохого, ни одно доброе дело не остается безнаказанным, в мире становится меньше свободы — в мире, который интересен программистам, в том числе.  Быть несчастным легко, так что удивительного нет, но люди как-то недооценивают эту легкость.

Я читал чё-то про отчет о наблюдении за людьми, которые умирая, сожалели о разном, и самое популярное в наблюдениях было I wish I didn't work so much.  Еще одно исследование, проводившееся много десятков лет, вроде уникальное этим свойством, определило, что качество жизни очень сильно определяется качеством отношений с самыми близкими друзьями.
Тонски заебись в мск устраивал у себя дома публичные просмотры кинчиков, пытался раскачаться
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
ну это надо ещё посмотреть насчет Васяна
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
может и целое
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
Evgeny Zajcev
Тонски заебись в мск устраивал у себя дома публичные просмотры кинчиков, пытался раскачаться
собиралось человек 10, зырили кинчик, потом обсуждали под бухлишко
источник

a

akater in Emacs — русскоговорящее сообщество
Pig Greenest
ну это надо ещё посмотреть насчет Васяна
Суть в том, что value вычиляется в строку, а не в целое.  В общем, м.б. хорошо бы вдобавок какой-то strict-setf, который типы чекает или warn'ит, но в елиспе и это тож как-то не принято.
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
akater
Желания — неотъемлемая честь человеческой деятельности. Но да, существование абсурдно.  Лучше никогда не существовать, но нам эта роскошь недоступна.

Но лучше про thing-at-point.  Я хотел определить декремент целого числа под курсором (тоже странно,что его нет; я не потерял ли че из виду?), определил так

(defun decrement-integer-at-point ()
 (interactive)
 (asetf (integer-at-point) (1- it)))

и доволен.  Но это требует определять (setf thing-at-point).  Я определил так:

(defsetf thing-at-point (thing) (value)
 `(let ((pair (bounds-of-thing-at-point ,thing)))
    (replace-region-contents (car pair) (cdr pair)
      (lambda () (ensure-string ,value)))))

(в елиспе нет ensure-string — что тоже странно)
но м.б. это можно как-то улучшить.  Ideas are welcome.
так плохо делать, ты шадовишь pair символ, его сначала нужно gensym сделать чтобы шадовинга не было, типа
    (defsetf thing-at-point (thing) (value)
     (let ((pair (gensym "pair")))
     `(let ((,pair (bounds-of-thing-at-point ,thing)))
        (replace-region-contents (car ,pair) (cdr ,pair)
          (lambda () (ensure-string ,value))))) )
источник

a

akater in Emacs — русскоговорящее сообщество
Evgeny Zajcev
так плохо делать, ты шадовишь pair символ, его сначала нужно gensym сделать чтобы шадовинга не было, типа
    (defsetf thing-at-point (thing) (value)
     (let ((pair (gensym "pair")))
     `(let ((,pair (bounds-of-thing-at-point ,thing)))
        (replace-region-contents (car ,pair) (cdr ,pair)
          (lambda () (ensure-string ,value))))) )
Прозевал, я обычно всегда генсимлю.
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
да, косяк
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
можешь ещё через cl-destructuring-bind сделать
источник

a

akater in Emacs — русскоговорящее сообщество
Хочу кстати &gensym в defmacro.
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
Pig Greenest
можешь ещё через cl-destructuring-bind сделать
но тоже с генсимами надо
источник