2017-05-08 1 views
0

私はシンプルなelisp関数を書いています。Emacsインタラクティブな読み込みエスケープシーケンス

(defun gen-seq (from to sep) 
    "Generates sequence of numbers FROM .. TO with separator SEP" 
    (interactive "nFrom: \nnTo: \nMSeparator: ") 
    (insert (mapconcat 'number-to-string (number-sequence from to) sep))) 

しかしsep\nあるとき、それは

1\n2\n3\n4\n5\n6\n7\n8\n9\n10 

のようなものは、それが私のEmacsバッファでこの機能を数字の列を達成することが可能である生成します。そして、それは数字の列を挿入しますか?

+0

接線方向は、あなたが[小さな](https://github.com/abo-abo/tiny)ライブラリを見つけるかもしれない:ユーザが二重引用符を入力する必要があります以外にも使用(interactive "x")は、引数を読みます興味を持っている。 – phils

答えて

1

セパレータとして改行を入力するには、C-q C-jと入力します。詳細については、emacsマニュアルのInserting Textを参照してください。

1

ニックの答えは、改行を入力するための標準的なアプローチですが、あなたが本当にへのEmacsをしたい場合は、それがelispの引用符で囲まれた文字列であるかのように文字列引数は、あなたがそれを行うことができます読み:

(defun gen-seq (from to sep) 
    "Generates sequence of numbers FROM .. TO with separator SEP" 
    (interactive "nFrom: \nnTo: \nMSeparator: ") 
    (let* ((sepesc (replace-regexp-in-string "\"" "\\\\\"" sep)) 
     (sepnew (car (read-from-string (concat "\"" sepesc "\""))))) 
    (insert (mapconcat 'number-to-string (number-sequence from to) sepnew)))) 

することができます"\n"

関連する問題