Optionally prompt for more ERC entry-point params
* doc/misc/erc.texi: Update statement about availability of `:user' keyword param when entry points called interactively. * lisp/erc/erc/compat.el: Don't require `url-parse' when compiling. Add forward declaration for `url-type'. * lisp/erc/erc.el: Don't require `url-parse' when compiling. Add forward declarations for accessors of `url' struct from `url-parse' library. (erc-select-read-args): Allow optionally calling entry points with a prefix arg to access params `user' and `:full-name'. (erc-tls): Update doc string. * test/lisp/erc/erc-tests.el (erc-select-read-args): Add test for extra args. (Bug#60428.)
This commit is contained in:
parent
3a012d1db2
commit
ba7fe88b78
4 changed files with 36 additions and 10 deletions
|
@ -952,7 +952,7 @@ Here, ``password'' refers to your account password, which is usually
|
|||
your @samp{NickServ} password. To make this work, customize
|
||||
@code{erc-sasl-user} and @code{erc-sasl-password} or specify the
|
||||
@code{:user} and @code{:password} keyword arguments when invoking
|
||||
@code{erc-tls}. Note that @code{:user} cannot be given interactively.
|
||||
@code{erc-tls}.
|
||||
|
||||
@item @code{external} (via Client TLS Certificate)
|
||||
This works in conjunction with the @code{:client-certificate} keyword
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
;;; Code:
|
||||
|
||||
(require 'compat nil 'noerror)
|
||||
(eval-when-compile (require 'cl-lib) (require 'url-parse))
|
||||
(eval-when-compile (require 'cl-lib))
|
||||
|
||||
;; Except for the "erc-" namespacing, these two definitions should be
|
||||
;; continuously updated to match the latest upstream ones verbatim.
|
||||
|
@ -412,6 +412,7 @@ If START or END is negative, it counts from the end."
|
|||
;;;; Misc 29.1
|
||||
|
||||
(defvar url-irc-function)
|
||||
(declare-function url-type "url-parse" (cl-x))
|
||||
|
||||
(defun erc-compat--29-browse-url-irc (string &rest _)
|
||||
(require 'url-irc)
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
(require 'cl-lib)
|
||||
(require 'format-spec)
|
||||
(require 'auth-source)
|
||||
(eval-when-compile (require 'subr-x) (require 'url-parse))
|
||||
(eval-when-compile (require 'subr-x))
|
||||
|
||||
(defconst erc-version "5.6-git"
|
||||
"This version of ERC.")
|
||||
|
@ -142,6 +142,12 @@
|
|||
(declare-function word-at-point "thingatpt" (&optional no-properties))
|
||||
(autoload 'word-at-point "thingatpt") ; for hl-nicks
|
||||
|
||||
(declare-function url-host "url-parse" (cl-x))
|
||||
(declare-function url-password "url-parse" (cl-x))
|
||||
(declare-function url-portspec "url-parse" (cl-x))
|
||||
(declare-function url-type "url-parse" (cl-x))
|
||||
(declare-function url-user "url-parse" (cl-x))
|
||||
|
||||
;; tunable connection and authentication parameters
|
||||
|
||||
(defcustom erc-server nil
|
||||
|
@ -2257,8 +2263,8 @@ parameters SERVER and NICK."
|
|||
|
||||
;;;###autoload
|
||||
(defun erc-select-read-args ()
|
||||
"Prompt the user for values of nick, server, port, and password."
|
||||
(require 'url-parse)
|
||||
"Prompt the user for values of nick, server, port, and password.
|
||||
With prefix arg, also prompt for user and full name."
|
||||
(let* ((input (let ((d (erc-compute-server)))
|
||||
(read-string (format "Server or URL (default is %S): " d)
|
||||
nil 'erc-server-history-list d)))
|
||||
|
@ -2278,6 +2284,14 @@ parameters SERVER and NICK."
|
|||
(let ((d (erc-compute-nick)))
|
||||
(read-string (format "Nickname (default is %S): " d)
|
||||
nil 'erc-nick-history-list d))))
|
||||
(user (and current-prefix-arg
|
||||
(let ((d (erc-compute-user (url-user url))))
|
||||
(read-string (format "User (default is %S): " d)
|
||||
nil nil d))))
|
||||
(full (and current-prefix-arg
|
||||
(let ((d (erc-compute-full-name (url-user url))))
|
||||
(read-string (format "Full name (default is %S): " d)
|
||||
nil nil d))))
|
||||
(passwd (let* ((p (with-suppressed-warnings ((obsolete erc-password))
|
||||
(or (url-password url) erc-password)))
|
||||
(m (if p
|
||||
|
@ -2298,8 +2312,8 @@ parameters SERVER and NICK."
|
|||
(push `(erc-server-connect-function . ,opener) env))
|
||||
(when (and passwd (string= "" passwd))
|
||||
(setq passwd nil))
|
||||
`( :server ,server :port ,port :nick ,nick
|
||||
,@(and passwd `(:password ,passwd))
|
||||
`( :server ,server :port ,port :nick ,nick ,@(and user `(:user ,user))
|
||||
,@(and passwd `(:password ,passwd)) ,@(and full `(:full-name ,full))
|
||||
,@(and env `(&interactive-env ,env)))))
|
||||
|
||||
(defmacro erc--with-entrypoint-environment (env &rest body)
|
||||
|
@ -2407,8 +2421,8 @@ Example usage:
|
|||
|
||||
When present, ID should be a symbol or a string to use for naming
|
||||
the server buffer and identifying the connection unequivocally.
|
||||
See Info node `(erc) Network Identifier' for details. Like USER
|
||||
and CLIENT-CERTIFICATE, this parameter cannot be specified
|
||||
See Info node `(erc) Network Identifier' for details. Like
|
||||
CLIENT-CERTIFICATE, this parameter cannot be specified
|
||||
interactively.
|
||||
|
||||
\(fn &key SERVER PORT NICK USER PASSWORD FULL-NAME CLIENT-CERTIFICATE ID)"
|
||||
|
|
|
@ -1161,7 +1161,18 @@
|
|||
(erc-select-read-args))
|
||||
(list :server "[::1]"
|
||||
:port 6667
|
||||
:nick "nick")))))
|
||||
:nick "nick"))))
|
||||
|
||||
(ert-info ("Extra args use URL nick by default")
|
||||
(should (equal (ert-simulate-keys "nick:sesame@localhost:6667\r\r\r\r"
|
||||
(let ((current-prefix-arg '(4)))
|
||||
(erc-select-read-args)))
|
||||
(list :server "localhost"
|
||||
:port 6667
|
||||
:nick "nick"
|
||||
:user "nick"
|
||||
:password "sesame"
|
||||
:full-name "nick")))))
|
||||
|
||||
(ert-deftest erc-tls ()
|
||||
(let (calls env)
|
||||
|
|
Loading…
Add table
Reference in a new issue