Forum: PC Hard- und Software LinuxMint: caja meld extension


von Uhu U. (uhu)


Lesenswert?

Unter gnome habe ich im Kontextmenü eine Dateivergleichsfunktion mit 
meld - das ist sehr praktisch.

Nun hätte ich gerne in caja unter Mint 17 (Ubuntu-Version) dieselbe 
Funktion; auf Github gibts auch sowas: 
https://github.com/cygwinports/mate-file-manager-pyextensions/blob/master/default-pyextensions/meld-compare.py

Der Haken an dem Teil: Es stammt von einem, der noch nichtmal mit 
vorgehaltener Pistole auch nur eine einzige Zeile Dokumentation 
schreibt.

Hat jemand eine Idee, was man damit anstellen muss, damit es mit caja 
läuft?

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Mint bringt eine Packung Extensions mit, die jedoch nicht unter 
Edit|Preferences|Plugins erscheinen.

In der Hilfe zu diesem Preferences-Tab stehen tolle Dinge über Plugins - 
nur ist das offenbar alles reine Fantasie, zumindest in der 
Mate-Version...

: Bearbeitet durch User
von Norbert (Gast)


Lesenswert?

Hier ein kleinen Bash-script rein ...
1
~/.config/caja/scripts

Zum Testen:
1
#!/bin/bash
2
T=/tmp/tmpout
3
date >> $T
4
env | sort | grep CAJA >> $T

Dann taucht's in caja <kontextmenü/rechte Maustaste> auf.

Dateien selektieren, <RM> -> scriptname  und anschließend die env vars 
auswerten.
1
CAJA_SCRIPT_CURRENT_URI=
2
CAJA_SCRIPT_SELECTED_FILE_PATHS=
3
CAJA_SCRIPT_SELECTED_URIS=
4
CAJA_SCRIPT_WINDOW_GEOMETRY=
5
CAJA_SCRIPT_NEXT_PANE_CURRENT_URI=
6
CAJA_SCRIPT_NEXT_PANE_SELECTED_FILE_PATHS=
7
CAJA_SCRIPT_NEXT_PANE_SELECTED_URIS=

Bei mehreren Dateien stehen sie in EINER environment Varablen mit '\n' 
getrennt.

Viel Spass.

von Uhu U. (uhu)


Lesenswert?

Danke für den Hinweis. Problem ist also die Hilfe von caja:
1
Installing File Manager Scripts
2
The file manager includes a special folder where you can store your
3
scripts. All executable files in this folder will appear in the Scripts
4
menu. The script folder is located at $HOME/.mate2/caja-scripts.
5
To install a script, simply copy the script to the script folder and give
6
it the user executable permission.
7
8
To view the contents of your scripts folder, if you already have scripts
9
installed, choose File ▸ Scripts ▸ Open Scripts Folder. You will have to
10
navigate to the scripts folder with the file manager if you do not yet have
11
any scripts. You may need to show hidden files for this, use View ▸ Show
12
Hidden Files

Jetzt gibts auch einen Menüpunkt Scripts... Nur das Meld-Teil, das ich 
jetzt installiert habe, tut gar nichts; aber das lässt sich evtl 
reparieren.

: Bearbeitet durch User
von Norbert (Gast)


Lesenswert?

Wenn du das hier als bash-script (chmod +x) in das caja 
scriptverzeichnis kopierst, müsste es sofort funktionieren. Ich hab hier 
zwar noch MATE 1.6 im Einsatz, aber das sollte kein Problem sein.

ScanSelectedEntries() baut mehrere Arrays mit den selektierten Daten 
auf.
Für die primary pane Files1[] sowie Type1[] und numFiles1.
Für die 'next' pane Files2[] sowie Type2[] und numFiles2.

