Как записать, что Emacs функционирует для обертывания отмеченного региона с указанным текстом

Передача данных на пути конструктор или работы метода set, но требует, чтобы создатель команды знал данные потребности команды...

идея "контекста" действительно хороша, и я продолжал работать (внутреннее) платформа, которая усилила ее некоторое время назад.

при установке контроллера (компоненты UI, которые взаимодействуют с пользователем, CLI, интерпретирующий пользовательские команды, интерпретацию сервлета входящие параметры и данные сессии, и т.д.) для обеспечения названный доступом к доступным данным команды могут непосредственно попросить данные, которые они хотят.

мне действительно нравится разделение, которое позволяет установка как это. Думайте о разделении на уровни следующим образом:

User Interface (GUI controls, CLI, etc)
    |
[syncs with/gets data]
    V
Controller / Presentation Model
    |                    ^
[executes]               |
    V                    |
Commands --------> [gets data by name]
    |
[updates]
    V
Domain Model

, Если Вы делаете правильно, это, те же команды и модель представления могут использоваться с любым типом пользовательского интерфейса.

Взятие этого шаг вперед, "контроллер" в вышеупомянутом довольно универсален. UI управляет только потребностью знать имя из команды, которую они вызовут - у них (или контроллер) не должно быть знания того, как создать ту команду или в каких данных та команда нуждается. Это - реальное преимущество здесь.

, Например, Вы могли держать название команды для выполнения в Карте. Каждый раз, когда компонент "инициирован" (обычно actionPerformed), контроллер ищет название команды, инстанцирует его, вызовы выполняются, и продвигает его на стеке отмены (если Вы используете один).

8
задан Benjamin Pollack 20 November 2009 в 18:46
поделиться

4 ответа

В вашем случае это должно работать:

(defun wrap-text (b e txt)
  "simple wrapper"
  (interactive "r\nMEnter text to wrap with: ")
  (save-restriction
    (narrow-to-region b e)
    (goto-char (point-min))
    (insert txt)
    (insert "(")
    (goto-char (point-max))
    (insert ")")))

(global-set-key (kbd "C-x M-w") 'wrap-text)
8
ответ дан 5 December 2019 в 12:09
поделиться

Что-то немного ближе к вашей версии, но с некоторыми изменениями:

  • вы можете использовать 'let' для создания локальной переменной
  • начало региона, а конец региона дает вам эквивалент того, что сделал трей с

Вот пример:

 (defun wrap-in-function ()
   "Wrap marked region with a specified PREFIX and closing parentheses."
   (interactive)
   (let ((prefix (read-from-minibuffer "function: ")))
     (save-excursion
       (goto-char (region-beginning))
       (insert (concat prefix "(")))
     (save-excursion
       (goto-char (region-end))
       (insert ")"))))

Еще одно различие между двумя версиями - это положение точки после того, как вы вызвали функцию; Трей-версия может быть лучше для использования (дело вкуса).

РЕДАКТИРОВАТЬ: отредактировал следующие примечания vinh.

3
ответ дан 5 December 2019 в 12:09
поделиться

спасибо Трей Джексон. Я не знал, что вы опубликовали решение, поэтому обратился за помощью к #emacs на freenode. после некоторого исследования я пришел к следующему:

(defun ess-R-wrap-content-vqn ()
  "Wrap marked region with a specified PREFIX and closing parentheses."
  (interactive)
  (set (make-local-variable 'prefix) (read-from-minibuffer "function: "))
  (set (make-local-variable 'prefix) (concat prefix "("))
  (save-excursion (goto-char (region-beginning)) (insert prefix))
  (save-excursion (goto-char (region-end)) (insert ")"))
)
(define-key ess-mode-map "\C-c\M-w" 'ess-R-wrap-content-vqn) ;; w is for wrap

Я думал, что stackoverflow собирался уведомить меня, когда будет опубликовано решение. еще раз спасибо. узнать немного больше об elisp из этого.

1
ответ дан 5 December 2019 в 12:09
поделиться

это требует 'cl, но в остальном довольно крошечно. использовал его несколько лет.

(require 'cl) ;;if you haven't elsewhere
(defun decorate-region( beg end prefix suffix )
  (interactive "r\nMPrefix: \nMSuffix: ")
  (cl-set-buffer-substring beg end (concat prefix
                                           (buffer-substring beg end)
                                           suffix)))
2
ответ дан 5 December 2019 в 12:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: