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

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

3
Emacs Lispで実行可能ファイルへのパスを見つけるにはどうすればよいですか?
私の現在のユースケースは、Cask実行可能ファイルがどこにあるかを見つけることです(少なくとも2箇所にインストールでき、これに関して未解決の問題があります)。 このようにキャスクを要求する必要があります。 (require 'cask "~/.cask/cask.el") しかし、それへの正しいパスを見つける必要がありcask.el、私が知る限り、それを行う最も簡単な方法は、実行可能ファイルを見つけることです。 これどうやってするの?
16 elisp  files  cask 


2
関数またはマクロはバイトコンパイラの警告を指定できますか?
原則として、任意の数の引数を取る関数を作成しています。ただし、実際には、偶数の引数のみが渡される必要があり、 そうでない場合は望ましくない結果が生成されます。 コンテキストのダミーの例を次に示します。 (defun my-caller (&rest args) (while args (call-other-function (pop args) (pop args)))) elispファイルがバイトコンパイルされると、バイトコンパイラーは、間違った数の引数で呼び出されている関数を検出すると、警告をスローします。明らかに、これはで発生my-callerすることはありません。これは、任意の数を取るように定義されているためです。 それでも、設定できるシンボルプロパティや、(declare)その定義に追加できるフォームがあるかもしれません。この関数には偶数個の引数のみを指定する必要があることをユーザーに通知するもの。 この制限をバイトコンパイラに通知する方法はありますか? そうでない場合、関数の代わりにマクロで可能ですか?

1
バッファのコンテンツを取得する
したがってbuffer-string、現在のバッファのコンテンツを取得します。ただし、他のバッファを指定することはできません。 どうすればそれを回避できますか?機能save-window-excursionさせるために何か必要ですか?


2
単一の引数とコンマを含む引用点は何ですか?(引用符、引数)
(quote x)MAKESは評価されないX、しかし、追加,の前でx内quoteになり、それが評価しました。その場合、次のように、カンマを前に付けた単一の引数で引用符を使用するポイントは何(quote ,x)ですか? 迷惑な矢印から59行目で動機付け: (put (quote ,cmd) 'aa--alts ,alternatives) なぜ(put cmd 'aa-alts ,alternatives)同様に良くないのですか?
15 elisp  backquote 

1
なぜレキシカルスコープのlet-bound変数に対してsetqとset quoteの動作が異なるのですか?
拡張機能の1つにバグがあり、最終的にsetは期待どおりに機能しなかったことが原因であることが判明しました。 ;; -*- lexical-binding: t -*- (let ((a nil)) (setq a t) (print a)) (let ((a nil)) (set 'a t) (print a)) emacs -Q --batch -l temp.elプリントで実行した場合: t nil これは私には非常に奇妙に思えます。私(setq a b)は略記の印象を受けていました(set 'a b)。どうしたの?

1
elispファイルにファイルの終わりのコメントがあるのはなぜですか?
なぜelispファイルは通常で終わるの ;;; file.el ends hereですか? これが有用だった歴史的な理由はありますか?elispスタイルガイドで推奨されているのを見てきましたが、現代のelispパッケージでも見られます。 auto-insert-modeまた、デフォルトで新しいelispファイルにこのようなコメントを追加します。


3
フック関数を一度だけ実行する方法はありますか?
コンテキスト emacsクライアント/サーバー構成でafter-make-frame-functionsテーマを適切にロードするためにフックを使用しています。具体的には、これを作成するために使用するコードスニペットです(このSO回答に基づいています)。 (if (daemonp) (add-hook 'after-make-frame-functions (lambda (frame) (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup))) (progn (load-theme 'monokai t) (sml/setup))) 問題 新しいemacsclient -c/tセッションが開始されると、フックは新しいフレームだけでなく、以前のすべての既存のフレーム(他のemacsclientセッション)でも実行され、非常に迷惑な視覚効果をもたらします(テーマはすべてのフレームで再び読み込まれます)。さらに悪いことに、ターミナルクライアントでは、既に開いているテーマの色が完全に台無しになります。明らかに、同じemacsサーバーに接続されているemacsクライアントでのみ発生します。この動作の理由は明らかであり、フックはサーバー上で実行され、すべてのクライアントが影響を受けます。 質問 この関数を一度だけ実行する方法や、フックを使用せずに同じ結果を取得する方法はありますか? 部分的な解決策 @Drewの回答のおかげで、このコードが完成しました。しかし、まだ問題があります。ターミナルでクライアントセッションを開始すると、GUIはテーマを適切にロードせず、その逆も同様です。多くのテストを行った結果、動作はどのemacsclientが最初に起動するかに依存していることを認識し、さまざまなものを破棄した後、ロードされたカラーパレットに関連している可能性があると思います。手動でリロードすると、テーマはすべて正常に機能するため、初期構成のように毎回フックによって関数が呼び出されたときにこの動作が表示されません。 (defun emacsclient-setup-theme-function (frame) (progn (select-frame frame) (load-theme 'monokai t) ;; setup the smart-mode-line and its theme (sml/setup) …

2
条件式の「and」と「when」
これは、この回答に対するコメントのフォローアップです。次のコードは同等のようです: (and a b) (when a b) もちろんand:あなたはより多くの条件に置くことができます(and a b c d)手段を(when (and a b c) d) 私はwhen分岐を表現するためだけに使用する傾向があります。実際の違いはありますか?どちらを使用するのが良いですか? EmacsのCソースは手元にありません。andC関数です。whenはに展開されるマクロでありif、それ自体はC関数です。

7
インターネット接続を確認するためのElispコード
Emacsを開くと、initファイルが評価されます。これには、インターネット接続を介したパッケージアーカイブの更新が含まれます。これは、インターネットに接続していないときに問題になるため、インターネットに接続せずにEmacsを起動するときにそのコードの実行を防止する必要があります。この問題を解決するために、インターネットに接続していないときにEmacsがパッケージの更新コードを無視する方法があるのだろうか? ここに私の最初の数行がありますinit.el: ;; Requisites: Emacs >= 24 (require 'package) (package-initialize) ;; PACKAGE MANAGEMENT (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (package-refresh-contents) 次のようにEmacsファイルをロードするコードを追加できると思います。 ;; Requisites: Emacs >= 24 (when (connected-to-internet-p) ; I need this predicate function (require 'package) (package-initialize) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t) (package-refresh-contents)) (connected-to-internet)この問題を解決する機能、または同様のアプローチはありますか?
13 elisp  networking 

4
フックを使用したメジャーモードキーの設定とモードマップへの追加の違い
と呼ばれるメジャーモードをダウンロードしmagical-mode、それに独自の魔法のキーマップがありmagical-mode-mapます。このモードは、バッファのメジャーモードになるmagical-mode-hookたびに実行されるフックも提供しますmagical-mode。次に、initファイルを変更して、そのモードで使用するいくつかのカスタムキーバインディングを追加します。 のカスタムキーバインディングをセットアップする方法は(少なくとも)2つあるようですmagical-mode。私が最も一般的に見るものはこれです: (defun my-magical-keys () (local-set-key (kbd "C-i") 'previous-line) (local-set-key (kbd "C-k") 'next-line) (local-set-key (kbd "C-j") 'backward-char) (local-set-key (kbd "C-l") 'forward-char)) (add-hook 'magical-mode-hook 'my-magical-keys) ただし、次のようにすることもできます。 (define-key magical-mode-map (kbd "C-i") 'previous-line) (define-key magical-mode-map (kbd "C-k") 'next-line) (define-key magical-mode-map (kbd "C-j") 'backward-char) (define-key magical-mode-map (kbd "C-l") 'forward-char) 2番目の方法は、実際には私にとってはきれいに見えます。 ある方法を他の方法よりも有利にすることはありますか?

4
`symbol-value`は何をしますか?
ドキュメントは私を賢くしませんでした: この関数は、シンボルの値セルに格納されている値を返します。これは、変数の現在の(動的な)値が格納される場所です。変数にローカルバインディングがない場合、これは単にグローバル値です。変数がvoidの場合、void-variableエラーが通知されます。 symbol-valueのポイントは何ですか?どこでいつ使用する必要がありますか?
13 elisp  symbols 

9
括弧で迷子にならずにelispを編集する方法
linum.elのelispコードを修正しています: (custom-set-variables '(linum-format 'dynamic)) (defadvice linum-update-window (around linum-dynamic activate) (let* ((w (length (number-to-string (+ (count-lines (point-min) (point-max)) 1)))) (linum-format (concat " %" (number-to-string w) "d "))) ad-do-it)) に変更する(count-lines (point-min) (point-max))ことで、インデントが1つずつずれていたバグを修正できました(+ (count-lines (point-min) (point-max)) 1)。それは簡単でした。 ただし(concat " %" (number-to-string w) "2d ")、行番号のカウントが10未満の場合にif-conditional whereを追加して、最小幅が2になるように変更します。 これは簡単なはずです!1つの条件を追加し、連結をコピー/貼り付けます。ケーキだよね?つまり、何をすべきかはわかっていますが、elispに触れることはめったになく、多くの括弧で何かを変更しなければならないときはいつも気が遠くなります。 私が理解していることから、「正しい」スタイルは、インデントに基づいてコードを構造化し、それ自体ではなく行末で括弧をラップすることです。他の「C」スタイルの言語から来て、私はこの方法でコードを読み書きするのに苦労しています。だから私の質問は次のとおりです。私は何が間違っていますか?elispを編集してコードをナビゲートし、そこに座ってすべての括弧を数える必要がないようにするにはどうすればよいですか? elispで深くなりすぎるものを扱うときは、ドアを閉め、ブラインドを引っ張り、K&Rスタイルの括弧を配置する必要があります。 明らかに私はこれをすべて間違っています。どうすればこのようなelispを恐れることなくタッチできますか? 私の質問は、スタイルに関する質問としてではなく、elispをナビゲートおよび編集する方法です。私はすでにスタイルガイドとして次を使用しています:https : //github.com/bbatsov/emacs-lisp-style-guide 更新: …

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