to post messages and comments.

Полезная табличка: (http://hyperpolyglot.org/lisp)
Только я все также не знаю что служит заменой take. Городить цикл как-то сурово.

Навелосипедил костыль, при помощи которого в главном канале bitlbee можно не
prepend-ить имя юзера, а чтобы сообщение посылалось юзеру, с которым до этого шел разговор.
(micq-like)

pastebin.com

Взять X параграфов текста, размер которых ещё влезает в четыре килобайта. 

(defun byte-count-in-region (start end)
  (string-to-number
   (with-output-to-string (call-process-region start end
					       "wc" nil standard-output nil
					       "-c"))))
(defun select-juickable-paragraph-set ()
  (interactive)
  (let ((start (point))
	(block-length 4096))
    (while (and (< (byte-count-in-region start (point)) block-length)
		(< (point) (point-max)))
      (forward-paragraph))
    (if (> (byte-count-in-region start (point)) block-length) 
	(backward-paragraph))
    (if (<= (point) start)
	(goto-char start))
    (set-mark start)
    (message "Current region size is small enough for juick")))

Как можно сделать это короче в два раза? И почему в емаксе до сих пор нет какого-нибудь forward-byte?

У меня появилась сумасшедшая идея реализовать очередную объектную систему на Emacs Lisp. Ну не можется мне там без объектов что-то нормальное писать. Отговорите меня пожалуйста

Пусть у меня есть переменная text, которая содержит строку.
Как мне урезать кол-во символов в этой строке до n символов?
Например, что бы сделать так:
(setq text (cut text n))

привет, жуйк! А ты когда-нибуть сталкивался программированием элементов UI в GNU Emacs? Имеется в виду создание чего-то вроде того, что видишь в customize. Если да, то поделись ссылками, а то ничего толкового не нагугливается.

с какого-то перепугу стал при goto-char сбрасывать выделение региона, пришлось #721710 переделать:
(defun* quote-region (&optional (left-quote "«") (right-quote "»"))
(interactive)
(let ((beg (region-beginning))
(end (region-end)))
(goto-char beg)
(insert left-quote)
(goto-char end)
(insert right-quote)))

Задолбался ...

(require 'cl)

(defun* quote-region (&optional (left-quote "«") (right-quote "»"))
(interactive)
(goto-char (region-beginning))
(insert left-quote)
(goto-char (region-end))
(insert right-quote))

(defmacro defjuickaction (function-name matcher action)
`(defun ,function-name ()
(interactive)
(if (and (equal (get-text-property (point) 'read-only) t)
(,@matcher))
(,@action)
(self-insert-command 1))))

(defjuickaction juick-go-recommend
(thing-at-point-looking-at "#[0-9]+")
(juick-send-message juick-bot-jid
(concat "! " (match-string-no-properties 0))))

It works.

Также прошу прощения за последнюю рекомендацию, тестировал :)

хочу выдать на stdout список буферов, нацарапал такое:
(defun list-buffers-string () (mapconcat '(lambda (s) (format "%s" s))
(remove-if '(lambda (name) (string= (substring name 0 1) " "))
(mapcar 'buffer-name (buffer-list)))
"\n"))

в скрэтче отрабатывает нормально, а вот если сделать
emacsclient --eval "(list-buffers-string)"
,вместо перевода строк выдает \n
WTF?

Переделал #272721, ввел лишний defun.. как-то вышло слегка
по-индусски, но зато все стало тупо-просто! Еще раз призываю
высказаться матерых Elisp'еров.

(defun calendar-x-month-last-thu (today)
(if (> (- (cadr today) (calendar-day-of-week today)) 3)
; current month or last
(car today) (- (car today)
; begining of year workaround
(if (eq 1 (car today)) -11 1))))

(let ((d (calendar-current-date))
(m (calendar-x-month-last-thu (calendar-current-date))))
(if (> m (car d))
; happy new year!
(concat (calendar-month-name m t) "_" (number-to-string (- (caddr d) 1)))
; string "Mon_YEAR" is what we need
(concat (calendar-month-name m t) "_" (number-to-string (caddr d)))))

В жуике это конечно не нужно, но мало-ли.. не делать же ради такой мелочи публичный git?


Выдумал немного elisp-кода для определения даты "прошлого четверга".
Код таков:

(format-time-string
"%c"
(apply 'encode-time
(let ((d ; that's day
(calendar-gregorian-from-absolute
(calendar-dayname-on-or-before
4 ; last Thursday
(calendar-absolute-from-gregorian (calendar-current-date))))))
(list 0 0 0 (cadr d) (car d) (caddr d) nil nil nil))))

Сразу оговорюсь, что мне этот код был надо не просто так, а для
личного использования. Поэтому использован format-time-string :)
Строку #3 я скопировал из time-date.el, еще, как видите, использованы
функции calendar.el

Собственно вопрос к знатокам: а проще можно? Как-то не очень нравится
получившийся вариант, слишком много конвертирования даты да и
громоздко. Манипуляция с со списком (последняя строка)
некрасивая. Может где есть возможность улучшить?

Я уж привык к format из CL, и не только потому что он гибкий — я его ещё в Guile встречал. А тут какой-то аналог printf просто :-(.