Subject: bug#76955: 30.1; php-ts-mode-php-executable default path may not match remote path

From: Vincenzo Pupillo <[email-masked]>
Date: Tue, 18 Mar 2025 21:25:02 +0100

In data martedì 18 marzo 2025 13:46:05 Ora standard dell’Europa centrale, Eli 
Zaretskii ha scritto:
> > From: Morgan Willcock <[email-masked]>
> > Cc: Eli Zaretskii <[email-masked]>,  [email-masked]
> > Date: Mon, 17 Mar 2025 22:30:03 +0000
> > 
> > Vincenzo Pupillo <[email-masked]> writes:
> > > Ciao Eli, this is the new patch.
> > 
> > Hi Vincenzo,
> > 
> > The php binaries which I use are installed with pkgsrc, which supports
> > installing multiple versions of PHP, installed as bin/php${PHP_VERSION}.
> > One of those versions would be available as bin/php.
> > 
> > If I have two remote versions installed, and one of them is found by
> > executable-find searching for "php", I cannot see how I would select the
> > other version once the patch is applied.
> 
> How do you do this with the current version of php-ts-mode?
> 
> > Shouldn't the search name "php" be configurable to allow the name to be
> > 
> > overridden?  Something like this:
> >   (executable-find php-program t)
> > 
> > where php-program defaults to being "php".
> 
> It's possible to add this, but it would be a separate feature.

My proposal is this:

(defvar-local php-ts-mode-alternative-php-program-name nil
  "An alternative to the usual `php' program name.
In non-nil, `php-ts-mode--executable' try to find this executable.")

(defun php-ts-mode--executable ()
  "Return the absolute filename of the `php' executable.
If the `default-directory' is remote, search on a remote host, otherwise
return `php-ts-mode-php-default-executable'.  If
`php-ts-mode-alternative-php-program-name' is non-nil, finds this program
instead of the usual `php'."
  (let ((php-prog
         (if (file-remote-p default-directory)
             (executable-find
              (or php-ts-mode-alternative-php-program-name "php") t)
           (if php-ts-mode-alternative-php-program-name
               (executable-find
                php-ts-mode-alternative-php-program-name)
             php-ts-mode-php-default-executable))))
    php-prog))

WDYT?

Vincenzo