Frage

Wenn ich paredit in Programmiermodi wie C verwende, wird durch Eingabe von ( ein Leerzeichen vor dem Paren eingefügt, wenn ich versuche, eine Funktion aufzurufen, sodass ich Folgendes bekomme:

foo ()

Gibt es eine Möglichkeit, das Einfügen des Leerzeichens zu deaktivieren, ohne die Quelle von paredit zu ändern?

War es hilfreich?

Lösung

Nun, paredit scheint so zu funktionieren, dass es die Syntaxtabellen überprüft, um zu sehen, ob Sie direkt nach einem Wort/Symbol/usw. ein Paar einfügen. In diesem Fall erzwingt es das Einfügen eines Leerzeichens.Sie müssen diese Funktionalität überschreiben. Dies kann auf verschiedene Arten erfolgen:Ratschläge, Neudefinition der Funktion zur Raumbestimmung, Änderung der Syntaxtabelle usw.

Ich würde es direkt versuchen:

(defun paredit-space-for-delimiter-p (endp delimiter)
  (and (not (if endp (eobp) (bobp)))
       (memq (char-syntax (if endp (char-after) (char-before)))
             (list ?\"  ;; REMOVED ?w ?_
                   (let ((matching (matching-paren delimiter)))
                     (and matching (char-syntax matching)))))))

Dies gilt natürlich für alle Orte, an denen Sie es verwenden paredit.Wenn Sie etwas modusspezifischeres wünschen, können Sie einige Bedingungen hinzufügen and Aussage (z.B. (and ... (memq major-mode '(c-mode lisp-mode)))).

Also...Ich schätze, ich habe die „Quelle“ geändert, aber Sie können dasselbe mit einem Teil davon machen defadvice ...Es ist alles Elisp, daher ist der Unterschied minimal.Es scheint keine Einstellung zur Steuerung dieser Art von Verhalten zu geben.

Andere Tipps

Siehe paredit-space-for-delimiter-predicates

Nun, Paredit ist ideal für die Bearbeitung von Sprachen gebaut von S-Ausdrücken. Wenn Sie genau wie, wie sie die Schließung paren fügt automatisch die Verwendung Funktion

scroll top