Viel Spass
1
#!/bin/bash
2
#
3
#   meld script for caja
4
#
5
#   Copyright 2014 Norbert ..... <norbert@Entwicklung>
6
#
7
#   This program is free software; you can redistribute it and/or modify
8
#   it under the terms of the GNU General Public License as published by
9
#   the Free Software Foundation; either version 2 of the License, or
10
#   (at your option) any later version.
11
#
12
#   This program is distributed in the hope that it will be useful,
13
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
#   GNU General Public License for more details.
16
#
17
#   You should have received a copy of the GNU General Public License
18
#   along with this program; if not, write to the Free Software
19
#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
#   MA 02110-1301, USA.
21
#
22
23
function ScanSelectedEntries() {
24
25
    # Scan selected entries in primary pane
26
27
    let idx=0
28
    PrepArray=$(
29
        echo -e "${CAJA_SCRIPT_SELECTED_FILE_PATHS}" | while read line; do
30
            if [ ${#line} -gt 0 ]; then
31
                echo Files1[$idx]="'$line'"
32
                let idx=$idx+1
33
            fi
34
        done
35
    )
36
    eval "$PrepArray"
37
    let numFiles1=${#Files1[@]}
38
39
    for((i = 0; i < $numFiles1; i++)); do
40
        Type1[$i]="-"
41
        [ -f "${Files1[$i]}" ] && Type1[$i]="f"
42
        [ -d "${Files1[$i]}" ] && Type1[$i]="d"
43
        [ -h "${Files1[$i]}" ] && Type1[$i]="h"
44
    done
45
46
    # Scan selected entries in 'next' pane  (opened with F3)
47
48
    let idx=0
49
    PrepArray=$(
50
        echo -e "${CAJA_SCRIPT_NEXT_PANE_SELECTED_FILE_PATHS}" | while read line; do
51
            if [ ${#line} -gt 0 ]; then
52
                echo Files2[$idx]="'$line'"\;
53
                let idx=$idx+1
54
            fi
55
        done
56
    )
57
    eval "$PrepArray"
58
    let numFiles2=${#Files2[@]}
59
60
    for((i = 0; i < $numFiles2; i++)); do
61
        Type2[$i]=""
62
        [ -f "${Files2[$i]}" ] && Type2[$i]="f"
63
        [ -d "${Files2[$i]}" ] && Type2[$i]="d"
64
        [ -h "${Files2[$i]}" ] && Type2[$i]="h"
65
    done
66
}
67
68
function DebugOutput() {
69
    T=/tmp/tmpout
70
71
    (
72
    echo -e "CAJA_SCRIPT_CURRENT_URI                   " $CAJA_SCRIPT_CURRENT_URI
73
    echo -e "CAJA_SCRIPT_SELECTED_FILE_PATHS           " $CAJA_SCRIPT_SELECTED_FILE_PATHS
74
    echo -e "CAJA_SCRIPT_SELECTED_URIS                 " $CAJA_SCRIPT_SELECTED_URIS
75
    echo -e "CAJA_SCRIPT_NEXT_PANE_CURRENT_URI         " $CAJA_SCRIPT_NEXT_PANE_CURRENT_URI
76
    echo -e "CAJA_SCRIPT_NEXT_PANE_SELECTED_FILE_PATHS " $CAJA_SCRIPT_NEXT_PANE_SELECTED_FILE_PATHS
77
    echo -e "CAJA_SCRIPT_NEXT_PANE_SELECTED_URIS       " $CAJA_SCRIPT_NEXT_PANE_SELECTED_URIS
78
79
    for((i = 0; i < $numFiles1; i++)); do
80
        echo "--- ${Type1[$i]} ${Files1[$i]}"
81
    done
82
83
    for((i = 0; i < $numFiles2; i++)); do
84
        echo "--- ${Type2[$i]} ${Files2[$i]}"
85
    done
86
    ) >>$T
87
88
    geany $T &
89
}
90
91
ScanSelectedEntries
92
# DebugOutput
93
94
[ $numFiles1 -eq 2 ] && \
95
    meld "${Files1[0]}" "${Files1[1]}"
96
97
[ $numFiles1 -eq 3 ] && \
98
    meld "${Files1[0]}" "${Files1[1]}" "${Files1[2]}"
99
100
[ $numFiles1 -eq 1 ] && [ $numFiles2 -eq 1 ] && \
101
    meld "${Files1[0]}" "${Files2[0]}"
102
103
exit

von Uhu U. (uhu)


Lesenswert?

Super, vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.