Emacs Elisp динамическая интерактивная подсказка

В этом случае вы можете перебрать каждый лист во вновь открывшейся книге и проверить, что имя содержит строку CLS.

   Do While strExtension <> ""

        Set wbOpen = Workbooks.Open(strPath & strExtension)

        Dim checkSheet as Worksheet
        For each checkSheet in wbOpen.Worksheets
            If UCase$(checkSheet.Name) Like "*CLS*" Then
                checkSheet.Copy After:=wbNew.Sheets(wbNew.Sheets.Count)
                wbNew.Sheets(wbNew.Sheets.Count).Name = wbNew.Sheets(wbNew.Sheets.Count).Cells(1, 1)
            End If
        Next

        wbOpen.Close SaveChanges:=False

        strExtension = Dir

    Loop
11
задан jacob 16 April 2009 в 00:29
поделиться

2 ответа

Mx find-function - ваш друг. Он расскажет вам, как работает emacs, и покажет вам исходный код. Используя его, я обнаружил, что query-regexp-replace вызывает query-replace-read-args , который вызывает query-replace-read-from , который вызывает чтение из минибуфера с использованием приглашения, созданного из последнего использованного регулярного выражения, которое сохраняется в пунктирной паре query-replace-defaults .

Итак:

(defun my-func ()
  "Do stuff..."
  (interactive)
  (read-from-minibuffer "Regexp? " (first query-replace-defaults)))

- это команда, которая выдает приглашение с последним введенным регулярным выражением по умолчанию.

15
ответ дан 3 December 2019 в 04:34
поделиться

Используйте переменную для истории ввода и интерактив со списком:

(defvar my-func-history nil)

(defun my-func (str)
  (interactive (list (read-from-minibuffer "Input string: " (car my-func-history) nil nil 'my-func-history)))
  (insert str))

Если вы не хотите, чтобы последний значение, введенное там изначально, замените (car my-func-history) на ноль . Вы можете, конечно, стрелку вверх / вниз, чтобы просмотреть историю в приглашении.

9
ответ дан 3 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

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