Size: a a a

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

2020 September 19

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
а нахуя макрос кстати? почему не функцию сделать?
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
тут то макрос не нужен совсем, он ничего не "генерит"
источник

a

akater in Emacs — русскоговорящее сообщество
Evgeny Zajcev
а нахуя макрос кстати? почему не функцию сделать?
Я мало писал defsetf'ов, написал по шаблону из CLHS.
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
фукнция, на удивление, будет работать быстрее, кстати 🙂
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
akater
Я мало писал defsetf'ов, написал по шаблону из CLHS.
аа
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
это defsetf
источник

EZ

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

PG

Pig Greenest in Emacs — русскоговорящее сообщество
Evgeny Zajcev
но тоже с генсимами надо
надо все-таки поспать
источник

a

akater in Emacs — русскоговорящее сообщество
Ну да, смысл именно в том, что (setf (любой-thing-at-point) ..)
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
мне ещё cl-function нравится
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
можно так делать
(seq-do (cl-function (lambda ((car . cdr)) ...)) ...)
источник

a

akater in Emacs — русскоговорящее сообщество
akater
Хочу кстати &gensym в defmacro.
Это было бы гораздо лучше чем with-gensyms везде писать, но это небось настолько брейкин, что не дождемся.
источник

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.
а что должна ensure-string делать?
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
Evgeny Zajcev
а что должна ensure-string делать?
я думаю (if (stringp x) x (x->string x))
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
Pig Greenest
я думаю (if (stringp x) x (x->string x))
так лучше так и писать, чем прятать неявность какую-то, ensure-string не нужна в elispе
источник

a

akater in Emacs — русскоговорящее сообщество
Evgeny Zajcev
а что должна ensure-string делать?
Например

(defun akater-misc-ensure-string (x)
(cl-etypecase x
  (number (number-to-string x))
  (keyword (substring (symbol-name x) 1))
  (symbol (symbol-name x))
  (string x)))


Вставить там можно строку или буфер (?), и я не знаю вот, есть ли тут простор какой-то, чтоб гибче интерфейс сделать.
источник

EZ

Evgeny Zajcev in Emacs — русскоговорящее сообщество
akater
Например

(defun akater-misc-ensure-string (x)
(cl-etypecase x
  (number (number-to-string x))
  (keyword (substring (symbol-name x) 1))
  (symbol (symbol-name x))
  (string x)))


Вставить там можно строку или буфер (?), и я не знаю вот, есть ли тут простор какой-то, чтоб гибче интерфейс сделать.
да ну, хуйня ж, error-prone штука
источник

PG

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

a

akater in Emacs — русскоговорящее сообщество
Evgeny Zajcev
так лучше так и писать, чем прятать неявность какую-то, ensure-string не нужна в elispе
Мне часто хочется задействовать string-designator, так что я без нее не хочу.
источник

PG

Pig Greenest in Emacs — русскоговорящее сообщество
если бы не вариант с keyword, то это был бы просто format
источник