Abre arquivos no Sublime do WinSCP rodando em Wine

1

Alterei recentemente o sistema operacional Windows para o Ubuntu. Como desenvolvedor, eu realmente amei o WinSCP no Windows e simplesmente não consigo encontrar nenhum outro programa adequado no Linux.

No entanto, tudo funciona bem com o WinSCP rodando no Wine, exceto que eu não sou capaz de simplesmente clicar duas vezes no arquivo e abri-lo no Editor de Texto Sublime.

em Preferências - > Editores Eu tentei definir / usr / bin / subl e / opt / sublime_text / sublime_text como editores padrão, mas nenhum desses dois funciona para mim.

Quando abro um arquivo no servidor remoto, o Sublime é aberto, mas está vazio, sem conteúdo interno. Ou se fazendo clique direito e escolhendo "Abrir" no menu eu recebo "Não há nenhum programa do Windows configurado para abrir este tipo de arquivo".

Alguém sabe como configurar o WinSCP para abrir o arquivo com o editor local?

    
por PerS 23.05.2016 / 11:02

1 resposta

4

Eu tive exatamente o mesmo problema ( Ubuntu + Wine + WinSCP + Sublime ) e o Sublime estava me dando páginas em branco uma vez que eu tentei editar com ele. Googling não me deu nada, então eu fiz minha própria solução para isso (testado em Ubuntu 14.04 Trusty )

Aqui está minha solução e pesquisa .

Solução

Solução testada e funciona com Ubuntu 14.04 Trusty + Sublime 3 + Wine-1.6.2 . Eu acho que ele também funcionará para o Debian (não testei).

Eu dividi a solução em dois scripts para ter duas ferramentas universais em vez de uma específica.

A solução é adicionar um script para corrigir o caminho antes de chegar ao Sublime:

  1. O primeiro script wine2unix-path transformará o "caminho windows" do Wine em real caminho do sistema de arquivos e corrigirá seu formato (aspas duplas e invertidas \ )
  2. O segundo script sublime.exe usará o caminho do arquivo real fixo de wine2unix-path e o transmitirá para o Sublime.

Eu nomeei o primeiro script "sublime.exe" porque senão o Wine se recusa a vê-lo nas configurações de "Editores", quando eu atualizar o caminho do editor.

Etapas a serem executadas:

  1. Crie /usr/local/bin/wine2unix-path
  2. Crie /usr/local/bin/sublime.exe
  3. Atualizar caminho do editor em WinScp

Etapa 1. wine2unix-path

Exemplo de uso: wine2unix-path c:\Program files\WinScp\Log.txt retorna /home/YOUR_CURRENT_LINUX_USER/.wine/drive_c/Program files/WinScp/Log.txt .

  1. Criar arquivo sudo touch /usr/local/bin/wine2unix-path
  2. Tornar executável sudo chmod +x /usr/local/bin/wine2unix-path

Coloque o seguinte script:


#!/bin/bash

# Trim quotes
FILE=$(echo "$@" | sed -e "s#\(^['\"]*\)\|\(['\"]*$\)##g")
USER_NAME=$(id -u -n)
DRIVE_LETTER="'echo $FILE | sed -e "s/^\([a-Z]\):.*//" | awk '{print tolower($0)}''"

echo "$FILE" | sed \
    -e 's#\#\/#g' \
    -e "s#^[a-Z]:#/home/${USER_NAME}/.wine/drive\_${DRIVE_LETTER}#"

exit 0

O que esse script faz:

  1. FILE - Obter o caminho do arquivo e aparar " e ' aspas se houver alguma
  2. USER_NAME - Obtém o nome do usuário atual / home / USER
  3. DRIVE_LETTER - obtém a letra da unidade do caminho do arquivo (primeiro caractere). Pode ser diferente C:\ refere-se a .wine/drive_c , D:\ refere-se a .wine/drive_d etc.
  4. Atualizar caminho do arquivo
    1. Substitua o caminho raiz C:\ pelo caminho completo da pasta wine. C:\ se torna /home/USER/.wine/drive_c
    2. Substitui \ (barras invertidas de escape em um modo de janelas) por \ , caso contrário, C:\users\files se tornará C:usersfiles quando passar para sublime.
  5. Caminho do arquivo de resultado da saída (caminho do arquivo real)

