LINUX.ORG.RU

Указать клавишу в каталоге функций

 ,


0

1

Описываю каталог функций:

(define-key-after iankon-mode-map
  [menu-bar iankon]
  (cons "Iankon" (make-sparse-keymap "Iankon functions"))
  'tools)

;; какая-либо функция
(define-key iankon-mode-map
  [menu-bar iankon insert-name]
  (cons "Insert new name" 'my-macro))

;; шоткат для быстрого списка комманд
(define-key iankon-mode-map
  (kbd "<f5>")
  (lambda (&optional arg)
    (interactive "p")
    (tmm-prompt (tmm-get-keybind [menu-bar iankon]))))

Значит по F5 у меня открывается список с дальнейшими функциями. Там указаны клавиши и описанные мной функции, которые вызовутся по нажатию клавиши. Вопрос - как указать определённую клавишу для функции в таком режиме?

★★★★★

Последнее исправление: ados (всего исправлений: 1)

см. (menu-item...). Вроде так.

(define-key iankon-mode-map [menu-bar iankon insert-name]
    `(menu-item ,(purecopy "blah-blah-blah") какая-то-твоя-функция))

Буквы он автоматом выдаст вроде. Проверять лень.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Буквы он автоматом выдаст

Вот это мне и не нравится. Вообще хочу что-то типа org-agenda, но со своими различными функциями. Не зря же её отдельно навелосипедили. У org-agenda что плохо - чувствительность к раскладке.

ados ★★★★★
() автор топика
Ответ на: комментарий от ados

Посмотри опции у menu-item - :key-sequence и :keys (UPD и :filter). Но будет, скорее всего, чувствительно к раскладке, да.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от ados

Меню в Emacs вообще «ненужно». Сделай через define-key в своем режиме. Зачем тебе меню? От раскладки зависеть не будет.

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от ados

Вот, например, как в gnus. Сначала нажимаешь E, а потом другую букву из списка. Специально выдрал код:

(gnus-define-keys (gnus-summary-wash-empty-map "E" gnus-summary-wash-map)
  "t" gnus-article-remove-trailing-blank-lines
  "l" gnus-article-strip-leading-blank-lines
  "m" gnus-article-strip-multiple-blank-lines
  "a" gnus-article-strip-blank-lines
  "A" gnus-article-strip-all-blank-lines
  "s" gnus-article-strip-leading-space
  "e" gnus-article-strip-trailing-space
  "w" gnus-article-remove-leading-whitespace)

(defmacro gnus-define-keys (keymap &rest plist)
  "Define all keys in PLIST in KEYMAP."
  `(gnus-define-keys-1 (quote ,keymap) (quote ,plist)))

(defun gnus-define-keys-1 (keymap plist &optional safe)
  (when (null keymap)
    (error "Can't set keys in a null keymap"))
  (cond ((symbolp keymap)
         (setq keymap (symbol-value keymap)))
        ((keymapp keymap))
        ((listp keymap)
         (set (car keymap) nil)
         (define-prefix-command (car keymap))
         (define-key (symbol-value (caddr keymap)) (cadr keymap) (car keymap))
         (setq keymap (symbol-value (car keymap)))))
  (let (key)
    (while plist
      (when (symbolp (setq key (pop plist)))
        (setq key (symbol-value key)))
      (if (or (not safe)
              (eq (lookup-key keymap key) 'undefined))
          (define-key keymap key (pop plist))
        (pop plist)))))

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Просто я написал несколько достаточно специфичных режима с достаточно специфичными функциями. Вещи для меня достаточно нужные и удобные, но достаю эти режимы достаю достаточно редко. Поэтому мне нужно то, что позволит быстро достать нужные функции из чердака, подключить и въехать в их эффективное использование.

Я думаю, что решение - быстрый доступ к каталогизированной документацией.

ados ★★★★★
() автор топика
Последнее исправление: ados (всего исправлений: 1)
Ответ на: комментарий от ados

Ещё мне не нравится, что всю эту хрень как не крути а должен держать emacs в виде внутренних списков и строк. Мне хочется отдельного сервиса, который будет всё это предоставлять и работать с эмаксом и после выполненной работы отключаться.

ados ★★★★★
() автор топика
Ответ на: комментарий от Kuzy

discover.el

Интересно, спасибо.

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

Пока патчу так:

(defun makey-key-mode-redraw (for-group)
  "(re)draw the makey key buffer."
  (let ((buffer-read-only nil)
        (current-exec (get-text-property (point) 'key-group-executor))
        (new-exec-pos)
        (old-point (point))
        (is-first (zerop (buffer-size)))
        (actions-p nil))
    (erase-buffer)
    (make-local-variable 'font-lock-defaults)
    (use-local-map (makey-key-mode-get-key-map for-group))
    (setq actions-p (makey-key-mode-draw for-group))
    (delete-trailing-whitespace)
    (setq mode-name "makey-key-mode" major-mode 'makey-key-mode)
    (when current-exec
      (setq new-exec-pos
            (cdr (assoc current-exec
                        (makey-key-mode-build-exec-point-alist)))))
    (cond ((and is-first actions-p)
           (goto-char actions-p)
           (makey-key-mode-jump-to-next-exec))
          (new-exec-pos
           (goto-char new-exec-pos)
           (skip-chars-forward " "))
          (t
           (goto-char old-point))))
  (setq buffer-read-only t)
  (fit-window-to-buffer nil ;; весь патч - вот эти 3 аргумента
                        nil 7))
ados ★★★★★
() автор топика
Ответ на: комментарий от ados

Если честно, то я из объяснений задачи ничего не понял. Совершенно. Что за каталоги, каких функций. А в чем проблемы с процессами? Emacs умеет работать с внешними процессами.

Zubok ★★★★★
()
Ответ на: комментарий от ados

Блин, тут замыкания какие-то кривые. Как на таком «лиспе» напрограммировали столько?

ados ★★★★★
() автор топика
Ответ на: комментарий от Zubok

Функции и описания к ним должны быть рассортированы по тематикам, а не свалены в кучу как в C-h m.

ados ★★★★★
() автор топика
Ответ на: комментарий от ados

Функции и описания к ним должны быть рассортированы по тематикам, а не свалены в кучу как в C-h m.

Чьи функции? Всего емакса? А зачем вообще тебе меню? Сделай каталогизатор (свой -mode). Ну меню же не для этого!

Zubok ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.