我是emacs的新手,但对我真正做的事情和节省的时间感到震惊(宏节省了很多时间)。但我想知道有可能创建基于步骤的脚本,它要求用户输入并基于此执行代码。例如,我可能想创建一个SQL查询,因此它会提示如下:
>table name?
myTable
>type of query (select, insert, update, delete)
select
>fields to get
name, id
>Result query is "select (name, id) from myTable"
这只是一个想法的概述,但我很奇怪,因为这样的事情会有用。有人提到了AWK脚本,但我不确定这是不是正确的树。我在Windows上,但我认为这不重要。
我非常感谢您的任何信息,谢谢
答案 0 :(得分:7)
在emacswiki上看到这个小黑客:Prompting During Keyboard Macro Execution。否则,您可以随时暂停宏并在定义期间提供C-x q
的位置插入文本执行,请参阅Executing Macros with Variations。最后,您可以定义一个函数并使用interactive来获取所需的参数,即:
(defun my-build-query (table type field)
(interactive "sTable name: \nsType of query: \nsFields to get: ")
(message "%s (%s) from %s" type fields table)
)
您可以将此功能放在~/.emacs
中,然后使用M-x: my-build-query
执行此操作。
希望这能为您提供一些入门指南!
P.S。:啊,还有一个想法。这种东西可能更简单的方法是使用YASnippet(看看页面上的截屏视频)。
答案 1 :(得分:2)
您可以使用read-from-minibuffer,使用Emacs Lisp,又名elisp。
答案 2 :(得分:2)
例如在awk中。
BEGIN{
while (1){
printf "Enter table name: "
getline tablename
printf "Enter type of query: (s)elect, (i)nsert, (u)pdate, (d)elete, (q)uit: "
getline querytype
if ( querytype ~ /^q|Q$/) { exit}
printf "Enter fields to get (field1,..): "
getline fields
sql=querytype" ("fields") from " tablename
print "Result query is " sql
printf "Do you want to execute query??: (yY)es, (nN)o"
getline choice
if ( choice ~ /^y|Y$/) {
# use sql cmd here
}
}
}
另存为myscript.awk和命令行
c:\test> gawk -f myscript.awk
答案 3 :(得分:1)
我认为,正确的做法是编写类似readline的函数,允许在缓冲区内进行提示和用户输入。
这是容易实现的事情之一,但很难以一种非常令人愉悦的方式做到。可能有很好的可重复使用的elisp代码可以做到这一点,但我不知道。
答案 4 :(得分:1)
这是一个帮助您入门的基本实现:
(defun prompt-for-sql-statement (table type fields)
(interactive
(list
(read-from-minibuffer "Table name? ")
(completing-read "Type of statement? " '("select" "insert" "update" "delete"))
(let (field fields (index 1))
(while (not (string= "" (setq field (read-from-minibuffer (format "Field #%d: " index)))))
(setq fields (cons field fields) index (1+ index)))
(mapconcat 'identity (nreverse fields) ", "))))
(insert type " (" fields ") from " table))
当您键入M-x prompt-for-sql-statement
(或键入您将命令绑定到的键序列)时,您将收到一系列提示:
Table name? myTable
Type of statement? select
Field #1: foo
Field #2: bar
Field #3: baz
Field #4:
您可以对语句类型执行制表符完成,空字段将终止列表。然后,该函数将在您调用命令时的任何位置插入构造的SQL语句。
写入的命令将生成所有看起来像SELECT的SQL语句(“select ... from table”,“insert ... from table”等)。更智能的实现将知道如何为每种类型的SQL语句生成正确的语法。
答案 5 :(得分:1)
另一种可能性可能是skeleton或其他emacs模板(也许是节奏?)可能与缩写相结合