Etapa 2. sublime.exe

  1. Criar arquivo sudo touch /usr/local/bin/sublime.exe
  2. Tornar executável sudo chmod +x /usr/local/bin/sublime.exe
  3. Coloque lá, fornecido abaixo
  4. Altere /opt/sublime_text/sublime_text caminho no script abaixo (última linha) com o seu caminho sublime.

Meu Sublime version 3103 está localizado em /opt/sublime_text/sublime_text


#!/bin/bash

# Wrapper script to open sublime from Wine
# 
# File path passed as a first argument should be "quoted" and "escaped"
# other wise spaces will split path into two
# 
# For example: sublime.exe "c:\Program files\WinScp\Log.txt"
# 

# wine2unix-path is a help script to convert "Wine windows paths"
# to real paths in linux so sublime can access it
# 
# For for example:
#     ./sublime.exe "c:\Program files\WinScp\Log.txt"
# Will result:
#     /home/YOUR_CURRENT_LINUX_USER/.wine/drive_c/Program files/WinScp/Log.txt

unixpath="'wine2unix-path $1'"

/opt/sublime_text/sublime_text "$unixpath"

O que esse script faz:

  1. Converte o caminho do arquivo de vinho em caminho de arquivo real.
  2. Passa este caminho entre aspas (para evitar dividir o caminho por espaços) para sublimar.

Etapa 3. Atualizar caminho do editor no WinScp

  1. Abrir WinScp
  2. Ir para Options > Preferences > Editors
  3. Se você já tem o Sublime nos editores:
    1. Selecionar linha com sublime
    2. Clique no botão Edit
    3. Definir o seguinte caminho para "Editor externo" Z:\usr\local\bin\sublime.exe \"!.!\"
    4. Clique em Ok . Feito
  4. Se você não tem o Sublime nos editores:
    1. Clique em Add (para adicionar o editor sublime e atribuí-lo aos tipos de arquivo).
    2. Definir o seguinte caminho para "Editor externo" Z:\usr\local\bin\sublime.exe \"!.!\"
    3. Defina a lista de tipos de arquivos que você deseja editar com ela em "Usar este editor para os arquivos a seguir". Eu uso para arquivos PHP e algumas configurações *.ini; *.txt; *.php; *.tpl ou *.* para todos os tipos de arquivos
  5. Verifique se a linha Sublime está no topo da lista em Editor preferences . Isso priorizará os tipos de arquivos selecionados para o Sublime.

Imagem: configurações sublimes no WinScp

Pesquisa do problema

O problema aparece no caminho do arquivo que o Wine passa para o Sublime:

  • O caminho não é cotado com " ou ' quando passou para sublime
  • As barras invertidas de caminho são duplicadas em \

Um exemplo:

  1. Arquivo para editar /server/user/www/my project/some other file.php
  2. O vinho chama sublime Z:\opt\sublime_text\sublime_text /home/CURRENT_USER/.wine/drive_c/Program files/WinScp/server/user/www/my project/some file.php (caminho não citado ou com escape)
  3. Sistema executa como /opt/sublime_text/sublime_text /home/CURRENT_USER/.wine/drive_c/Program files/WinScp/server/user/www/my project/some file.php .
  4. Então, o comando é interpretativo como:
    1. Comando /opt/sublime_text/sublime_text
    2. Argumento /home/CURRENT_USER/.wine/drive_c/Program
    3. Argumento files/WinScp/server/user/www/my
    4. Argumento project/some
    5. Argumento file.php

Como o caminho resultante é dividido por espaços devido à falta de aspas. Como eu encontrei mais tarde, há também problema com double escapes \ em um caminho

    
por Devaldo 29.08.2016 / 02:57