# Нужна помощь по программированию под емакс
Difrex(mira, 14) — All
2017-09-28 10:08:57


Привет.

Вот я пишу программку, хочу опакетить ее. Делаю в конце

(provide 'my-prog)

В емаксе добавляю каталог в load-path, делаю require. Вопрос: как достучатьс до функций из пакета?

# Re: Нужна помощь по программированию под емакс
Andrew Lobanov(,1) — Difrex
2017-09-28 11:06:02


Difrex> Привет.
Difrex> Вот я пишу программку, хочу опакетить ее. Делаю в конце
Difrex> (provide 'my-prog)
Difrex> В емаксе добавляю каталог в load-path, делаю require. Вопрос: как достучатьс до функций из пакета?

Не очень понял что значит "достучаться". Если вызывать их из других программ, то они сразу доступны по имени. Если имеется в виду интерактивный вызов, то надо использовать специальную форму (interactive &optional ARG-DESCRIPTOR). Подробнее можно прочитать во встроенной справке "C-h f interactive RET".

;;; Йу-ху! С каждым днём имаксеров становится всё больше =)

# Re: Нужна помощь по программированию под емакс
Difrex(mira, 14) — Andrew Lobanov
2017-09-28 12:00:17


>Если имеется в виду интерактивный вызов, то надо использовать специальную форму (interactive &optional ARG-DESCRIPTOR). Подробнее можно прочитать во встроенной справке "C-h f interactive RET".
Спасибо! То, что нужно.

>;;; Йу-ху! С каждым днём имаксеров становится всё больше =)
Да я уже года полтора, как емаксом пользуюсь, просто не писал под него =)

# Re: Нужна помощь по программированию под емакс
Difrex(mira, 14) — Difrex
2017-09-28 15:16:07


В общем начал я пилить клиента под емакс. Пока удалось сделать только получение списка эх. Но думаю потом дело пойдет быстрее.

Если кто готов присоедениться - велком https://gitea.difrex.ru/Difrex/idec.el

# Re: Нужна помощь по программированию под емакс
Andrew Lobanov(,1) — Difrex
2017-09-28 16:03:47


Difrex> В общем начал я пилить клиента под емакс. Пока удалось сделать только получение списка эх. Но думаю потом дело пойдет быстрее.
Difrex> Если кто готов присоедениться - велком https://gitea.difrex.ru/Difrex/idec.el

О! Крутота. Я неоднократно начинал, но забрасывал. А я go осваиваю потихоньку =)

# Re: Нужна помощь по программированию под емакс
Difrex(mobile)(tavern,23) — Andrew Lobanov
2017-10-03 21:37:37


А ты не мог бы подсказать как мне сделать такую штуку, как список из ассоциативных массивов.

Делаю сейчас так:

(setq new-messages-list (-concat 'new-messages-list '((content . message-content) (id . msg))))

Потом пытаюсь пройтись по этому списку:
(dolist (msg new-messages-list)
        (message (assoc 'id msg)))

Но не работает. Ругается так: Wrong type argument: listp

# Re: Нужна помощь по программированию под емакс
Difrex(mobile)(tavern,23) — Difrex(mobile)
2017-10-03 22:41:24


Переделал на хэшики - все работает =)

# Re: Нужна помощь по программированию под емакс
Andrew Lobanov(Go!,1) — Difrex(mobile)
2017-10-04 06:13:02


Difrex(mobile)> А ты не мог бы подсказать как мне сделать такую штуку, как список из ассоциативных массивов.
Difrex(mobile)> Делаю сейчас так:
Difrex(mobile)> ====
Difrex(mobile)> (setq new-messages-list (-concat 'new-messages-list '((content . message-content) (id . msg))))
Difrex(mobile)> ====
Difrex(mobile)> Потом пытаюсь пройтись по этому списку:
Difrex(mobile)> ====
Difrex(mobile)> (dolist (msg new-messages-list)
Difrex(mobile)> (message (assoc 'id msg)))
Difrex(mobile)> ====
Difrex(mobile)> Но не работает. Ругается так: Wrong type argument: listp

Вот я не помню как в emacs lisp работают property lists. Я делал простой список списков со структурой ((msgid body) (msgid body)) и обкодил список, обращаясь к элементам посредством (first...) и (second...). Решение кривое, но рабочее и с учётом статичности структуры данных, в целом, приемлемое.

# Re: Нужна помощь по программированию под емакс
Andrew Lobanov(Go!,1) — Difrex(mobile)
2017-10-04 06:13:02


Difrex(mobile)> Переделал на хэшики - все работает =)

Можешь накидать примерчик? Интересно а то.

# Re: Нужна помощь по программированию под емакс
Difrex(mira, 14) — Andrew Lobanov
2017-10-04 09:32:01


Как-то так:

(setq new-messages-list (make-hash-table :test 'equal))
(dolist (m my-list)
  ...
  (puthash msg message-content new-messages-list)
)

(maphash (lambda (id msg)
  (message (concat "Get " id "\n" msg))
 new-messages-list)

Тут инициализируется хэш
https://gitea.difrex.ru/Difrex/idec.el/src/research/idec.el#L315

Тут заполняется
https://gitea.difrex.ru/Difrex/idec.el/src/research/idec.el#L417

Тут выводится
https://gitea.difrex.ru/Difrex/idec.el/src/research/idec.el#L369