タグ付けされた質問 「elisp」

他の言語、特に他のLisp方言と比較した、言語としてのEmacs Lispに関する質問。つまり、*言語*自体についての質問です。* Emacs Lispの*使用*についての質問には*使用しないでください*。Emacs Lispは、Emacsエディターが組み込まれているスクリプトおよびプログラミング言語です。

2
シャープな引用はいつ使用すべきですか?
私は他の人のeLispコードで使用されている鋭い引用を見て、私はそれらを自分で使用しますが、それらが適切である場合とそうでない場合は完全には明確ではありません。 シャープ引用符を使用するのが適切な場合と、通常の単一引用符を代わりに使用する必要がある場合を正確に説明できますか?

1
簡単なrequest.elの使用法
私の恥ずかしいほど簡単な質問は次のとおりです。 次のコードが機能する理由: (require 'request) (defun geocoder () (request "http://rpc.geocoder.us/service/csv" ;;; **Hardcoded parameter!** :params '(("address" . "1600 Pennsylvania Ave, Washington DC")) :parser 'buffer-string :success (function* (lambda (&key data &allow-other-keys) (when data (with-current-buffer (get-buffer-create "*request demo*") (erase-buffer) (insert data) (pop-to-buffer (current-buffer)))))) :error (function* (lambda (&key error-thrown &allow-other-keys&rest _) (message "Got error: %S" …
9 elisp 

2
パッケージに必要なパッケージバージョンを確認するにはどうすればよいですか?
現在、いくつかのパッケージがあります。PackageRequiresセクションに、必要なすべてのパッケージを入れたいのですが、名前とバージョンが必要なようです。バージョン番号はどこでわかりますか?たとえば、私は(cl-lib "0.5")を持っていますが、使用できる最小バージョンを判断する最良の方法は何ですか?現在のバージョンを確認できますが、必要な最小値を判断する最良の方法は何ですか?また、必要なパッケージの中には、ファイルにバージョンが指定されていないものもあります。それらの場合、何が推奨されますか?
9 elisp  package 

3
組織のToDoキーワードバッファが表示される場所を制御するにはどうすればよいですか?
Q:orgtodoキーワードバッファーが表示される場所を制御するにはどうすればよいですか? ()でtodoキーワードを入力すると、キーワードオプションを含む新しいバッファーが開き、バッファーを1つ選択した後で再び閉じます。ここまでは順調ですね。ただし、それを行うには別のウィンドウが引き継がれます。これは、特にキーワードで1行または2行を表示するだけで十分なので、あまり効果がありません。C-c C-torg-todo したがって、次のレイアウトでC-c C-tは、左側のウィンドウ(some-org-buffer)でを押す*Org todo*と右側のウィンドウで開きます。 +---------------------+---------------------+ | | | | | | | | | | | | | some-org-buffer | some-other-buffer | | | | | | | | | | | | | +---------------------+---------------------+ 代わりに、次のように小さなウィンドウを垂直分割としてポップアップさせたいと思います。 +---------------------+---------------------+ | | | | | | | some-org-buffer | some-other-buffer | …

1
Orgモードのソースコードブロックの「:eval no」ステータスを切り替える方法
:evalヘッダー引数を使用して、org-mode babelの特定のコードブロックの評価を制限または制限解除することがよくあります。 次に例を示します。 #+BEGIN_SRC emacs-lisp :results value scalar :eval no (+ 1 1) #+END_SRC #+RESULTS: : 2 私は、コードブロックを切り替える:eval noおよび:eval n(または削除:eval no完全に)手で。 #+PROPERTY: eval no は便利ですが、各コードブロックには適していません。 :eval以下のように、ステータスを便利に切り替えるより良い方法はありますか? C-c C-t (org-todo) Rotate the TODO state of the current item among (unmarked) -> TODO -> DONE
9 org-mode  elisp 

2
`eval-when-compile`がファイルのロード時に実行され、.elcにバイトコンパイルされるのはなぜですか?
マクロ展開を回避する、またはバイトコンパイル中に未定義の変数に関する警告を解決するための一般的なイディオム: (eval-when-compile (require 'cl-lib)) しかし、これrequire ...は.elcファイルにコンパイルされました!cl-eval-when(名前によると)適切なセマンティックスがあることがわかりました。 通常require、サイトファイルやpackage.el たとえば.emacs、いくつかの外部マクロを使用して自分をバイトコンパイルしたいのですが、そのようなパッケージがない場合は黙ってパススルーします。 (cl-eval-when 'compile (condition-case err (require 'w3m-util) (error (byte-compile-warn "Failed by: %S" err)))) (w3m-util-DEPENDENT-CODE ...) これを行う別の方法は次のとおりです。 (ignore-error (require 'w3m-util) (w3m-util-DEPENDENT-CODE ...)) しかし、今はトップレベルのフォームではありません... そのeval-when-compile名前を適切に入力して、その名前から予期されないことをしますか?


2
別の関数への個別の引数として使用されるリストを「拡張」する一般的な方法はありますか?
たとえばL、おそらく&rest引数からの文字列のリストがあるとします。これに対して何ができLますか?以下と同じ効果がありますか? (concat (first L) (second L) ... (last L)) (この例ではmapconcatここで機能することはわかっていますが、一般的なプロセスを探しています。)
9 elisp 


4
ブラケットを自動的にフォーマットする
(Cでコーディングするための)Allmanスタイルのフォーマットに従って中かっこを配置/配置/インデントする関数を作成しようとしています。 一般的に言えば、私はユーザーが機能をカスタマイズするために使用できるSmartparensのインターフェースのファンです。私はSmartparensインターフェースを使用して他の関数をたくさん書いたので、この時点でパッケージを切り替えないようにしてください。そうは言っても、私はパッケージにとらわれない実装を受け入れています(たとえば、defadviceここで関連性があるかもしれませんか?)。 目の前の問題に移ります。最終目標は何ですか?コーディングしていて、以下に示す状態になったとしましょう。パイプ記号はカーソルを表します。関数ヘッダーと開き括弧を入力しました{。Smartparensが自動的に閉じ括弧を追加しました }。この時点で、それを押してくださいRET... int main {|} ...次のようになります: int main { | } この動作を引き起こす関数を書くことができましたが、それは最初のレベルのインデント(たとえば、上の例のメイン関数)でのみ機能します。それ以降のレベルのインデントでは機能しません(gifを参照)。 関連するコードは次のとおりです。関数はきれいではありませんが、うまくいくと思います...最後の行はSmartparensへのインターフェースです。 助言がありますか? (defun my-create-newline-and-enter-sexp (&rest _ignored) "Open a new brace or bracket expression, with relevant newlines and indent. " (interactive) (progn (backward-char 2) (newline) (forward-char) (newline) (indent-according-to-mode) (previous-line 2) (indent-according-to-mode) (next-line) (next-line) (indent-according-to-mode))) (sp-local-pair 'c-mode "{" …

1
フックとは?
明確にするために...たとえば、このドキュメントでは: フックは関数のリストを保持するLisp変数であり、明確に定義された場合に呼び出されます。(これはフックの実行と呼ばれます。)リスト内の個々の関数は、フックのフック関数と呼ばれます。たとえば、フックkill-emacs-hookはEmacsを終了する直前に実行されます... 評価kill-emacs-hook時に実行される一連の「フック関数」のリストを表す名前付きの変数(シンボル)kill-emacs-hookがあり、それによってそれらの関数を実行していると言っています。正しい?その後 (add-hook 'text-mode-hook 'auto-fill-mode) 追加されたauto-fill-modeことにより、特定され、そのリストにtext-mode-hookあり、すでに何に加えて。良い。今これ (defcustom text-mode-hook nil "Normal hook run when entering Text mode and many related modes." :type 'hook :options '(turn-on-auto-fill flyspell-mode) :group 'wp) を作成または変更しているようtext-mode-hookです。フックの性質とフックとの関係について混乱していdefcustomます。私の論理的な選択は、このコードがtext-mode-hook「タイプ」(elispのタイプが何を意味するのかわからない)の変数を作成することですhook。これは確かに、フックの最初の作成であるはずtext-mode-hookですか?もしそうなら、「オプション」とは何ですか?それらは想定されたフック関数ですか、それとも何か他のものですか?

1
オートロードと変数
私は関数のオートロードの機能を理解しています(そのような関数が呼び出されたとき、またはそのドキュメント文字列が取得されたときにロードするファイルを登録します)。ただし、変数やマクロと組み合わせてオートロード機能を使用する方法は明確ではありません。 2つの質問があります。 パッケージにパラメーターがあり、ユーザーが設定できる変数として実装されているが、自動ロードされない場合はどうなりますか?そのような変数はオートロードされるべきですか?そうでない場合、そのような変数は存在しないことがわかります。Lisp環境は、パッケージからオートロードされた関数が使用されるまで(通常は構成ファイルのロード後)、ユーザーが変数を設定するまで、デフォルト値を含め、それらについて何も知りません。 /彼女の設定ファイル、それは存在しない変数を設定するようなものです。変数の値が空でないリストであり、ユーザーがその値を使用pushまたはadd-to-list変更する場合、正確にはどうなりますか?デフォルト値は失われますか? マクロがオートロードされるとどうなりますか?いつマクロをオートロードする必要がありますか?

1
gethashがキーの値を返さないのはなぜですか?
ルーチン、日常、基本タスクを自動化するためにpythonからelispに移行する経験豊富なlisp、scheme、clojureプログラマー:次のことから私は非常に驚きました ielm ELISP> (setq h2 (make-hash-table)) #s(hash-table size 65 test eql rehash-size 1.5 rehash-threshold 0.8 data ()) ELISP> (puthash "a" 1 h2) 1 (#o1, #x1, ?\C-a) ELISP> (gethash "a" h2) nil え?キーと値が存在するように見えます: ELISP> h2 #s(hash-table size 65 test eql rehash-size 1.5 rehash-threshold 0.8 data ("a" 1)) /額を平手打ち。私は完全に明白な何かを見逃しているに違いありません。情報は言う: -- Function: gethash …
8 elisp 

3
文字列の等価性、大文字と小文字を無視しますか?
Q:文字列の等価性をどのようにテストしますが、大文字と小文字を無視しますか? 文字列を比較したいが大文字小文字を無視したい状況があります。大文字と小文字はにとって重要でstring-equalあり、明らかに以下の影響を受けませんcase-fold-search。 (string-equal "string" "StrinG") ; => nil (let ((case-fold-search t)) (string-equal "string" "StrinG")) ; => nil 文字列をdowncase比較する前に、いつでも(たとえば、)文字列を前処理できます。 (string-equal (downcase "string") (downcase "StrinG")) ; => t しかし、それは毎回2つの追加の関数呼び出しを行うにはやり過ぎのようです。関連する述語関数を見落としたことがありますか?
8 elisp 


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.